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


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

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...


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.