Учитывая 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, основанных на координатах lon / lat). Функция, которая может вычислить этот центр (в 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) {
Получить первую выбранную функцию из массива «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.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;