見出し画像

タイル境界で繋がっていない道路中心線データを繋ぐ


はじめに

データの課題

こんにちは。
我々のホームページ(コンサベーションGISコンソーシアムジャパンのホームページ)のデータをご利用になった方はご存知かと思いますが、国土地理院ベクトルタイル提供実験国土地理院最適化ベクトルタイルのデータを元にした道路中心線のデータは、所によって不連続になっている場所があります。その場所のほとんどはタイル※のつなぎ目部分です。

※タイルについては、過去のnote「Web Mapのタイル番号をArcGIS Proで計算する その1」や「Web Mapのタイル番号をArcGIS Proで計算する その2」をご覧ください。

ただ、常に不連続かというとそうでもなく、不連続なときとそうでないところがあります。
現在のところ、これを計算処理だけで100%の完全性を保証して修正する方法は見つけられていません。私の調査不足も有ると思います。
その100%を目指すには、目視で1つ1つチェックしていく必要がありますが、当方はボランタリーでこのデータ提供をしていますので、そこに割くリソースもないのが現状です。

地理院のサービスは「実験」中のものでもありますので、いずれその辺を解決する技術やサービスの提供がなされるとも考えられます。例えば、データ自身が繋がって無くても、1つの連続データとして扱えるようにシステム側で処理してしまうなどです。

ホームページでのデータ提供の利用者想定としては、あくまで環境保全活動などに従事されている機関・団体の方、GISのプロでない方としています。
当方としては、何よりもまずデータを使ってGISの扱いに慣れて欲しいと考えていますので、完全を追うのではなく、そのままの状態であっても広く提供するという方法を取っております。ご理解ください。

今回のnoteで紹介する方法について

さて、今回の記事では、その不連続な道路中心線のデータを繋ぐ方法について紹介します。ただし100%の精度の保証はしていません。
ある程度限定的な範囲、地域を扱う利用者の方にとっては、その後、精度を上げるためのチェックの工程をご自分で行うとしても、なんとか量的に対応できるのではないかと想定しているためです。
逆に、もっと広い範囲を扱う方でも、この程度の精度は許容できる、その後の精度確保のための対応も自分でできるのであれば、参考にしていただければと思います。

データはどうなっているのか

ここでは秋田県の国土地理院最適化ベクトルタイルデータに有る道路中心線のデータで説明します。
ズレは「主に」タイルを挟んだ場所にあって、南北か東西にズレています。
ただそのズレ幅がとても小さく、実際の値として0.11m、緯度経度でよく使われる10進緯度経度(度が整数で分秒は小数点)の単位だと小数点以下第6位(10のマイナス6乗)の桁でのズレということになります。
目視でわかるズレではないですし、勿論地図の精度とは無関係。図形をタイルに分割するときの座標の最小単位の問題のようですが、その辺の理由はよくわかりません。
タイルマップシステムで、常にこのズレがこの大きさだとすれば、システム側で吸収できる問題ではあります。この誤差はズレとみなさなければいいわけですから。
しかし、汎用のGISソフトウェアでこのデータを扱う場合にはそうは行きません。どんなデータが入ってくるかソフトウェアにはわからないためです。
それを「一括で」繋いでしてしまおうということです。
ここで「一括で」がポイントで、1つ1つ確認して手動で繋ぐ方法では有りません。それについてはソフトウェアのマニュアルをご覧ください。

汎用のGISソフトウェアでも内部に座標の最小単位設定はあります。ただ、その結合処理をソフトウェアで実行して、以降そのソフトウェアで使い続けるのであれば、問題は起きづらくなる(バージョンの違いなどで、絶対に起きないとは言えない)と考えています。

タイルの境界(緑色)で南北に道路中心線(黄色と水色)がズレている
タイルの境界(緑色)で東西に道路中心線(黄色と水色)がズレている

道路中心線を繋ぐ方法

1.ArcGIS ProのSnap機能を使う

使用上の注意 この方法は、対象のデータを上書きします。処理をするときは必ずコピーを取っておきましょう。

