2017-05-31 25 views
0

私はGeoJSONファイルを持っています。GeoJSONにプロパティを追加

{ 
    "type": "FeatureCollection", 
    "crs": { 
    "type": "name", 
    "properties": { 
     "name": "urn:ogc:def:crs:OGC:1.3:CRS84" 
    } 
    }, 
    "features": [ 
    { 
     "type": "Feature", 
     "properties": { 
     "Item": "Value" 
     }, 
     "geometry": { 
     "type": "Polygon", 
     "coordinates": [ 
      [ 
      [ 
       9.449194065548566, 
       55.86046393906458, 
       -999 
      ], 
      [ 
       9.460203211292942, 
       55.8619238071893, 
       -999 
      ], 
      [ 
       9.440463307997378, 
       55.876740797773365, 
       -999 
      ] 
      ] 
     ] 
     } 
    }, 
    { 
     "type": "Feature", 
     "properties": { 
     "Item": "Value" 
     }, 
     "geometry": { 
     "type": "Polygon", 
     "coordinates": [ 
      [ 
      [ 
       8.59655725301728, 
       55.53506085541584, 
       -999 
      ], 
      [ 
       8.601439658322603, 
       55.52856219238175, 
       -999 
      ] 
      ] 
     ] 
     } 
    } 
    ] 
} 

このファイルを読み込んで、各機能にプロパティを追加し、新しいjsonファイルとして保存する必要があります。 C#でこれを行う最善の方法は何ですか?

私はこのようにファイルをロードできます。

using (StreamReader r = new StreamReader(Server.MapPath("~/test.json"))) 
     { 
      string json = r.ReadToEnd(); 
      List<RootObject> ro = JsonConvert.DeserializeObject<List<RootObject>>(json); 
     } 

しかし、何ですか?

+1

逆シリアル化するJSON追加のプロパティを持つモデルには、 、プロパティを設定し、ファイルにシリアライズします。 – Reniuz

+0

@brotherは、デシリアライズ前にプロパティを追加してプロパティを設定してからプロパティを設定し直してからもう一度シリアル化する必要があることを指摘しました –

+0

私はプロパティを追加する必要があるという理論を知っています。 – brother

答えて

0

GDAL/OGRのOGRライブラリ部分を使用してgeojsonファイルを読むことができます。 OGRは直接にGeoJSONフォーマットを読み込むことが可能です: http://gdal.org/1.11/ogr/drv_geojson.html

不幸C#GDAL/OGRのバインディングのためのドキュメントは非常に悪いです。

しかし、あなたは、このサンプルではOGRとにGeoJSON機能にアクセスする方法について見てすることができます

https://trac.osgeo.org/gdal/browser/trunk/gdal/swig/csharp/apps/OGRFeatureEdit.cs

あなたが使用することができます。

Ogr.RegisterAll(); // To register the OGR drivers especially geojson 
DataSource ds = Ogr.Open(<path to your geojson>, 1); 
Layer layer = ds.GetLayerByName("the name of the layer"); 

// Finally iterate over all features you want to modify 
Feature feature = layer.GetFeature(0); 
feature.SetField(<set your fields>); 

// write your feature back to your layer 
layer.SetFeature(feature) 
+0

Newtonsoft.Jsonおよび/またはGeoJSON.Netを使用できませんタスクの代わりに、または? – brother

+0

あなたは別のJSON Parser/reader/writerでもそれを行うことができますが、それはGDAL/OGRを使って何らかの地理データであるためです。特に、地理データの投影を後で変更する場合や、あなたはそれを回避しません;-) –

+0

私はGeodataを変更したくありません - 私は各フィーチャにプロパティを追加して、新しいフィーチャを各フィーチャに追加した正確なコピーとして再度保存したい – brother

関連する問題