2016-03-10

ベクタージオメトリの色 - 国土地理院「地形分類」

ベクタージオメトリ (点、線、面) 用のデータフォーマットには、図形を表示したり印刷したりするときの色に関する情報をデータの内容として記録する仕組みを持たないものがありますが、そのようなフォーマットで提供されているデータでも、凡例などによって、色などのジオメトリの表示スタイルが示されている場合があります。

国土地理院ベクトルタイル提供実験の一環として、昨日 (2016-03-09) 公開が始められた「地形分類」ポリゴンデータもそのひとつです。地形分類ベクタータイルデータ (GeoJSON 形式) の内容に色の定義は含まれていませんが、国土地理院ウェブサイトの次のページで地形分類別の「配色」が示されており、地理院地図ではこの配色で表示されます。
地理院ホーム  > ...  > 身の回りの土地の成り立ちと自然災害リスクがワンクリックで分かります

このように、データ提供者が色などのジオメトリの表示スタイルを示している場合、そのデータを利用する際には、可能な限りそれを踏襲するのが妥当であると考えます。

たまたまですが、「地理院タイルデータの取得 - 西之島付近噴火活動 正射画像の例」で紹介したカスタムトランスフォーマー JpGsiTileFetcher について、国土地理院ベクトルタイル提供実験で提供されているベクタータイルデータを取得する機能を追加しました (2016-03-08)。

ここでは、JpGsiTileFetcher (2016-03-08 更新版) によるベクタータイルデータ取得のデモを兼ねて、「地形分類」ポリゴンフィーチャーに凡例で示されている色を設定するワークスペース例を掲げます。

FME 2016.0.1.1 build 16177


地形分類 (図式コード) と色の対応表 (CSV テーブル) の準備

前述のように、国土地理院ベクトルタイル提供実験で提供されている地形分類データ (GeoJSON 形式) そのものには色の情報が含まれていないので、色を定義するためのデータを用意する必要があります。

地理院地図で地形分類データを表示するためのスタイル定義ファイル (JavaScript):
http://cyberjapandata.gsi.go.jp/xyz/experimental_landformclassification/style.js
も公開されており、このファイルによってポリゴンが属性として持っている地形分類コード (code = 図式コード) と色の対応が定義されているので、それに基づいて、あらかじめ次のような CSV テーブルを作成しました。
----------
図式コード,色
10102,#ff9933
11201,#00cc00
10203,#cccc33
10324,#ffff00
... 以下略 (全38分類)
----------


FMEワークスペース例

















1. 国土地理院ベクトルタイル提供実験「地形分類」ポリゴンデータの取得 (上のブックマーク)
Creator: フィーチャーを1個作成して出力する。
2DBoxReplacer: データを取得する範囲を表す矩形ポリゴンを作成する。
CoordinateSystemSetter: 矩形ポリゴンに座標系 (WGS 84 緯度経度) を設定する。
JpGsiTileFetcher: 矩形ポリゴンをカバーする範囲の「地形分類」データを取得する。

2. 図式コードと色の対応表 (CSV) の読込と変換 (下のブックマーク)
 [CSV] リーダー: 地形分類を示す図式コードと色の対応表を読み込む。
