Come unire due poligoni in OpenLayer?


11

Ho due poligoni.

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

Come posso unire i due poligoni in uno usando OpenLayers?

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


1
Per favore, spiega la tua domanda, non sono sicuro di cosa intendi.
drnextgis,

Risposte:


14

Per la manipolazione della geometria sul lato client è possibile utilizzare JSTS Topology Suite . Ecco il mio piccolo esempio di risoluzione del tuo problema: esempio dell'Unione . Codice sorgente:

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) Impara sempre qualcosa di nuovo qui. JSTS sembra molto utile.
CaptDragon,

Bel esempio di violino a portata di mano. Complimenti :)
Rob Quincey

1

Quello che ho capito dalla tua domanda è che vuoi unire due funzioni poligonali. Penso che tu debba farlo sul lato server con la caratteristica ST_Union che si trova nelle funzioni di elaborazione della geometria di PostGIS. Quindi puoi ottenere il risultato e aggiungerlo all'app. tutto quello che vuoi. Unire...

In Postgis puoi unire molti poligoni in questo modo:

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

Prima di tutto devi fare alcune richieste di openlayer per le tue raccolte geografiche.

E in GeoDjango puoi farlo facilmente con i metodi topologici GeoDjango.

polygon.union( secondpolygon )


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

Spero che questo ti aiuta...


0

Ogni poligono è considerato come una caratteristica. ogni volta che aggiungi il poligono al livello vettoriale, quella funzione è memorizzata laggiù. e puoi ottenere funzionalità indipendenti dall'oggetto layer.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.