マルチポリゴンGeojsonを複数のgeojsonポリゴンに変換しますか?


9

からPolygonsに行く質問がたくさんありますMultiPolygonが、逆に簡単な方法はありますか?MultiPolygon新しいに適用するためにの属性を保持することも役立ちますPolygons


1
どのような状況で?Nodejs、openlayers、データベースなど
John Powell

このプロジェクトで使用できるPostgisとnodejsがあります
Ouwen Huang

マルチポリゴンのプロパティを新しいポリゴンに保持しますか?
John Powell

どういう意味ですか?投影タイプは好きですか?
Ouwen Huang 2014

いいえ、それはGeoJSONフィーチャーコレクション全体に適用されます。ただし、個々のジオメトリには独自のプロパティセットがあります。geojson.org/geojson-spec.html#examplesを
John Powell

回答:


12

以下のような単純なマルチポリゴンがある場合、

mp=
  {
  "type": "MultiPolygon",
  "coordinates": [
    [
        [
            [-99.028, 46.985], [-99.028, 50.979],
            [-82.062, 50.979], [-82.062, 47.002],
            [-99.028, 46.985]
        ]
    ],
    [
        [
            [-109.028, 36.985], [-109.028, 40.979],
            [-102.062, 40.979], [-102.062, 37.002],
            [-109.028, 36.985]
        ]
     ]
  ]
}

次に、JavaScript / Nodejsを使用して、forEachを使用して各構成要素のポリゴンにアクセスし、JSON.stringifyを使用して新しいポリゴンを書き出すことができます

mp.coordinates.forEach(function(coords){
   var feat={'type':'Polygon','coordinates':coords};
   console.log(JSON.stringify(feat));
   }
);

mp.coordinates.lengthでインデックス化された、機能の少ない方法を希望する場合は、ループで直接これらにアクセスすることもできます

for (var i=0;i<mp.coordinates.length;i++){   
   var feat={'type':'Polygon','coordinates':mp.coordinates[i]};
   console.log(JSON.stringify(feat));
}

FeatureCollectionを処理している場合、機能の配列があり、それぞれにMultiPolygonが含まれている場合があります。たとえば、

mp = {
  "type": "FeatureCollection",
  "features": [
     {
      "type": "Feature",
       "geometry": {
         "type": "MultiPolygon",
           "coordinates": [
             [[
              [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0],
              [100.0, 0.0]
            ]],
            [[
             [0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [0.0, 1.0],
             [0.0, 0.0]
           ]]          
         ]
     },
      "properties": {
      "prop1": {
        "this": "that"
      },
      "prop0": "value0"
     }
    }
  ]
}

次に、forEachを使用して各機能にアクセスし、配列をループするだけで各Multipolygon内の各Polygonにアクセスできます。これは、座標配列の最初の次元が各Polygonのインデックスであるためです。プロパティを保存して、新しい各ポリゴンフィーチャに割り当てることもできます。

 mp.features.forEach(function(feat){
   var geom=feat.geometry; 
   var props=feat.properties;
   if (geom.type === 'MultiPolygon'){
      for (var i=0; i < geom.coordinates.length; i++){
          var polygon = {
               'type':'Polygon', 
               'coordinates':geom.coordinates[i],
               'properties': props};
          console.log(JSON.stringify(polygon));
      }
    }
 });

より洗練されたものが必要な場合は、OpenLayers.Format.GeoJSONクラスの変更を検討できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.