OpenLayersで2つのポリゴンをマージする方法は?


11

2つのポリゴンがあります。

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

OpenLayersを使用して2つのポリゴンを1つにマージするにはどうすればよいですか?

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

便利なフィドルの例です。称賛:)
ロブクインシー

1

あなたの質問から私が理解しているのは、2つのポリゴンフィーチャをマージしたいということです。PostGIS Geometry Processing FunctionsにあるST_Union feautureを使用して、サーバー側でこれを行う必要があると思います。その後、結果を取得してアプリに追加できます。あなたが望むものなら、なんでも。マージするには...

postgisでは、次のような多数のポリゴンを結合できます。

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

まず最初に、ジオコレクションに対していくつかのopenlayersリクエストを作成する必要があります。

GeoDjangoでは、GeoDjango Topological Methodsを使用してこれを簡単に行うことができます。

polygon.union( secondpolygon )


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

これがあなたのお役に立てば幸いです...


0

すべてのポリゴンは1つのフィーチャと見なされます。ポリゴンをベクターレイヤーに追加すると、そのフィーチャはそこに保存されます。レイヤーオブジェクトから独立したフィーチャを取得できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.