上の2つの情報を参考に以下の設定をします。ズレの距離が違う場合、別の値を使ってください。なおSnap機能の詳細はこちら

  • 入力フィーチャとスナップ環境のフィーチャは同じもの(自身)を指定

  • 種類:「端点」(「頂点」にすると途中の点にくっついてしまうかも)

  • 距離:0.000005(5x10の-6乗)度 1~9の数字の可能性があるが真ん中を取って5とした

Snap距離を0.000005(5x10の-6)度としたときのSnap処理
データ名は任意で構わないが同じにすること

その結果が、下の図の水色と黄色の線です。端点が同じ場所になっています。なお、この処理で使用したデータは秋田県全域の232,287ラインあるデータでしたが、処理に1時間かかりました。
この処理は属性に応じた統合をするわけではないので、以降、必要に応じdissolve処理が必要です。

Snap距離を0.000005(5x10の-6)度としたときのSnap処理結果
黒は元々のデータ、緑はタイル境界

同じ処理で、南北に道路中心線がズレている別の箇所でも、端点の位置が合っていることがわかります。

Snap距離を0.000005(5x10の-6)度としたときのSnap処理結果
黒は元々のデータ、緑はタイル境界

ここで、距離として0.000001(1x10の-6乗)度を選ぶとどうなるでしょうか?

Snap距離を0.000001(1x10の-6)度としたときのSnap処理
データ名は任意で構わないが同じにすること

その結果が次の図です。。。変わっていません。
距離が短すぎて、相互の端点がSnapの範囲内になかったということになります。

Snap距離を0.000001(1x10の-6)度としたときのSnap処理結果
黒は元々のデータ、緑はタイル境界

距離の設定は試行錯誤がいる部分です。上記のように結合しない場合もありますし、三叉路の場所が偶然タイル境界にきて、思いもしない点と繋いだりする可能性も(限りなく少ないですが)ゼロではありません。
またこのSnapでは結合した後、何れかの端点に近寄るわけですが、属性などで制御できるわけでは無いのでその注意が必要です。ヘルプを読む限りOBJECTIDの大きい方に寄せることになっています。

さて、0.000005(5x10の-6)度の結果をIDと長さを除く全属性でディゾルブした結果ですが、224,820ラインになります。7,467ライン(3.2%)の減少です。さらに、このSnapの編集前後で図形個々に多少なりとも変わったラインを探すと7,554ラインになりましたが、ほぼ同じです。Snap前とSnapで変わった7,554ライン部分を図示するとこんな感じになります。

Snap前後のデータの比較
黒:Snap前のデータ、赤:Snap後のデータで変わった部分(7,554ライン)

秋田駅の周辺について拡大したデータを見てみます。一目でわかるようにタイルのつなぎ目にはわりと何処にでもある状態です。

Snap前後のデータの比較(秋田駅周辺)
黒:Snap前のデータ、赤:Snap後のデータで変わった部分、緑:タイル

ここまではArcGIS ProのSnap機能で道路中心のズレを繋ぐ方法を説明してきました。今回はこれで必要十分です。
ただSnap機能という点だけで言えば、ラインを繋ぐ際、どっちの端点に繋ぐのかという条件がOBJECTIDでしかないというのは、少し残念な気はします。
もちろんデータを属性でSortして書き出して、OBJECTIDを付け替えてしまっても代用できます。

2.EtGeoWizardsのClean Polylines機能を使う

Et Geo Wizardsについて

長年ArcGISを使っていた方はご存じかも知れませんが、ArcGISの機能を補完するようなプログラムが多数含まれている有償のソフトウェアです。

ESRIのウェブサイトにもESRI Partnersとして紹介されていますので、ご安心を。

最近はアドインではなくArcGISがなくても動きますが、結局データ、データベースはArcGIS依存のものを多く使いますので、事実上セットだと考えてもいいと思います。
細かい仕様や入手先はこちらのウェブサイトをご参考ください。色々ありますが、ET GeoWizardsを選択してください。
価格表を見ると、1ライセンスは2023/8/1時点で265USドルとなっています。円安になると相対的に高くなるので、その辺が悲しいところです。

