2017-02-25

境界線と代表点に基づくポリゴンデータの作成

先日、あるGIS関連会社の社内勉強会でFMEについて紹介させていただく機会があり、多数の方々が熱心に聞いてくださいました。大変ありがとうございました。

会場に向かう途中、時間調整で立ち寄ったコーヒー店で標題のテーマを思いつきました。

紙地図などに基づいてGIS用のポリゴンデータを作成する場合、多かれ少なかれ、マニュアル(手作業)でデジタイズする工程は避けられないと思いますが、例えば行政区域のように、隣接する領域の境界が一致していなければならないものについて、マニュアルで「面」を作成しようとすると、隣接する領域の境界を一致させるのに結構手間がかかるのではないでしょうか。

実際、隣接する領域の境界が一致していないデータはたくさんあり、単独の主題図として利用する場合には問題にならないほどのわずかなものであっても、融合(dissolve)したときに隙間が生じるなど、ジオメトリデータとしての再利用は難しいということには頻繁に出くわします。

マニュアルの工程では、隣接する領域を区分する境界線(ライン)と各領域内部の代表点(ポイント)を作成することにし、ポリゴンデータとして仕上げるのはFMEにまかせることにすれば、データの精度を向上させつつ、かつ、作業の効率化(工期短縮、コストカット)も図れるのではないか、という発想です。

上記勉強会でも考え方をお話ししましたが、コーヒー一杯の時間ではFMEワークスペース例の用意まではできなかったので、ここで紹介します。

ソース:
・境界線(ライン、属性なし)
・代表点(ポイント、属性として地物のIDを持つ)
・属性テーブル(ID、その他の属性)















FMEワークスペース例 (FME 2016.1.3.2 build 16717)











[FILEGDB] リーダー: マニュアル工程で作成された境界線と代表点を読み込む。
Intersector: 境界線を交点で分割し, 隣接する境界線が端点で接するようにする。
AreaBuilder: 端点で接する境界線で囲まれた領域を表すポリゴンを作成する。
SpatialFilter: 代表点の属性(ID)を空間的関係(含まれる: Within)があるポリゴンに与える。
Aggregator: 同一IDのポリゴンを集約する(飛び地をまとめる)
FeatureMerger: IDをキーとして, 外部テーブル(Excel)で整理したその他の属性を結合する。
[ESRISHAPE] ライター: Shapefile形式のファイルに出力する。

結果: Esri ArcMap による表示例


ソース、出力先のデータフォーマットは、ベクタージオメトリ(点、線、面)の格納が可能でFMEがサポートするものであれば何でも構いません。また、属性を定義する外部テーブルのフォーマットも、FMEがサポートするものであれば任意です。

AreaBuilder は、端点で接するラインで囲まれた領域を表すポリゴンジオメトリを作成します。デフォルトでは、「接する」ためには座標が倍精度浮動小数点数の精度で完全一致している必要がありますが、マニュアルの工程で隣接する境界線の端点を一致させるのも面倒です。

そこで、前出図のように端点となるべき地点でラインが交差するようにしておけば、Intersector によってラインを交点で分割し、その結果として、隣接する境界線が端点で「接する」(完全一致する)ようにできます。

AreaBuilder は、一方または両方の端点が他の端点と接していないラインを無視するので、交点から飛び出す部分の長さや形状は任意です。ただし、無視されるべき区間で他のラインとの交差、あるい自己交差がないように注意する必要はあります。

代表点には地物のID(例えば連番)のみを属性として与えておけば、Excelなどの外部テーブルで作成した他の属性を結合することは簡単です。IDの割り当て方さえ仕様化しておけば、ジオメトリデータ作成と属性データ作成を分業化することもできます。

FMEの利用に限らず、さまざまな工夫をすることによって精度の高いポリゴンデータの作成を実現している企業もあるかと思いますが、ウェブ上で公開されているデータには隣接する領域間で隙間や重複がある例が多く見られ、業界全体としては改善の余地がまだまだあると感じています。FMEの利用方法としては初歩的な例ですが、効果は大きいと思います。

0 件のコメント:

コメントを投稿