Як об'єднати два полігони у 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();

4
(+1) Завжди тут щось нове. JSTS виглядає дуже зручно.
CaptDragon

Приємний зручний приклад. Kudos :)
Роб Квінсі

1

Що я розумію з вашого запитання, це те, що ви хочете об'єднати дві функції багатокутника. Я думаю, що ви повинні зробити це на серверній стороні за допомогою функції ST_Union, яка знаходиться в функціях обробки геометрії PostGIS. Тоді ви можете отримати результат і додати це у свій додаток. що хочеш. Злитися ...

У postgis ви можете об'єднати безліч полігонів, таких як:

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

Перш за все, ви повинні зробити запит на відкриття для своїх геоколекцій.

І в GeoDjango ви можете це легко зробити за допомогою топологічних методів GeoDjango.

polygon.union( secondpolygon )


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

Я сподіваюся, що це допоможе вам ...


0

Кожен багатокутник розглядається як одна особливість. коли-небудь ви додасте багатокутник у векторний шар, ця функція зберігається там. і ви можете отримати незалежні функції від об'єкта шару.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.