2017-07-18

歩行空間ネットワークのジオメトリ作成

G空間情報センターで公開されている「歩行空間ネットワークデータ」(CSV形式)に基づいて、ネットワークのノードを表すポイントと、ノード間のリンクを表すラインを作成するFMEワークスペース例を紹介します。

ソース 1:(東京都)台東区データ「ノード情報.csv」
1行1ノードで、ノードID (ユニークな識別子)、緯度、経度、高さ、その他の属性が記述されています。緯度、経度は特殊な書式(緯度: DD.MM.SS.SS, 経度: DDD.MM.SS.SS)で記述されているので、ジオメトリ(ポイント)を作成するには、それぞれ十進度に変換する必要があります。「高さ」は標高ではなく、屋内の場合は階層数を示す値(中間階は *.5)、屋外の場合は0です。













ソース 2:(東京都)台東区データ「リンクの情報.csv」
1行1リンクで、リンクID (ユニークな識別子)、起点ノードID、終点ノードID、その他の属性が記述されています。位置情報は記述されていないので、ジオメトリ(ライン)を作成するには、起点/終点ノードIDと一致するノードIDを持つノード情報を参照する必要があります。













変換結果: (東京都)台東区データ - 浅草寺付近のノード (ポイント) とリンク (ライン)
FME Data Inspector による表示。背景は地理院地図「標準地図」です。



















FMEワークスペース例 (FME 2017.0.1.1 build 17291)

1. ノードのジオメトリ(ポイント)作成












ノードの座標(緯度、経度)と「高さ」に基づいて VertexCreator によって3Dポイントジオメトリ (Z=「高さ」) を作成することができますが、ソースデータに記述されている座標の書式が特殊(緯度: DD.MM.SS.SS, 経度: DDD.MM.SS.SS)であるため、事前に十進度に変換する必要があります、この例では、StringSearcher (2個) と AttributeManager を使ってそれを行いました。

StringSearcher x 2: 次の正規表現によって、緯度/経度文字列から度、分、秒の3数値を抽出して _lat{}.part (緯度), _lon{}.part (経度) リストに格納します。

正規表現: ^(\d+)\.(\d+)\.(.+)$

注: 日本語版Windowsでは、バックスラッシュ \ を半角¥記号に読み替えてください。


リストの要素格納される値
_lat{0}.part緯度
_lat{1}.part
_lat{2}.part
_lon{0}.part経度
_lon{1}.part
_lon{2}.part

StringSearcher パラメーター設定画面 (左: 緯度, 右: 経度)















AttributeManager: 緯度、経度の値として次の式を Arithmetic Editor (数式エディタ) で入力することにより、実行時に、それらの値が式の計算結果(十進度)で置き換えられます。

緯度: @Value(_lat{0}.part)+@Value(_lat{1}.part)/60.0+@Value(_lat{2}.part)/3600.0
経度: @Value(_lon{0}.part)+@Value(_lon{1}.part)/60.0+@Value(_lon{2}.part)/3600.0

注: "@Value(属性名)" は、実行時に属性の値を抽出するための式であり、エディタ左側のペインの Feature Attributes セクションに表示されている属性名のダブルクリック、あるいは、ドラッグ・アンド・ドロップによって編集中の式に挿入することができます。リストの個別の要素({ } 内でインデクスを指定したもの)は、属性名として取り扱われます。

注: DecimalDegreesCalculator トランスフォーマーによって、度、分、秒から十進度への換算を行うこともできます。

AttributeManager パラメーター設定画面














VertexCreator: 十進度に変換済みの緯度、経度、および高さに基づいて3Dポイントジオメトリを作成します。


2. リンクのジオメトリ(ライン)作成
リンク情報フィーチャーは多数の属性を持っていますが、下図では、説明上必要な属性のみを現しています。

















FeatureMerger: CSVリーダーで読み込んだリンク情報フィーチャーに、その「起点ノードID」と一致する「ノードID」を持つノードフィーチャー(属性とジオメトリ=起点ノードのポイント)を結合します。

FeatureMerger_2: 起点ノード結合後のリンク情報フィーチャーに、その「終点ノードID」と一致する「ノードID」を持つノードフィーチャー(属性のみ)を結合します。

VertexCreator_2: 終点ノード結合後のリンク情報フィーチャーのジオメトリ(起点ノードのポイント)に、終点ノードのポイントを追加し、リンクのジオメトリ(起点ノードと終点ノードを結ぶライン)に変換します。

FeatureMerger は、Supplier フィーチャーの属性のみを Requestor フィーチャーに結合するために使うことが多く、Feature Merge Type パラメーターの初期設定は "Attributes Only" (属性のみ) となっていますが、それを "Attributes and Geometry" (属性とジオメトリ) に変更することにより、属性とあわせてジオメトリも結合できるようになります(結合先の Requestor フィーチャーがジオメトリを持っていた場合には、Supplier のジオメトリに置き換えられます)。

また、Accumulation Mode パラメーターを "Prefix Supplier" に設定することにより、Supplier フィーチャーの属性名に "Prefix" で指定した接頭辞(プレフィクス)を付加してから結合することができます。この例では、起点ノードを結合するときに「起点」、終点ノードを結合するときに「終点」を接頭辞として付加しました。


歩行空間ネットワークデータのノードは「高さ」(標高ではなく、階層数を示す値)を持っているので、上記ワークスペース例のように、リンクのジオメトリを3Dライン (Z=「高さ」) として作成することにより、起点と終点の座標(緯度、経度)が等しく、「高さ」が異なる鉛直のリンク(例: エレベーター)も表現できます。

しかし、今回使用した台東区データでは、起点と終点の座標が等しく、「高さ」も等しいリンクが10箇所ありました。このデータを業務で利用しようとするならば、「高さ」も含めて起点と終点が一致するリンクが何を意味するのか追求しなければなりませんが、FMEケーススタディとしてはここまでとします。