Wie füge ich zwei Polygone in OpenLayers zusammen?

11

Ich habe zwei Polygone.

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

Wie kann ich die beiden Polygone mit OpenLayers zu einem zusammenführen?

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

Michelle Chan
quelle
1
Bitte erläutern Sie Ihre Frage, ich bin mir nicht sicher, was Sie meinen.
Drnextgis

Antworten:

14

Für die Manipulation der Geometrie auf der Clientseite können Sie die JSTS Topology Suite verwenden . Hier ist mein kleines Beispiel für die Lösung Ihres Problems: Beispiel für eine Union . Quellcode:

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
quelle
4
(+1) Hier immer etwas Neues lernen. JSTS sieht sehr praktisch aus.
CaptDragon
Schönes handliches Geigenbeispiel. Kudos :)
Rob Quincey
1

Was ich aus Ihrer Frage verstehe, ist, dass Sie zwei Polygon-Features zusammenführen möchten. Ich denke, Sie müssen dies auf der Serverseite mit ST_Union tun, das sich in den PostGIS-Geometrieverarbeitungsfunktionen befindet. Dann können Sie das Ergebnis erhalten und es Ihrer App hinzufügen. irgendwas du willst. Zusammenführen ...

In Postgis können Sie viele Polygone wie folgt vereinen:

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

Zunächst müssen Sie einige Openlayers für Ihre Geosammlungen anfordern.

Und in GeoDjango können Sie dies einfach mit geologischen Topologiemethoden von GeoDjango tun.

polygon.union( secondpolygon )


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

Ich hoffe das hilft dir...

Aragon
quelle
0

Jedes Polygon wird als ein Merkmal betrachtet. Wenn Sie das Polygon zur Vektorebene hinzufügen, wird dieses Feature dort gespeichert. und Sie können unabhängige Features vom Ebenenobjekt erhalten.

hcn
quelle