Как я могу запросить функцию, ближайшую к результату геокодирования в Mapbox? - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь создать карту Mapbox с тысячами точек.Я хочу, чтобы пользователь мог вводить адрес, а div должен заполняться информацией от ближайшей точки к этому адресу.Я использую mapbox-gl-geocoder элемент управления

Что было бы идеально, если бы я мог использовать что-то вроде:

geocoder.on('result', function(e) {
  var features = map.queryRenderedFeatures(e.result.center)
});

Но queryRenderedFeatures не принимает латунные координаты, он требует области просмотракоординаты.

Следующее, что я попробовал, было

map.on('moveend', function () {

    var xwindow = window.innerWidth / 2;
    var ywindow = window.innerHeight / 2;
    var xywindow = {'x': xwindow, 'y': ywindow};

    var features = map.queryRenderedFeatures(xywindow);
});

Это дает результаты, которые находятся рядом с запрашиваемым адресом, но не ближайшей точкой.Например, если я геокодирую адрес, по которому я знаю, что точка существует, этот запрос вернет другую точку на расстоянии нескольких улиц.

Есть ли способ использовать queryRenderedFeatures для получения объекта в местоположении, котороевернул управление геокодом?

1 Ответ

0 голосов
/ 28 сентября 2018

Но queryRenderedFeatures не принимает латентные координаты, ему требуются координаты области просмотра.

Да, но вы можете использовать map.project , который возвращает точкупредставляющие пиксельные координаты относительно контейнера карты, которые соответствуют указанному географическому местоположению.

После того, как у вас есть все функции, вам нужно получить расстояние до каждой из них, чтобы найти ближайший. cheap-ruler будет хорошим выбором для этого.

Индекс, подобный geokdbush , вероятно, здесь не имеет смысла, поскольку вы запускаете его только один раз.

...