Como mesclar dois polígonos em OpenLayers?

11

Eu tenho dois polígonos.

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

Como mesclar os dois polígonos em um usando o OpenLayers?

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

Michelle Chan
fonte
1
Por favor, explique sua pergunta, não tenho certeza do que você quer dizer.
drnextgis

Respostas:

14

Para manipulação de geometria no lado do cliente, você pode usar o JSTS Topology Suite . Aqui está o meu pequeno exemplo de solução do seu problema: Exemplo da União . Código fonte:

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
fonte
4
(+1) Sempre aprendendo algo novo aqui. JSTS parece muito útil.
CaptDragon
Bom exemplo de violino à mão. Kudos :)
Rob Quincey
1

O que entendi da sua pergunta é que você deseja mesclar dois recursos de polígono. Eu acho que você precisa fazer isso no lado do servidor com o ST_Union, que está nas funções de processamento de geometria PostGIS. Em seguida, você pode obter o resultado e adicioná-lo ao seu aplicativo. o que você quiser. Fundir...

No postgis, você pode unir muitos polígonos como este:

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

Primeiro, você precisa fazer alguns pedidos de abertura de camada para suas coleções geográficas.

E no GeoDjango você pode fazer isso facilmente com os Métodos Topológicos do GeoDjango.

polygon.union( secondpolygon )


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

Espero que isso ajude você...

Aragão
fonte
0

Cada polígono é considerado como um recurso. sempre que você adicionar o polígono à camada vetorial, esse recurso será armazenado ali. e você pode obter recursos independentes do objeto de camada.

hcn
fonte