従来から提供されてきたShapefile形式やXML形式よりも軽量で扱いやすいGeoTIFF形式のデータが提供されるようになったのは歓迎です。FMEユーザーとしては、過去のデータについても、今回公開された「ラスタ版」データ (平成26年度) と対比可能なラスターデータセットの作成にチャレンジしたくなります。
「メッシュデータのラスター化 - 土地利用細分メッシュ (2015-07-18)」および「同 [更新] (2017-04-07)」 で示したように、Shapefile形式またはXML形式の土地利用細分メッシュデータをラスター化すること自体は簡単なのですが、ウェブブラウザの操作によって、国土数値情報ダウンロードサービスサイトから全国分のデータファイルをひとつひとつダウンロードするのは面倒で退屈、かつ、非生産的な作業であり、これに人員が拘束される時間はできるだけ短くしたいところです。
幸いなことに「国土数値情報 Web API(試行版)」が試行運用中です (2017-06-10現在) 。それを使えば、国土数値情報の任意のデータセットについてデータ (zipファイル) のダウンロードURLを取得することができ、データダウンロードも自動化できます。
以下、同APIを使って平成21年度 (2009年度) の「土地利用細分メッシュ」データ(XML形式、Shapefile形式のデータを圧縮・アーカイブした zip ファイル)のURLを取得し、全国分のデータ (1次メッシュ175区画=175ファイル) のダウンロードからラスターへの変換までの処理を自動化するワークスペース例を掲げます。
国土数値情報 Web API(試行版)の仕様、利用規約については、国土数値情報ダウンロードサービスサイトの Web API 関連ページを参照してください。
FME 2017.0.1.1 build 17291
FMEワークスペース例
Step 1: 土地利用細分メッシュデータ (zip) ダウンロード
HTTPCaller: 国土数値情報 Web API によって、平成21年度 (2009年度) の土地利用細分メッシュデータ (zipファイル) のダウンロードURL情報を記述したXML文書を取得します。リクエスト先のURLやAPIのパラメーター、レスポンス (XML) のスキーマについては、「国土数値情報 Web API(試行版)」で公開されているAPI仕様を参照してください。
HTTPCaller の主要なパラメーター
Request:
Request URL: http://nlftp.mlit.go.jp/ksj/api/1.0b/index.php/app/getKSJURL.xml
HTTP Method: GET
Query String Parameters:
Response:
Save Response Body To: Attribute
Response Body Attribute: _response_body
Response Body Encoding: auto-detect
Request URL: http://nlftp.mlit.go.jp/ksj/api/1.0b/index.php/app/getKSJURL.xml
HTTP Method: GET
Query String Parameters:
|
Save Response Body To: Attribute
Response Body Attribute: _response_body
Response Body Encoding: auto-detect
レスポンスとして得られたXML文書には、次のように zipFileUrl 要素の内容 (テキスト) としてデータ (zipファイル) のダウンロードURLが記述されています。
国土数値情報 Web API (URL情報取得) レスポンスの一部 (XML文書 item 要素)
(略)
<item>
<identifier>L03-b</identifier>
<title>土地利用細分メッシュ</title>
<field>国土(水・土地)</field>
<year>2009</year>
<areaType>4</areaType>
<areaCode>3036</areaCode>
<datum>1</datum>
<zipFileUrl>http://nlftp.mlit.go.jp/ksj/gml/data/L03-b/L03-b-09/L03-b-09_3036-jgd_GML.zip </zipFileUrl>
<zipFileSize>0.53MB</zipFileSize>
</item>
<item>
<identifier>L03-b</identifier>
<title>土地利用細分メッシュ</title>
<field>国土(水・土地)</field>
<year>2009</year>
<areaType>4</areaType>
<areaCode>3036</areaCode>
<datum>2</datum>
<zipFileUrl>http://nlftp.mlit.go.jp/ksj/gml/data/L03-b/L03-b-09/L03-b-09_3036-tky_GML.zip </zipFileUrl>
<zipFileSize>0.53MB</zipFileSize>
</item>
(略)
<item>
<identifier>L03-b</identifier>
<title>土地利用細分メッシュ</title>
<field>国土(水・土地)</field>
<year>2009</year>
<areaType>4</areaType>
<areaCode>3036</areaCode>
<datum>1</datum>
<zipFileUrl>http://nlftp.mlit.go.jp/ksj/gml/data/L03-b/L03-b-09/L03-b-09_3036-jgd_GML.zip </zipFileUrl>
<zipFileSize>0.53MB</zipFileSize>
</item>
<item>
<identifier>L03-b</identifier>
<title>土地利用細分メッシュ</title>
<field>国土(水・土地)</field>
<year>2009</year>
<areaType>4</areaType>
<areaCode>3036</areaCode>
<datum>2</datum>
<zipFileUrl>http://nlftp.mlit.go.jp/ksj/gml/data/L03-b/L03-b-09/L03-b-09_3036-tky_GML.zip </zipFileUrl>
<zipFileSize>0.53MB</zipFileSize>
</item>
(略)
XMLXQueryExtractor: 次のパラメーター設定によって、ダウンロードURLのうち "*jgd_GML.zip" (JGD2000のデータ) のみを抽出して zipFilUrl{} リストに格納しました。
XMLXQueryExtractor の主要なパラメーター
XQuery Type:
XQuery Input: XQuery expression
XQuery Expression:
for $x in //item/zipFileUrl[matches(text(), 'jgd_GML\.zip$')]
return $x/text()
XML Source:
XML Input: Attribute specifying XML
XML Attribute: _response_body
Remove Source XML Attribute?: No
Results:
Write XML Header?: No
Return Value: List attribute
List Result Attribute: zipFileUrl
XQuery Input: XQuery expression
XQuery Expression:
for $x in //item/zipFileUrl[matches(text(), 'jgd_GML\.zip$')]
return $x/text()
XML Source:
XML Input: Attribute specifying XML
XML Attribute: _response_body
Remove Source XML Attribute?: No
Results:
Write XML Header?: No
Return Value: List attribute
List Result Attribute: zipFileUrl
ListExploder: zipFilUrl{} リストを展開し、個々のダウンロードURL文字列 (zipFileUrl 属性) ごとのフィーチャーを作成します。
TempPathnameCreator: ダウンロードしたデータの保存先ファイルパス (拡張子 .zip) を作成し、_pathname 属性に格納します。このトランスフォーマーが作成するファイルパスは、FMEが変換実行時に使用する作業用フォルダ内のユニークな場所を指し、ワークスペース内でそのパスに保存したファイルは、変換終了後に自動的に削除されます。Windows の場合、FMEの作業用フォルダは、デフォルトでは "<Windows ユーザー>/AppData/Local/Temp" ですが、環境変数 FME_TEMP によって他の場所を設定することもできます。
HTTPCaller_2: zipFileUrl に HTTPリクエスト (Get メソッド) を発行し、レスポンス (zipファイル) を TempPathnameCreator で作成したファイルパスに保存します。
HTTPCaller_2 の主要なパラメーター
Request:
Request URL: @Value(zipFileUrl)
HTTP Method: GET
Response:
Save Response Body To: File
Save Response Body To File:
Create a New File Per Feature: No
Output Filename: @Value(_pathname)
File Path Attribute: _pathname
Request URL: @Value(zipFileUrl)
HTTP Method: GET
Response:
Save Response Body To: File
Save Response Body To File:
Create a New File Per Feature: No
Output Filename: @Value(_pathname)
File Path Attribute: _pathname
Step 2: 土地利用細分メッシュデータ XML から GeoTIFF への変換
Step 2 は、基本的には「2017-04-07記事」のワークスペースと同じです。以下、異なる点のみ説明します。
FeatureReader: Step 1 の HTTPCaller_2 が出力するフィーチャーは、ダウンロードしたzipファイルパスを _pathname 属性として持っています。FeatureReader (Format: XML) で HTTPCaller_2 が出力したフィーチャーを受け取り、データセット名として、_pathname 属性の値とXMLファイル名のパターンで構成されるファイルパス文字列 @Value(_pathname)/L03-b-*.xml を指定することにより、実行時にzipファイルが自動的に展開され、ファイル名のパターンが一致するXMLデータが読み込まれます。リーダーパラメーターの設定は「2017-04-07記事」のXMLリーダーと同じです。
AttributeFileReader: XMLデータに記述されている各土地利用種別コードとラスター画素値の対応は、次のようなJSON文書によって定義し、AttributeFileReader によって読み込んで _codeMap 属性に格納しました。各土地利用種別コード ("0100", "0200", "0500", ...) に対応する画素値 (10, 20, 50, ...) は、国土数値情報「土地利用細分メッシュ(ラスタ版)」(平成26年度)の画素値の定義と一致させました。
土地利用種別コードと画素値の対応定義 (JSON) 平成21年度, 平成26年度用
土地改良種別コード (メンバー名) とそれに対応する画素値 (値) のペアで構成されるJSONオブジェクト
{
"0100": 10,
"0200": 20,
"0500": 50,
"0600": 60,
"0700": 70,
"0901": 91,
"0902": 92,
"1000": 100,
"1100": 110,
"1400": 140,
"1500": 150,
"1600": 160,
"0000": 0
}
"0100": 10,
"0200": 20,
"0500": 50,
"0600": 60,
"0700": 70,
"0901": 91,
"0902": 92,
"1000": 100,
"1100": 110,
"1400": 140,
"1500": 150,
"1600": 160,
"0000": 0
}
PythonCaller:「2017-04-07記事」のワークスペース例の PythonCaller に設定したスクリプトのうち、KsjLanduseSubdivisionMeshRasterizer クラスの input メソッド定義の一部を次のように変更し、上記JSON文書 (_codeMap 属性値) を Python の辞書インスタンスに変換して使用しました。
def input(self, feature):
# 土地利用種別コードから画素値への変換用辞書
import json
codeToValue = json.loads(feature.getAttribute('_codeMap'))
(以下略)
AttributeFileReader_2: パレット (画素値に対応するRGBカラー) の定義は、国土数値情報「土地利用細分メッシュ(ラスタ版)」(平成26年度)のパレットと一致させました。
パレット定義 (テキスト) 平成21年度, 平成26年度用
RGB24
0 255,255,255
10 255,255,0
20 255,204,153
50 0,170,0
60 255,153,0
70 255,0,0
91 140,140,140
92 180,180,180
100 200,70,15
110 0,0,255
140 255,255,153
150 0,204,255
160 0,255,0
0 255,255,255
10 255,255,0
20 255,204,153
50 0,170,0
60 255,153,0
70 255,0,0
91 140,140,140
92 180,180,180
100 200,70,15
110 0,0,255
140 255,255,153
150 0,204,255
160 0,255,0
FeatureWriter: 作成した全てのラスター (1次メッシュ175区画分) を、出力先データセットとして指定したフォルダ内に GeoTIFF 形式のファイル (ファイル名: "L03-b-09_<1次メッシュコード>.tif") で出力します。座標系 (JGD2000緯度経度) も、ここで設定しました。
変換結果: 土地利用細分メッシュ (平成21年度) 1次メッシュ5339, 5340区画
この画像は、上記ワークスペースによって作成したラスターデータセット: 1次メッシュ175区画=175GeoTIFFファイルのうち2区画分をモザイクし、PNG形式に変換したものです。解像度 (横: 800x2区画=1600px, 縦: 800px) 、各画素値、パレットの定義は、元のGeoTIFFファイルの内容と同じです。1/10分割メッシュ区画 (東西4.5秒 x 南北3秒) が1画素 (正方形) に相当するので、地物が南北方向に引き延ばされたように見えます。
上記ワークスペース例では、FeatureWriter の出力先データセットとして指定したフォルダ内に、変換後の全ての GeoTIFF ファイルが出力されます。仮に、平成26年度のデータと同じ要領でそれらのGeoTIFFファイルをウェブサイトで提供することにするならば、1次メッシュ区画ごとに、GeoTIFFファイルと土地利用種別コード一覧表 (HTMLドキュメント) をzip形式で圧縮・アーカイブする必要があります。
当初、Step 2 までで作成されたGeoTIFFファイルを圧縮・アーカイブするプロセスを Step 3 としてワークスペース例に加えることも検討しましたが、ケーススタディの記事としてボリュームが大きくなりすぎることから取りやめました。
また、ダウンロード -> 変換の過程で不測のエラーが生じる可能性はゼロではないので、実務上も、GeoTIFFファイルの作成までで工程を区切り、全ファイルが正常に作成されたことを確認してから圧縮・アーカイブ工程に移ることにした方が良いと思われます。
多数のファイルの圧縮・アーカイブを自動化することも、FMEの効果的な利用例として面白いテーマです。それについては、「既存ファイルのZip圧縮・アーカイブ (2017-06-13)」をご参照ください。
0 件のコメント:
コメントを投稿