はじめに
NetTopologySuite(ver2.5.0)のをGeoJsonWriter使って生成したgeojsonがOpenlayersで読み込めない問題が発生しました。

geojsonに問題があるのか確認するため、QGISでも出力したgeojsonを読み込みましたが、こちらも表示されませんでした。
geojsonに問題があると考え、過去のgeojsonなどを比較してみました。すると以前には、crsプロパティが含ましたが、最新版ではこれが存在しないため表示されていなかったようです。
そこで、CRSについて仕様を確認したところ、以下のとおりでした。
以前の仕様 (RFC 7946以前)
- GeoJSONの初期仕様では、crsプロパティを使用して座標参照系 (Coordinate Reference System) を指定することができました。
- デフォルトでは、座標系はWGS 84 (EPSG:4326)で、経度・緯度の順序 (longitude, latitude) でした。
- ただし、crsプロパティを利用して他の座標参照系(例: EPSG:3857など)を指定することも可能でした。
RFC 7946 (2016年8月)
RFC 7946では以下の点が変更されました。
- crsプロパティの廃止:
- GeoJSONは常にWGS 84 (EPSG:4326)を使用し、経度・緯度の順序に固定されました。
- 他の座標参照系をサポートする必要がなくなったため、仕様から削除されました。
- 座標系の統一:
- GeoJSONデータの互換性を向上させるため、全てのGeoJSONデータはWGS 84 (EPSG:4326)であることを前提とする仕様になりました。
修正
上述のように、GeoJSONは常にWGS 84 (EPSG:4326)を使用し、経度・緯度の順序に固定されました。それにより、crsプロパティを利用して他の座標参照系を設定することがなくなりました。
そのため、最新版のNetTopologySuite(ver2.5.0)のをGeoJsonWriterでは、CRSが出力されないようです。
しかし、現状では、他の座標参照系を利用する必要があるため、geojsonにcrsプロパティを追加します。以下ソースです。
crsプロパティを追加
|
1 2 3 4 5 6 7 8 |
var geoJsonWriter = new GeoJsonWriter(); string geoJson = geoJsonWriter.Write(features); // GeoJSONの最新の仕様では、CRSオブジェクトはサポートされていないが、 // OpenLayersではCRSがないと動かないため、追加 var jsonObject = JObject.Parse(geoJson); var crs = new JObject { ["type"] = "name", ["properties"] = new JObject { ["name"] = "EPSG:" + layer.Epsg } }; jsonObject["crs"] = crs; |
修正後
修正後は正常にデータが表示されています。
