与えられたGeometry
OpenLayersを3でオブジェクトどのようにして、その中心を取得しに行きますか?
OpenLayersの古いバージョンはgetCentroid
メソッドを提供していました。getBounds
回避策もありました。しかし、これらはOpenLayers 3では削除されているようです。
与えられたGeometry
OpenLayersを3でオブジェクトどのようにして、その中心を取得しに行きますか?
OpenLayersの古いバージョンはgetCentroid
メソッドを提供していました。getBounds
回避策もありました。しかし、これらはOpenLayers 3では削除されているようです。
回答:
少しの回避策ですが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];
}
お役に立てれば!
getCenterOfExtent
を使用して、範囲の中心を取得できます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.getCenter
OLバージョン3.9.0とバージョン3.10.1で使用される、安定しており、あなたはそれを見つけることができ、ここで
また、次のようにして中心を取得することもできます。
var center = e.feature.getGeometry().getCenter();
Uncaught TypeError: feature.getGeometry(...).getCenter is not a function
。
getCenter()
方法は、円形状にのみ適用できol.geom.Circle
ます。別のタイプのジオメトリがある可能性はありますか?
OpenLayers v 6.1.1
var center = e.feature.getGeometry().getExtent().getCenter()
var x = extent[0] + (extent[2] - extent[0]) / 2; var y = extent[1] + (extent[3] - extent[1]) / 2;