OpenLayers 3でジオメトリの中心を取得


12

与えられたGeometryOpenLayersを3でオブジェクトどのようにして、その中心を取得しに行きますか?

OpenLayersの古いバージョンはgetCentroidメソッドを提供していました。getBounds回避策もありました。しかし、これらはOpenLayers 3では削除されているようです。

回答:


16

少しの回避策ですがgetExtent、ジオメトリのメソッドを使用して、マップ上の範囲を設定できます。次に、ビューの中心がジオメトリの中心になると思います。

Test = new ol.geom.Geometry();
map.getView().fitExtent(Test.getExtent, map.getSize());
var CenterOfGeom = map.getView().getCenter()

(私が想像できるように)ビューを変更したくない場合は、範囲の中心を計算する関数を考えることができます。これは、特定のタイプの座標系(EPSG:3857、メーターベース)では簡単ですが、他の座標系(EPSG:4326、経度/緯度座標に基づく)では難しくなります。この中心を計算できる関数(EPSG:3857)は次のようになります。

function getCenterOfExtent(Extent){
var X = Extent[0] + (Extent[2]-Extent[0])/2;
var Y = Extent[1] + (Extent[3]-Extent[1])/2;
return [X, Y];
}

お役に立てれば!


1
私はそれがあるべきだと思います var x = extent[0] + (extent[2] - extent[0]) / 2; var y = extent[1] + (extent[3] - extent[1]) / 2;
GerritFölster2015

はい、あなたは正しい、小さな間違い、私の日除けを変更しました
Tim.Lucas

3
些細なことはOL3に同梱するだけです。不可知論者のための+1getCenterOfExtent
Joel

4
@ジョエルこんにちは、今です。OLバージョン3.9.0にはol.extent.getCenterとその安定版があります。たとえば、私はvar aa = e.selected[0].getGeometry().getExtent(); var oo = ol.extent.getCenter(aa);ポイント、ライン、ポリゴンの中心を指定しました。こちらで
slevin

それは実際にはかなり良いです:)
Joel

15

を使用して、範囲の中心を取得できますol.extent.getCenter。私の場合、ベクターレイヤーがあり、クリックした後にフィーチャの中心を取得したいと思います。

そう

単純なクリック操作を作成して地図に追加する

 var select = new ol.interaction.Select();
 map.addInteraction(select);

クリックごとに...

select.on('select', function(e) {

「選択された」配列から、選択された最初のフィーチャーを取得します。次に、そのジオメトリを取得し、次にその範囲を取得します。

その範囲を使用して、その中心を見つけます。 ol.extent.getCenter

    var aa = e.selected[0].getGeometry().getExtent();
    var oo = ol.extent.getCenter(aa);
    console.log("The center is :  "+oo); // voila!!!!

 });

同じコードがライン、ポイント、およびポリゴンで機能しました。

PS。ol.extent.getCenterOLバージョン3.9.0とバージョン3.10.1で使用される、安定しており、あなたはそれを見つけることができ、ここで


1
ラインの場合、これはラインジオメトリが占める範囲の中心を取得します。実際にライン上にあるポイントを取得するには、e.selected [0] .getGeometry()。getClosestPoint(oo)
jOshT

1

また、次のようにして中心を取得することもできます。

var center = e.feature.getGeometry().getCenter();

これはOpenLayers 3のどのバージョンで機能しますか?3.15.1では、Uncaught TypeError: feature.getGeometry(...).getCenter is not a function
Dirk

このgetCenter()方法は、円形状にのみ適用できol.geom.Circleます。別のタイプのジオメトリがある可能性はありますか?
Bwyss、2016年

はい、LineStringで試してみました。これは円でのみ機能することを知っておくと便利です。ただし、LineStringの場合は、@ slevinの回答のコードを使用して、「行の途中」のポイントを返すことができます。
Dirk

1

OpenLayers v 6.1.1

var center = e.feature.getGeometry().getExtent().getCenter()


これは範囲の中心であり、要求されたジオメトリの中心ではありません。
TomazicM

これでジオメトリの重心が得られるとは思いません。ライン/ポリゴンジオメトリが占める範囲の中心が得られます。
KadirŞahbaz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.