2017-02-08 3 views
1

Есть ли способ найти центр для стран/континентов, которые состоят из более чем одного объекта полигона (например, США, Канада, у которых есть острова, кроме основной части суши) ? Я пытался использовать листовки Layer.getCenter() или даже Layer.getBounds().getCenter(), но эти методы, конечно же, не работают для этого типа стран и возвращают результаты «нет».Получить центр геойсона Континент/Страна/Штат с лифтом

Пример можно увидеть по следующей ссылке (детская площадка). Просто прокрутите и щелкните по США или Канаде и посмотрите, где появится circleMarker. Тогда попробуйте нажать на более мелкие объекты, как и некоторые острова на юге США, они должны поместить этот маркер точно по центру of'em:

http://playground-leaflet.rhcloud.com/voyi/1/edit?html,output

ответ

2

листовка может вычислить только центр ограничивающего параллелепипеда признака. С некоторой помощью от других библиотек (например, Turf.js) вы можете рассчитать centroid многоугольника или (многополя).

В любом случае вы получаете смущен, потому что иногда центроид не находится в пределах многоугольника (или MultiPolygon):

http://postgis.net/docs/images/st_centroid03.png

(рис 1. Centroid многоугольника согласно PostGIS's ST_Centroid documentation)

Итак, я думаю, что вы действительно хотели спросить:

Учитывая многоугольник или многополигон, как я могу рассчитать центр (или цент er-like point), который, как гарантируется, находится внутри полигона и визуально смотрит в центр его, чтобы добавить символистов к этому пункту с помощью Leaflet?

И для этого, ответ "pole of inaccessibility" реализуемое polylabel: «самая дальняя внутренняя точка из многоугольник контура».

+0

Спасибо, это действительно правильный вопрос, который я хотел спросить, но мне не хватало знаний о центроидах. Большое спасибо, и я постараюсь получить хороший результат на основе информации, которую вы предоставили – Kamilius

+0

'polylabel' помогает с полигонами. А как насчет «мультиполигонов»? Как для страны США, у которой есть Южная часть Северной Америки и Аляски? Можно ли что-то сделать в этом случае? – Kamilius

+1

Рассчитайте площадь каждого из нескольких колец мультиполигона, затем примените 'polylabel' к самому большому. И/или отправьте запрос функции на https://github.com/mapbox/polylabel/issues – IvanSanchez

Смежные вопросы