Konversi Multipolygon Geojson ke beberapa poligon geojson?


9

Saya melihat banyak pertanyaan dari Polygonske MultiPolygon, tetapi apakah ada beberapa cara mudah untuk pergi sebaliknya? Ini juga akan berguna untuk menjaga atribut dari yang MultiPolygonberlaku untuk yang baru Polygons.


1
Dalam konteks apa? Nodejs, openlayers, database, dll.
John Powell

Saya punya Postgis dan nodejs tersedia untuk proyek ini
Ouwen Huang

Apakah Anda ingin menyimpan properti dari multipolygon di poligon baru?
John Powell

Apa maksudmu? Suka jenis proyeksi?
Ouwen Huang

Tidak, itu berlaku untuk seluruh koleksi fitur GeoJSON. Tetapi setiap geometri individu memiliki set properti sendiri. Lihat, geojson.org/geojson-spec.html#examples
John Powell

Jawaban:


12

Jika Anda memiliki Multipolygon sederhana seperti di bawah ini,

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]
        ]
     ]
  ]
}

kemudian menggunakan Javascript / Nodejs Anda dapat mengakses setiap Polygon konstituen menggunakan forEach, dan menulis Polygon baru menggunakan JSON.stringify

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

Anda juga dapat mengaksesnya langsung dalam satu lingkaran, jika Anda lebih suka cara yang kurang fungsional, diindeks pada mp.coordinates.length misalnya,

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

Jika Anda berurusan dengan FeatureCollection, di mana Anda mungkin memiliki berbagai fitur, masing-masing berisi MultiPolygon, misalnya,

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"
     }
    }
  ]
}

Kemudian, Anda dapat menggunakan forEach untuk mendapatkan setiap fitur, dan kemudian mengakses setiap Polygon dalam setiap Multipolygon hanya dengan mengulang melalui array, sebagai dimensi pertama dari array koordinat, adalah indeks ke setiap Polygon. Catatan, Anda juga dapat menyimpan properti, dan menetapkannya ke setiap fitur Polygon baru.

 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));
      }
    }
 });

Jika Anda menginginkan sesuatu yang lebih canggih, Anda dapat melihat memodifikasi kelas OpenLayers.Format.GeoJSON .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.