在OpenLayers 3中获取几何中心


12

Geometry在OpenLayers 3中有一个对象。如何获得中心?

旧版本的OpenLayers提供了一种getCentroid方法。也有getBounds解决方法。但是这些似乎已在OpenLayers 3中删除。

Answers:


16

一种解决方法,但是您可以getExtent在几何图形上使用方法在地图上设置范围。我假设视图的中心将成为几何的中心;

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

如果您不想更改视图(可以想象),则可以考虑一个用于计算范围中心的函数。在某些类型的坐标系(EPSG:3857,基于米)中,这将是容易的,而在其他坐标系中(基于lon / lat坐标,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ölster,2015年

是的,您是对的,那里有个小错误,改变了我的遮阳篷
Tim.Lucas

3
如此微不足道的东西应该随OL3一起提供。不可知论者+1getCenterOfExtent
乔尔

4
@Joel Hey,现在是。OL版本3.9.0具有ol.extent.getCenter其稳定性。例如,我确实var aa = e.selected[0].getGeometry().getExtent(); var oo = ol.extent.getCenter(aa);给了我点,线和面的中心。在这里查看
slevin 2015年

这实际上是相当不错的:)
Joel

15

您可以使用以下方式获取其范围中心 ol.extent.getCenter。就我而言,我有一个矢量层,我想在单击某个要素后获得其中心。

所以

创建一个简单的点击互动并将其添加到地图

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

每次点击...

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

从“ selected”数组中获取选择的第一个功能。然后获取其几何形状,然后获取其范围。

使用该范围找到其中心,使用 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.9.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
德克

getCenter()方法仅适用于圆形几何体ol.geom.Circle。您是否有可能使用其他类型的几何图形?
Bwyss

是的,我用LineString尝试过,很高兴知道这仅适用于圆。但是,对于LineString,可以使用@slevin答案中的代码,该代码将返回“在行中间”的点。
德克

1

OpenLayers v 6.1.1

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


这是范围的中心,而不是所要求的几何中心。
TomazicM

我认为这不会让您获得几何图形的质心,而不会让您获得线/多边形几何图形所占范围的中心。
KadirŞahbaz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.