2017-06-10

土地利用細分メッシュ (ラスター) データセットの作成

つい最近、国土数値情報ダウンロードサイトで「土地利用細分メッシュ(ラスタ版)」データ (平成26年度 GeoTIFF形式, JGD2000) が公開 (2017-06-02) されたことに気がつきました。

従来から提供されてきた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:
        
Name Value
appId ksjapibeta1
dataformat 1
identifier L03-b
fiscalyear 2009
Response:
    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>
(略)


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


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


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
}


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


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 件のコメント:

コメントを投稿