Suite

Convertir Multipolygon Geojson en plusieurs polygones geojson ?

Convertir Multipolygon Geojson en plusieurs polygones geojson ?


Je vois beaucoup de questions qui partent dePolygonesàMultipolygone, mais y a-t-il un moyen facile de faire l'inverse ? Il serait également utile de préserver les attributs de laMultipolygonepour postuler au nouveauPolygones.


Si vous avez un simple Multipolygone comme celui ci-dessous,

mp= { "type": "MultiPolygon", "coordonnées": [ [ [ [-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] ] ] ] }

Ensuite, en utilisant Javascript/Nodejs, vous pouvez accéder à chaque polygone constitutif à l'aide de forEach et écrire un nouveau polygone à l'aide de JSON.stringify

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

Vous pouvez également y accéder directement dans une boucle, si vous préférez un moyen moins fonctionnel, indexé sur mp.coordinates.length par exemple,

pour (var i=0;i

Si vous avez affaire à une FeatureCollection, où vous pourriez avoir un tableau de fonctionnalités, chacune contenant un MultiPolygon, par exemple,

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

Ensuite, vous pouvez utiliser forEach pour accéder à chaque entité, puis accéder à chaque polygone dans chaque multipolygone simplement en parcourant le tableau, car la première dimension du tableau de coordonnées est l'index dans chaque polygone. Notez que vous pouvez également enregistrer les propriétés et les affecter à chaque nouvelle entité Polygone.

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

Si vous voulez quelque chose de plus sophistiqué, vous pouvez envisager de modifier la classe OpenLayers.Format.GeoJSON.


L'index spatial RavenDB ne se construit pas

J'ai importé avec succès des géodonnées dans une classe que j'ai appelée AdministrativeArea, qui contient - entre autres - un champ WKT. Ce champ contient les points de coordonnées du polygone pour la longitude et la latitude. Je l'ai déclaré comme une chaîne. Je voudrais interroger les documents pour savoir lesquels de mes polygones/zones géographiques sont contenus dans un rectangle englobant donné. Pour ce faire, j'ai créé un index en utilisant la fonction spatiale. Quelque chose semble être "off" avec cet index ou la façon dont je le construis: soit le nombre d'index est bloqué sur 0 et rien ne se passe, soit il commence à se construire mais reste bloqué sur un nombre aléatoire, et j'obtiens une erreur un message. Quelqu'un peut-il aider?

Voici comment je recherche les zones :

. et un exemple JSON (il y a

Au fait : il y a des centaines, voire des milliers de points lat/lng dans chacune des 260.000 zones (j'ai coupé environ 90% des coordonnées dans l'exemple ci-dessus pour des raisons d'espace. ). Peut-être que mon approche n'est pas juste pour ce cas ?

Le comportement d'indexation de RavenDB est très étrange pour cela : il semble être « bloqué » sur la tâche d'indexation (le processeur est compris entre 20% et 40 $, et la consommation de RAM augmente régulièrement mais lentement), mais aucune nouvelle entrée d'index n'est créée, et aucun message d'erreur n'apparaît. Je l'exécute sur un ordinateur portable avec 16 Go de RAM et un i7 avec


Voir la vidéo: Scale Bar demo ArcGIS