2016-11-17 1 views
0

У меня есть две точки Слои (Клиенты, Поставщики), я хочу, чтобы все ближайшие поставщики были у конкретного клиента на расстоянии, введенном пользователем, я слышал о листочке, но я не мог найти полный пример, чтобы понять его хорошо ,какие-либо предложения? Это мой код в части получения данных клиентов через AJAXкак вычислить ближайшие точки к данной точке с помощью листовки-knn?

$.ajax({ 
      type: "POST", 
      url: 'Customers_geojson.php', 
      dataType: 'json', 
      success: function (response) { 
        geojsonLayer = L.geoJson(
         response, 
         { 
         pointToLayer: function (feature, latlng) 
          { 
          return L.circleMarker(latlng, geojsonMarkerOptions1); 
          } 
          }, 
          { 
          onEachFeature: function (feature, layer) 
          { 
          layer.bindPopup('<label>Nick Name:</label>' + feature.properties.nick_name_); 
          } 
        }).addTo(mymap); 
        $("#info").fadeOut(500); 
        var gj = L.geoJson(response); 
        var nearest = leafletKnn(gj).nearest(L.latLng(8.71224, 125.692), 10000); 
        alert(nearest); 

        } 
       }); 
+1

Если ваш вопрос: «Может ли кто-нибудь помочь мне с X?», [Ответ будет либо «да», либо «нет»] (http://www.strcat.de/questions-with-yes-or- нет-answers.html). Пожалуйста, переформулируйте свой вопрос. – IvanSanchez

+1

Пожалуйста, прочитайте [«Как задать хороший вопрос?»] (Https://stackoverflow.com/help/how-to-ask). Возможно, вы захотите изменить заголовок на что-то вроде «Учитывая много точек, как рассчитать ближайшие N-единицы к данному?» – IvanSanchez

+0

Спасибо, я его поменяю. – Beginner

ответ

2

Как рассчитать ближайшие точки к заданной точке с использованием листовка-Knn?

Ответ: «Вы не можете».

nearest neighbour search алгоритм, такой как тот, который rbush-knnмного старше leaflet-knn) орудий, поможет вам ответить на вопросы, как:

Я живу в (х, у); Каковы 5 ближайших магазинов к моему дому?

или

Я в точке (х, у); где находится ближайшая станция метро?

или даже

Я в точке (х, у); где находится ближайшая станция метро? Предел поиск до 500 метров, потому что я не буду ходить пешком.

... но запрос вы хотите, чтобы ответить на очень разные (курсив мой):

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

Используя алгоритм поиска ближайшего соседа является неправильным инструментом для работы. Вы также хотите:

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

В ГИС жаргоне, сделав круг известен как создание буфера, а затем найти пересечение буфера и ваши очки установлены.

То же самое, делая квадрат, как создание ограничивающей рамки, и точек запроса в ограничивающей рамке.

Изготовление буфера звучит лучше всего, но по вычислительным ценам более дорого. Даже очень. Создание ограничивающей рамки и запрос набора точек очень дешево (чтение «быстро») и может быть достигнуто с помощью простого запроса к структуре r-дерева (см., Например, the documentation and examples for rbush).

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

  • Нет связанных вопросов^_^