Bagaimana cara menggabungkan dua Poligon di OpenLayers?


11

Saya punya dua poligon.

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

Bagaimana saya bisa menggabungkan dua poligon menjadi satu menggunakan OpenLayers?

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


1
Tolong jelaskan pertanyaan Anda, saya tidak yakin apa maksud Anda.
drnextgis

Jawaban:


14

Untuk manipulasi geometri di sisi klien Anda dapat menggunakan JSTS Topology Suite . Ini adalah contoh kecil saya untuk menyelesaikan masalah Anda: Contoh Union . Kode sumber:

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) Selalu belajar sesuatu yang baru di sini. JSTS terlihat sangat berguna.
CaptDragon

Contoh biola berguna yang bagus. Kudos :)
Rob Quincey

1

Yang saya mengerti dari pertanyaan Anda adalah bahwa Anda ingin menggabungkan dua fitur poligon. Saya pikir Anda harus melakukan ini di sisi server dengan ST_Union feauture yang ada di PostGIS Geometry Processing Functions. Kemudian Anda bisa mendapatkan hasilnya dan menambahkan ini ke aplikasi Anda. Apapun yang kamu mau. Menggabungkan...

Dalam postgis Anda dapat menggabungkan banyak poligon seperti ini:

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

Pertama-tama Anda harus membuat beberapa permintaan openlayers untuk koleksi geo Anda.

Dan di GeoDjango Anda dapat melakukan ini dengan mudah dengan Metode Topologi GeoDjango ..

polygon.union( secondpolygon )


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

Saya harap ini membantu Anda ...


0

Setiap poligon dianggap sebagai satu fitur. kapan pun Anda menambahkan poligon ke lapisan vektor, fitur itu disimpan di sana. dan Anda bisa mendapatkan fitur independen dari objek layer.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.