空間解析がコケるときはアレなGISデータのせいかもしれませんよ!
新関健之助 著,黎明社『トラノコトラチャン : おばけやしき』(国立国会図書館所蔵)
「国立国会図書館デジタルコレクション」収録/under PDM Lisene
はじめに
ユニークな記事が集うMIERUNE Advent Calendar 2020 14日目の記事です。
ベクトルデータの空間的な関係(トポロジ)などに不具合があるアレなGISデータを用いて空間解析などを行うと、ちゃんとした処理結果が出ません。また、ずっと処理がループ状態になったり、GISソフトが落ちたり、データをエキスポートするたびに壊れたりする事例もあったりしてなかなか厄介です。
画面上ではちゃんとしているように見えることがクセ者で、慣れていない方はなぜ不具合が出るのかすぐわかりません。
GIS歴が長い人はこのような大やけどに何回か見舞われているので「あーこれねー」となんとなく察しがつくのですが、こんなトラップに若人の貴重な時間やコスト費やさせるのは心が痛みます。
自由に引用可能そうな日本語情報もあまりなさげなので、よくあるタイプの壊れたGISデータをいくつか簡単に例示しておきます(幾何学的な深い解説は専門家さんにおまかせしますね)。
想定する読者
- 空間解析がうまく進まなくて困る
- よそ様から頂いたGISデータが壊れているようだけどなんて説明したらよいのか
- そもそもGISデータが壊れることを知らなかった
- 作業者さんへ壊れたGISデータをつくらないような指示書を書いているがいちいち図を書くのがめんどい
…というかた向けに書いています。
では早速アレなGISデータの例を上げていきましょう
ラインデータ
Overshoot/Undershoot
青のラインに対して、(本来の狙いに対して)それぞれのラインが正しく接続できていない状態です。橙のラインのように突き抜けてしまっている状態をOvershoot。緑のラインのように届いてないラインをUndershootといいます。
最短距離の計算などのネットワーク解析などを行った場合GISは「つながっていないラインデータ」とみなして正確な結果が出ません。
ポリゴンデータ
ポリゴン系のアレなGISデータを使ってインターセクト(交差)やディゾルブ(融合)処理を行うと顕著にエラーがでます。もちろん面積計算などでも過不足が大きい値がでちゃいますので、その結果の面積値を実施計画や用地買収予算請求などに使ったりすると……………
Overlap
青のポリゴンに対して、橙のポリゴンが重なってしまっている状態です。
Gap
青のポリゴンに対して、橙のポリゴンが接合できておらず、隙間が会いている状態です。
Sliver polygon
青と橙のポリゴンの間で細長い赤のポリゴンが生成されている状態です。
自動生成ポリゴンや穴埋めのfillを多用しすぎるとこんなポリゴンが多数できてしまいます。(※なお、学生時代Silver(銀) polygonと空目して覚えてしまい海外の人に大笑いされたことがある)
Self intersection
同じフィーチャー内でねじれたポリゴンが生成されている状態です。別名「自己交差ポリゴン」や「8の字ポリゴン」ともいわれています。
※いまだにけっこうあります
行政から公開されているオープンデータなどでも時々このようなデータがあります。
そのときはメールなどでやさしくお知らせしてあげてください(以前は5万分の1植生図の2次メッシュごとに実測数ミリのGapがあったり、街区ポリゴンが重なっていたりしました。たぶん…もう…あまり…無いはず…たぶん…)。
詳細を知りたい方
このあたりにさらに詳細な情報があります
対応案
QGISでクリーニング処理
- 空間処理の前にジオメトリチェッカーをかけてみる
デフォルトではインストール済みプラグインには入っていますがチェックボックスが外れていることがありますので注意
- GRASS内のv.cleanも試してみる
※ただしGISデータクリーニングはなかなか厄介でして一発で完璧にすべて修復できることはそう多くはないのでご注意を。
強引な方法
あまり時間がなく、多少の誤差精度は問わないけどとにかく処理を終わらせるためには、小さなグリッドサイズのラスタに変換後ベクタに戻して、ポイント経由などで属性を戻すとトポロジが改善されます。しかしこれは出血多量を止めるために傷口をバーナーで焼くような手段なので時と場合によります。
データを作る際の注意点
データ入力次QGISではデフォルトでオフになっているのですが、スナップ機能をオンにしたほうがよいでしょう。また、Overlapを避けるためにプロジェクト⇒スナップオプション⇒(プロジェクトのスナップ設定ウインドウで)「高度な構成」を押したあと「重なりを避ける」設定もしておくと事故が防げます。
※どうやらQGIS3.14からは設定箇所が変更になっているようですのでご注意を
また、対象範囲の矩形ポリゴンを作成後、切り込みを入れてポリゴンを生成する方法があります。
また輪郭ラインを入力後ポリゴンに変換、その後ポイント属性入力といった手法もあります。
トポロジーエラーが少なくなるぶん、属性入力漏れやライン接点漏れなどによるポリゴンビルド抜けもあり、結局しっかりチェックをしなくてはいけないので一長一短です。
あとは経験談ですがGISの初心者にいきなり本番用ポリゴンを書かせるのはなかなかリスキーですので、しっかりレクチャーやチェックにコストをかけたほうが、あとあとの大量にでてくる有象無象の修正に対するコストが節約できます。
また、たとえば広大な街区図や地質図などといった大量のGISデータ入力を行う場合は、専門業者さんに「ちゃんとトポロジーも気をつけてお願いします!」とオーダーしたほうがなんでも内製で済まそうとするよりもリスクやコストが低くすむ場合もありますので、候補に入れておいてもよいかもしれません。(なお、弊社ではこの手のマッチョな入力作業はやりませんので…😅)。
その他困ったGISデータ図鑑
トポロジ不具合ほどではないのですが、このほかにもこんなデータもあります。
しれっとDD.MMSSSSポイントデータ
緯度経度ポインテキストデータにいて、123度45分12.3秒だった場合、123.45123とCSV上などで入力されていると、QGISなどで一般的な手法で地図化するとこのような謎の格子隙間があき、正確な位置に落ちません。
たまに行政が出しているオープンデータでも諸元に断りもなくこのようなデータ形式になっており注意が必要です。
某行政のオープンデータですと瀬戸内海に多数の高齢者福祉施設がプロットされたり、オープンデータ担当さんが確認をしたら海上で交通事故が発生していることになっていた事例などもあります。
ポリゴン重心はポリゴン外にある場合がある
ポイントを介して空間処理を行う場合、ポリゴンから数学的重心点を発生させる手法をとります。しかし三日月型などのポリゴンの場合、重心点はその地物より外側に出てしまいます。
これを避けるために、QGISでは必ずポリゴン内に内部保証点(point on surface)を作成する機能があります。
-
SHP属性名に日本語が長々と入っている
歴史ある(語彙)SHP(dbf)ファイルの仕様により、属性フィールド名は半角10文字までとなっています。日本語を入れれなくもないのですが、Pythonなどを使った空間処理を行う上でエラーの原因になりますのでなるべく避けたほうが良いです。
また、某国産GISソフトではなぜかここに何文字でも日本語を詰め込めてしまう機能があり、このソフトで作成されたSHPファイルは保存をするたびにどんどん属性が壊れていくという事案がありました。そのためやはりフィールド名は日本語は避けてほしいものです(たしかに初見の方は見難いかもしれませんが何卒🙇)
…ほかにもまだまだあるのですが、よくあるアレげなGISデータを列挙してみました、これらの情報があなたのお悩みをちょっとでも解決できれば幸いです。
この記事のライセンス
この記事はCC BY 4.0(クリエイティブ・コモンズ 表示 4.0 国際 ライセンス)の元で公開します、どうぞどうぞ。