AttributeCreator: 「色」属性値 (HTML用のカラーコード: #******) に基づいて色に関する属性を作成する。

3. 属性結合
FeatureMerger: 地形分類を示すコードをキーとして、色に関する属性をポリゴンに結合する。

JpGsiTileFetcher (2016-03-08 更新版) は、国土地理院ベクトルタイル提供実験で提供されているベクタータイルデータを取得し、ベクタージオメトリと属性を持つフィーチャーに変換したうえで Vector ポートから出力します。

デフォルトでは Workbench インターフェース上に属性名は公開されませんが、必要に応じて Attributes to Expose (Vector) パラメーター、または AttributeExposer トランスフォーマーによって属性名を公開することができます。「地形分類」ポリゴンは地形分類を示す code 属性を持っており、この例ではそれを FeatureMerger による属性結合のキーとする必要があるため、Attributes to Expose (Vector) パラメーターによって公開しました。


FME ワークスペースでは、一般に次のフォーマット属性 (FME ジェネリック属性) によって、フィーチャー (ベクタージオメトリ) の色を設定することができます。
----------
fme_color: 点、線 (面の境界線を含む) の色 (ペンカラー)
fme_fill_color: 面の内部領域の色 (フィルカラー, 塗りつぶしの色)
----------

また、次のフォーマット属性によって不透過率を設定することもできます。ただし、ベクタージオメトリの透過度の定義を標準でサポートするデータフォーマットはごく少数です (KML だけかも知れません)。
----------
fme_pen_opacity: 点、線 (面の境界線を含む) の不透過率 (0: 透明 ~ 1: 不透過)
fme_fill_opacity: 面の内部領域の不透過率 (同上)
----------

fme_color および fme_fill_color の値は、ディスプレイの表示などで一般的に使われている光の三原色 - R: 赤、G: 緑、B: 青それぞれの強度 (0 ~ 1 の範囲で正規化した値) をカンマ区切りで列挙した文字列 "r,g,b" です。例えば黒は "0,0,0"、赤は "1,0,0"、白は "1,1,1" と表現されます。

しかし、CSV テーブルから読み込まれる「色」の値はHTML用の形式、すなわち、R, G, B 値の16進数表現各2桁 (10進数では 0 ~ 255) を連結し、先頭に # をつけた文字列 (例えば黒: #000000、赤: #ff0000、白: #ffffff) なので、これを "r,g,b" 形式に変換する必要があります。この例では、AttributeCreator によってその変換を行いました。

AttributreCreator パラメーター設定画面























まず、最初の3行で CSV テーブルから読み込まれた「色」の値 (#******) から R, G, B 2桁ずつを取り出し (@Substring 関数)、先頭に "0x" をつけて数式内で使用できる16進数表現に整えてから 255 で除して 0 ~ 1 の率に換算し、それぞれ _r, _g, _b 属性に格納しました。

次に、fme_color に、それらの値をカンマ区切りで連結した文字列を与え、fme_fill_color にも同じ値を設定しました。また、不透過率 (fme_pen_opaciry, fme_fill_opaciry) は、地理院地図のスタイル設定に準じて 0.5 としました。

この例のように、ひとつの AttributeCreator で複数の属性を作成した場合、ワークスペースの実行時には、パラメーター設定画面における行の順番 (上から下) で属性の作成、値の設定が行われます。また、新たに作成した属性の値を、同じ AttributeCreator 内のそれより下の行で参照することもできます (FME 2016 以降)。


KMLファイルへの出力

FeatureMerger で「地形分類」ポリゴンフィーチャーにこれらの属性を結合した後、色と透過度の定義をサポートするフォーマットのデータセットに出力すれば、それらを記録することができます。次の図は、地形分類コード (code) が同じ隣接ポリゴンを融合 (dissolve) してから、KML ファイルに出力する例です。














以前の記事で、KMLStyler トランスフォーマーによる KML 表示スタイルの設定に触れたことがありますが、フィーチャーが fme_color 等の表示スタイルに関するフォーマット属性 (FME ジェネリック属性) を持っている場合には、KMLStyler を使わなくても、OGCKML ライターがそれらの値に基づいて KML 用の表示スタイルを構成します。このメカニズムは、フィーチャーの表示スタイルの定義をサポートする他のフォーマットのライターについても同様です。

結果: 函館空港周辺の地形分類 (KML形式ベクターデータ) - Google Earth による表示例
国土地理院ベクトルタイル提供実験「地形分類」データ (ズームレベル14, 函館空港周辺12タイル) に基づいて作成。




















カラー画像 (ラスター) への変換

ベクタージオメトリに色に関する属性を与えた後、ImageRasterizer によってカラー画像 (ラスター) に変換することもできます。

PNG形式の画像に変換する例











結果: 函館空港周辺の地形分類 (PNG形式ラスターデータ)
国土地理院ベクトルタイル提供実験「地形分類」データ (ズームレベル14, 函館空港周辺12タイル) に基づき、上のワークスペースによって作成したPNGファイルをそのままここに添付しています。
・解像度: 1タイルあたり 256 x 256 ピクセル, 全体 1024 x 768 ピクセル
・不透過率: 0.5 (fme_fill_opacity の値を使用)
・アンチエイリアス: なし
解像度、不透過率、アンチエイリアスの有無などは、ImageRasterizer のパラメーターとしてコントロールできます。




















上記のワークスペース例では、データ提供者によって定義されたHTMLカラー値 #****** を FME が解釈できる色の表現 "r,g,b" に変換するために AttributeCreator を使いましたが、ワークスペース内で新たに色を定義するような場合には、FeatureColorSetter トランスフォーマーを使うこともできます。このトランスフォーマーでは、OS 標準の色選択ダイアログボックスによって実際の色を見て選択することにより、その色に対応する fme_color, fme_fill_color の値を設定することができます。

また、表示スタイルをサポートするいくつかのフォーマットについては、***Styler という名前のフォーマット専用の表示スタイル設定用のトランスフォーマーも用意されており、出力先データセットのフォーマットによっては、それらを使用することもできます。

0 件のコメント:

コメントを投稿