如何在OpenLayers中合并两个多边形?


11

我有两个多边形。

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

如何使用OpenLayers将两个多边形合并为一个?

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


1
请解释您的问题,我不确定您的意思。
drnextgis 2012年

Answers:


14

要在客户端进行几何处理,可以使用JSTS拓扑套件。这是我解决问题的小示例:联合示例。源代码:

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)总是在这里学习新东西。JSTS看起来非常方便。
CaptDragon

好用的小提琴例子。荣誉:)
Rob Quincey

1

我从您的问题中了解到,您想合并两个面要素。我认为您必须使用PostGIS几何处理功能中的ST_Union功能在服务器端执行此操作。然后,您可以获得结果并将其添加到您的应用程序。无论你想要什么。合并...

在postgis中,您可以结合很多这样的多边形:

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

首先,您必须对地理集合进行一些openlayers请求。

在GeoDjango中,您可以使用GeoDjango拓扑方法轻松地做到这一点。

polygon.union( secondpolygon )


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

我希望这可以帮助你...


0

每个多边形都被视为一个要素。每当您将多边形添加到矢量层时,该要素就会存储在此处。您可以从图层对象获得独立的要素。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.