OpenLayers'ta iki Çokgen nasıl birleştirilir?


11

İki çokgenim var.

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

OpenLayers'ı kullanarak iki çokgeni nasıl birleştirebilirim?

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


1
Lütfen sorunuzu açıklayın, ne demek istediğinizden emin değilim.
drnextgis

Yanıtlar:


14

İstemci tarafında geometri manipülasyonu için JSTS Topology Suite'i kullanabilirsiniz . Sorununuzu çözmemin küçük örneği: Sendika örneği . Kaynak kodu:

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) Her zaman burada yeni bir şeyler öğrenir. JSTS çok kullanışlı görünüyor.
CaptDragon

Güzel kullanışlı keman örneği. Kudos :)
Rob Quincey

1

Sorunuzdan anladığım şey, iki çokgen özelliğini birleştirmek istediğinizdir. Bunu sunucu tarafında PostGIS Geometri İşleme İşlevleri olan ST_Union özelliğiyle yapmak zorunda olduğunu düşünüyorum. Ardından sonucu alabilir ve uygulamanıza ekleyebilirsiniz. ne istersen. Birleştirmek için...

Postgis'te bunun gibi çokgenleri birleştirebilirsiniz:

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

Öncelikle, coğrafi koleksiyonlarınız için bazı openlayers talepleri yapmanız gerekiyor.

Ve GeoDjango'da bunu GeoDjango Topolojik Yöntemleri ile kolayca yapabilirsiniz.

polygon.union( secondpolygon )


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

Umarım bu sana yardımcı olur...


0

Her çokgen bir özellik olarak kabul edilir. çokgeni vektör katmanına eklediğinizde, bu özellik orada saklanır. katman nesnesinden bağımsız özellikler elde edebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.