Comment fusionner deux polygones dans OpenLayers?


11

J'ai deux polygones.

polygon1 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon([linearRing1]))
polygon2 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon([linearRing2]))

Comment puis-je fusionner les deux polygones en un seul à l'aide d'OpenLayers?

http://i.stack.imgur.com/SrqYF.png


1
Veuillez expliquer votre question, je ne sais pas ce que vous voulez dire.
drnextgis

Réponses:


14

Pour la manipulation de la géométrie côté client, vous pouvez utiliser JSTS Topology Suite . Voici mon petit exemple de résolution de votre problème: l' exemple de l'Union . Code source:

var reader = new jsts.io.WKTReader();  

var a = reader.read('POLYGON((10 10, 100 10, 100 100, 10 100, 10 10))');
var b = reader.read('POLYGON((50 50, 200 50, 200 200, 50 200, 50 50))');

var union = a.union(b);

var parser = new jsts.io.OpenLayersParser();

union = parser.write(union);

var map = new OpenLayers.Map('map', {
  maxExtent: new OpenLayers.Bounds(0, 0, 300, 300),
  maxResolution: 100,
  units: 'm',
 controls: [new OpenLayers.Control.MousePosition(), new OpenLayers.Control.Navigation()]
});

var layer = new OpenLayers.Layer.Vector('test', {isBaseLayer: true});
map.addLayer(layer);

var unionOutput = new OpenLayers.Feature.Vector(union, null, { fillColor: 'green', fillOpacity: 1});

layer.addFeatures([unionOutput ]);
map.zoomToMaxExtent();

4
(+1) Toujours apprendre quelque chose de nouveau ici. JSTS a l'air très pratique.
CaptDragon

Bel exemple de violon pratique. Félicitations :)
Rob Quincey

1

Ce que je comprends de votre question, c'est que vous voulez fusionner deux entités surfaciques. Je pense que vous devez le faire côté serveur avec ST_Union feauture qui se trouve dans PostGIS Geometry Processing Functions. Ensuite, vous pouvez obtenir le résultat et l'ajouter à votre application. tout ce que vous voulez. Fusionner...

Dans postgis, vous pouvez réunir de nombreux polygones comme ceci:

SELECT ST_AsText(ST_Union(ST_GeomFromText('POINT(1 2)'),
    ST_GeomFromText('POINT(1 2)') ) );

Tout d'abord, vous devez faire une demande de couches ouvertes pour vos collections géographiques.

Et dans GeoDjango, vous pouvez le faire facilement avec les méthodes topologiques GeoDjango.

polygon.union( secondpolygon )


GEOSGeometry.union(other)
Returns a GEOSGeometry representing all the points in this geometry and the other.

J'espère que ceci vous aide...


0

Chaque polygone est considéré comme une entité. chaque fois que vous ajoutez le polygone à la couche vectorielle, cette entité est stockée là-bas. et vous pouvez obtenir des fonctions indépendantes de l'objet de calque.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.