Как объединить два полигона в 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

Ответы:

14

Для манипулирования геометрией на стороне клиента вы можете использовать JSTS Topology Suite . Вот мой маленький пример решения вашей проблемы: Союзный пример . Исходный код:

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
источник
4
(+1) Всегда узнавать что-то новое здесь. JSTS выглядит очень удобно.
CaptDragon
Хороший удобный пример скрипки. Престижность :)
Роб Квинси
1

Из вашего вопроса я понимаю, что вы хотите объединить две функции многоугольника. Я думаю, что вы должны сделать это на стороне сервера с ST_Union feauture, который находится в Функции обработки геометрии PostGIS. Затем вы можете получить результат и добавить его в свое приложение. все, что вам угодно. Объединить...

В 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

Каждый полигон рассматривается как одна особенность. когда вы добавляете полигон в векторный слой, эта функция сохраняется там. и вы можете получить независимые объекты от объекта слоя.

HCN
источник