2014-03-24 23 views
6

Ich frage mich, ob es tatsächlich einen Weg gibt, um Marker in der Nähe meiner Position mit leaflet.js zu finden. Der erste Gedanke, der mir in den Sinn kommt, ist, lat und lng meiner Position zu speichern und dann über ein Array von Lat- und lng-Markern zu iterieren, sie in ein Array zu platzieren und dann dieses Array zu sortieren. Ich bin nicht sicher, ob dies eine gute Option ist, denn wenn Sie eine Million Markierungen in der Karte haben, wird es eine Weile dauern.So finden Sie den nächsten Marker leaflet.js

Pseudo-Code

var myLatLng = [34,56]; 
var markers = [[20,30],[10,20],[12,-100],[54,90],[-10, -20],[20,20]]; 
var closests = []; 
function findNearestMarker (myPosition, nearestMarkers){ 
for(var i = 0; i < nearestMarkers.length){ 
    if((nearestMarkers[i][0] - myPosition[0]) < 100 && (nearestMarkers[i][1] - myPosition[1]) < 100){ 
     closests.push(nearestMarkers[i]) 
    } 
} 
} 

Ich bin eigentlich mit Karten beginnen und nicht so viele Ansätze kennen, werde ich auch offene Straßenkarten für dieses Projekt verwenden möchten, aber, wenn jemand wissen und aproach google mit Karten oder andere Dienste wird es begrüßt.

Antwort

5

Versuchen leaflet-knn, das tut Nächster-Nachbar-Lookups: einen Punkt und ein paar andere Punkte gegeben, es die nächsten Nachbarn findet (wie es auf dem Zinn sagt)

+1

Ich habe es überprüft, aber es scheint, dass es ein Knotenmodul ist, gibt es eine Möglichkeit, dass ich es auf Client-Seite sehen kann? .... srry ich verstehe es nicht auf der Dokumentation. –

+0

Ja, nur herunterladen https://raw.github.com/mapbox/leaflet-knn/master/leaflet-knn.min.js – tmcw

4

Leaflet.GeometryUtil die beste Lösung ist, fand ich dafür (https://github.com/makinacorpus/Leaflet.GeometryUtil). Verwenden Sie L.GeometryUtil.closestLayer.

Es ist praktischer als leaflet-knn, weil Sie ein Array von Schichten (Markierungen für Beispiele), anstatt nur einer Geojson-Schicht senden können. Aber noch wichtiger ist, so scheint es schneller (ca. 90% schneller mit einem Satz von mehr als 500 Marken, Kaltstart, auf Chrome 36, obwohl auf FF31 vergleichbar, es ist)

+0

Hey, ziemlich cool, ich werde es überprüfen! Wenn alles funktioniert, gebe ich dir die Punkte :) –

+0

Ein Problem, das ich gefunden habe, ist es gibt Ihnen nur einen einzigen Punkt, der genau wie das Zentrum aussieht. Sie können einen Radius verwenden, aber wir haben Markierungen, die die Größe ändern können. Ich werde die 'iconSize' verwenden, aber das scheint immer noch etwas zu sein, was das Plugin machen könnte. – trysis

Verwandte Themen