使用上の注意 フォルダ名、ファイル名に日本語が入っていると文字化けします。アルファベット名を使うようにしてください。日本語のヘルプ、マニュアルもありません。また、2023/8/1時点で少し前のバージョンには、バグがあるので、ArcGISProは最新(3.1.2)にした上で、最新のバージョン(12.6)にしてください。

  1. WindowsのメニューからET Geo Wizards12を選択

  2. 起動画面からClean Polyline Layerを選択 何故かClean Polylinesとなりますが、こういうことは多いソフトウェアなので気にしないでください。

ET Geo Wizardsの初期画面からClean Polyline Layerを選んだところ
Clean Polylinesの画面

このClean Polylinesの画面では例えば次のように設定します。

  • Input Layer: 修正対象のデータ (例としてfilegeodatabase内のfeatureclassであるroadを指定している)

  • Output Layer: 修正後のデータ (例としてfilegeodatabase内のfeatureclassであるroad_clean_lengthを指定している)

  • Fuzzy Tolearnce: Fuzzy Toleranceのこと(ヘルプにはちゃんと書いてあります)。これまでと同じように0.000005(5x10の-6乗)DEGREEとしてみます。

  • Select a sort field(Optional): 結合するときの基準となるフィールド(オプション)。文字でも数値でも昇順にした場合に先頭に来る方に結合します。ここでは事前にroadにlengthXYというフィールドを設け、その順で並べるようにしました。

実は我々のホームページ(コンサベーションGISコンソーシアムジャパンのホームページ)で提供しているこの道路中心線のデータは、その他の属性(OBJECTID除く)が全て同じなら、道路延長の小さい方から並んでいるので、指定してもしなくても結果の違いがわかりません。
そこでここではあえて、道路延長を負にならないように反転した値を計算して、lengthXYに入れています。道路の長いほうが数値が小さくなっている状態です。

このような準備をして無事計算が終わるとこのような画面が出ます。

計算終了画面

同じ場所ですが、計算時間はわずか13分でした。

結合の結果

道路の長い方により短い数値を与えてそちらを選択するようにして結合させたものです。南側にある線が選ばれています。
実際には0.11mしか離れていないわけで、どちらでもいいレベルの話なのですが、もしそれでも動かしたくない端点があるとしたら、こういう方法も有るという意味で紹介しました。

まとめ

今回は国土地理院ベクトルタイル提供実験及び最適化ベクトルタイル試験公開で提供されているデータのうち、道路中心線がタイル間で不連続になっている場合に、その不連続を繋ぐ方法について説明しました。
この方法自体は汎用的なものなので、応用は効きます。
100%精度を保証できる解決策ではないので、現在のボランティアベースの活動でデータを作成する予定はありませんが、もし何かしらのニーズが有るようでしたら今後検討したいと思います。
また、最後に紹介したET Geo Wizards、なかなか面白いソフトウェアであるものの、日本語の説明が必ずしも豊富にあるとは言えないので、今後機会があれば紹介してみたいと思います。

最後に

ここまでご覧いただき、ありがとうございました。

普段は北海道に本拠地を置くNPOに所属し、環境保全を主な題材としてGISやリモセンに関する仕事をしています。

コンサベーションGISコンソーシアムジャパン の活動もその1つです。
ご相談、ご質問、お仕事のご依頼などがございましたら、コンサベーションGISコンソーシアムジャパンWEBサイト掲載のメールアドレスまでメールをお寄せください。

コンサベーションGISコンソーシアムジャパンの活動及びこのnoteでの活動はボランティアで行っているのですが、何分資金が不足しています。
もしサポートしてもいいなという方がいらっしゃいましたら、そちらもよろしくお願いします。

noteの中の人は都内に居るので、お仕事などお声がけいただければと思います。

この記事が気に入ったらサポートをしてみませんか?