Листовка KNN, чтобы найти ближайшие маркеры - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь найти ближайшие маркеры на карте определенного местоположения с помощью Leaflet-knn

let nearest = leafletKnn(leafletGeoJson).nearest(L.latLng(38, -78), 5)

leafletGeoJson состоит всеположения маркеров, которые я установил на карте ранее.

nearest возвращает массив объектов, у которых есть _leaflet_id, с помощью которого я хочу выбрать маркеры на карте:

map._layers[nearest[0]] но это не работает.По какой-то причине он возвращает не _leaflet_id маркеров, а новые объекты листовок.

Я неправильно это использую?

Редактировать:

var geoJson = []
for (let i in s) {
  let s = s[i],
  ll = L.latLng(s.Location[0], s.Location[1]),
  llArr = { "type": "Point", "coordinates": [s.Location[0], s.Location[1]] },

  geoJson.push(llArr)

  L.marker(ll, { icon: icon }).on('click', function (e) {
    // some stuffg
  }).addTo(map)
}

1 Ответ

0 голосов
/ 12 июня 2019

Оба метода .nearestLayer() и .nearest() индекса leaflet-knn возвращают структуру данных, содержащую ссылку на L.Layer, содержащую ближайшую точку (т. Е. L.Marker или L.Polyline, в зависимости от того, что является внутри ваших данных geojson), например:

var geojsonlayer = L.geoJson(geojsondata).addTo(map);

searchIndex = leafletKnn(geojsonlayer);

map.on('click', function(ev){
  // Perform a KNN search with maximum 1 element in the result set, 
  // then pick the first result from the result set.
  var nearestResult = searchIndex.nearest(ev.latlng, 1)[0];

  // The result has 'lat' and 'lon' properties...
  console.log('nearest lat: ', nearestResult.lat);
  console.log('nearest lng: ', nearestResult.lon);

  // ... as well as a 'layer' property containing the reference to the `L.Layer`,
  // which we can do something with.
  nearestResult.layer.bindPopup("I'm nearest to where you clicked!").openPopup();

});

См. рабочий пример здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...