Отримайте центр геометрії у OpenLayers 3


12

З огляду на Geometryоб'єкт в OpenLayers 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, заснований на координатах 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];
}

Сподіваюся, це допомагає!


1
Я думаю, що це має бути var x = extent[0] + (extent[2] - extent[0]) / 2; var y = extent[1] + (extent[3] - extent[1]) / 2;
Герріт Фельстер,

Так, ти маєш рацію, невелика помилка там змінила мого тендера
Tim.Lucas

3
Щось настільки тривіальне слід просто поставляти з OL3. +1 для агностикаgetCenterOfExtent
Joel

4
@Joel Гей, тепер це так. OL версія 3.9.0 має ol.extent.getCenterі свою стабільність. Наприклад, я зробив var aa = e.selected[0].getGeometry().getExtent(); var oo = ol.extent.getCenter(aa);і подав мені центр точок, ліній та багатокутників. Ознайомтесь тут
slevin

Це насправді непогано :)
Джоель

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.getCenterСтабільна, використовується в OL версії 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.
Дірк

getCenter()Метод застосуємо тільки до кола геометрії ol.geom.Circle. Чи можливо, у вас інший тип геометрії?
Bwyss

Так, я спробував це з LineString, добре знати, що це працює лише з колами. Для LineStrings, однак, можна використовувати код у відповіді @ slevin, який поверне точку "посередині рядка".
Дірк

1

OpenLayers v 6.1.1

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


Це центр розміру, а не центр геометрії, як вимагається в питанні.
TomazicM

Я не думаю, що це спричинить за собою центроїд геометрії, він отримає вас в центрі міри, займаної геометрією лінії / багатокутника.
Кадір Şahbaz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.