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

Michelle Chan
la source
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();
drnextgis
la source
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...

Aragon
la source
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.

hcn
la source