2017-02-26

DEMラスターや標高APIによる標高値取得

ある地点について高精度の標高値を得るには、現地に赴いて測量したり精度の良いGPSで計測したりしなければなりませんが、おおむねの値で良ければ、ウェブ上で公開されているデータやサービス - 基盤地図情報「数値標高モデル」(DEM)や「標高API」によって取得することができます。

しかし、おおむねの値で良いとはいえ、データソースによって値がどの程度ばらついているものなのかは、ちょっと気になるところです。

そこで、基盤地図情報基本項目「標高点」に記述されている標高値、および、それらの標高点と同じ地点(座標)について基盤地図情報DEMと標高APIによって取得した標高値の対比表を作成してみました。


国土地理院 標高API
リクエストURL
http://cyberjapandata2.gsi.go.jp/general/dem/scripts/getelevation.php?<パラメーター>

パラメーター名備考
lon十進経度
lat十進緯度
outtypeJSONレスポンスをJSON形式で取得する場合に固定文字列「JSON」とする

レスポンス(JSON文書)
{"elevation":<標高値>, "hsrc":<データソース>}


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












[JP_FGD_DEM] リーダー(カスタムフォーマット): 基盤地図情報DEMをラスターとして読み込む。
[GML] リーダー: 基盤地図情報基本項目「標高点」を読み込む。
PointOnRasterValueExtractor: 標高点の位置におけるDEMラスターのバンド値(標高値)を取得する。
CoordinateExtractor: 標高点の座標(経度, 緯度)を属性として抽出する。
HTTPCaller: 標高APIにリクエストを発行し, レスポンス(JSON文書)を取得する。
JSONFlattener: JSON文書からメンバー(elevation, hsrc)を属性として抽出する。
AttributeManager: 一部の属性名の変更, 不要な属性の削除
[XLSXW] ライター: Excelスプレッドシートに結果を出力する。

結果: 二次メッシュ 5338-05 (148標高点) についての実行結果


















基盤地図情報「数値標高モデル」(DEM)は FME Hub で公開されている JP_FGD_DEM カスタムフォーマットによってラスターとして、基盤地図情報「基本項目」の各データは標準の GML リーダーによってベクターとして読み込むことができます。

PointOnRasterValueExtractor では、Point ポートから入力された各ポイントの位置について、指定された補間方法によって求められたラスターのバンド値が取得できます。

補間方法としては、Interpolation Type パラメーターによって下記のうちどれかひとつが指定できます。上記の結果(DEM標高値)は Bilinear によるものです。
・Nearest Neighbor (最近傍)
・Bilinear (バイリニア補間)
・Bicubic (バイキュービック補間)
・Average 4 (4近傍平均)
・Average 16 (16近傍平均)

次に、CoordinateExtractor によって標高APIリクエストのパラメーターとして必要な経度と緯度を属性として抽出してから HTTPCaller によってリクエストを発行し、レスポンス(JSON)を属性(_response_body)として受け取ります。

HTTPCaller パラメーター設定画面

























JSON文書に記述されている2つのメンバー elevation (標高値), hsrc (データソース) は JSONFlattener によってそれぞれ同名の属性に格納できます。ただし、それらの属性を後続のトランスフォーマーやライターフィーチャータイプで参照するには、Attributes to Expose パラメーターによってワークベンチのインターフェースに現しておく必要があります。

JSONFlattener パラメーター設定画面






















最後に、(この例では必須ではありませんが)AttributeManager によって属性名を変更したり不要な属性を削除したりしてから、Excelファイルに出力しました。

0 件のコメント:

コメントを投稿