Edited at

WKT形式をGeoJSON形式に変換する

More than 3 years have passed since last update.

デスクトップGISの世界で使われているファイルを、ウェブGISで使おうとする際に、ファイルフォーマットの変換が必要になる場合があります。

ここではWKTについてふれます。


WKT (Well-known text)とは

ジオメトリ・オブジェクトを地図上に表現するためのマークアップ言語。詳しくは以下を参照ください。

https://ja.wikipedia.org/wiki/Well-known_text


ライブラリの選定

ウェブGISで使うためにGeoJSONに変換します。

変換ライブラリには以下があります。

wellknown.jsはnodeモジュールとして配布されているので、今回はブラウザでのオン・ザ・フライ変換も視野に入れてTerraformerを採用します。


使い方

変換自体はとても簡単で、以下2ファイルを読み込み、

<script src="terraformer.min.js"></script>

<script src="terraformer-wkt-parser.min.js"></script>

var geoJSONSingle = Terraformer.WKT.parse( wktSingle );

で変換できます。

変換前の例

MULTIPOINT ((10 40), (40 30), (20 20), (30 10))

変換後の例

{"type":"MultiPoint","coordinates":[[10,40],[40,30],[20,20],[30,10]],"bbox":[10,10,40,40]}

GeoJSONオブジェクトとして生成したい場合には

//wktObj...変換前のWKTデータ、geoJSONObj...変換後のGeoJsonデータ

var _geoArray = new Array();

for (var i=0; i<wktObj.length; i++) {
var _o = new Object();

_o["type"] = "Feature";
_o["geometry"] = Terraformer.WKT.parse( wktObj[i] );
_o["properties"] = {"country_id": "some_id",
"count": "some_count"};
_geoArray[i] = _a;
};

var geoJSONObj = {
"type": "FeatureCollection"
};

geoJSONObj["features"] = _geoArray;

などとします。


注意

WKTやGeoJSONでは、扱うジオメトリ・オブジェクトの種類によってデータフォーマットが異なります。数値データを入れ子にしている括弧の数の違いに注目してください。


  • WKT

https://ja.wikipedia.org/wiki/Well-known_text#.E3.82.B8.E3.82.AA.E3.83.A1.E3.83.88.E3.83.AA.E3.82.AA.E3.83.96.E3.82.B8.E3.82.A7.E3.82.AF.E3.83.88


  • GeoJSON

http://geojson.org/geojson-spec.html#appendix-a-geometry-examples