Ich habe eine Polyine, die ich mit Latlngs gezeichnet habe, die von Google Maps Wegbeschreibungen Service erhalten. Jetzt möchte ich einen Punkt auf der Polylinie finden, die einem bestimmten Punkt am nächsten ist.
Der offensichtliche Weg (zu mir) besteht darin, alle Punkte in der Polylinie durchzugehen und den Abstand zwischen ihnen und dem gegebenen Punkt zu finden. Dies ist jedoch ineffizient, da die Punkte auf der Polylinie möglicherweise groß sein können. p>
Ich würde mich freuen, Alternativen dazu zu hören. Vielen Dank im Voraus.
Siehe Bill Chadwicks Beispiel hier:
Beispiel oben auf v3 portiert (Code am Ende dieser Antwort)
auf seiner Seite unter:
ENTFERNUNGSPUNKT NACH POLYLINE ODER POLYGON
von diesem Beitrag:
Es gibt eine ähnliche, bessere Demo hier Ссылка
Es findet den nächsten Punkt auf der Linie zur Maus. Beachten Sie auch, dass es sich um ein Google Maps API V2-Beispiel handelt (das Prinzip mit v3 wäre jedoch das gleiche).
%Vor%Ich glaube nicht, dass Sie es vermeiden können, alle Punkte zu überprüfen. Was ist, wenn der nicht überprüfte Punkt der nächste ist?
Wenn Sie diese Operation mehrmals ausführen müssen, können Sie eine Datenstruktur auswählen, die für eine solche Suche optimiert ist, z. B. quadtree. Beachten Sie, dass Sie lat lng nicht als Descartes-Koordinaten verwenden sollten.
Siehe auch Den nächsten Punkt auf effiziente Weise finden Das ist für die 2D-Ebene, und nicht für lat lng, aber Sie können approximieren: Ссылка
Inspiriert von jmihaliczas Antwort, habe ich diese Funktion entwickelt, um den nächsten Punkt in einem LatLng-Array zu einem gegebenen LatLng zu finden.
Funktion am nächsten nimmt eine LatLng (llng) und ein Array von LatLngs (listData) und findet den Abstand zwischen jeder Länge im Array und der gegebenen Länge, es findet dann die geringste Entfernung und gibt die Latlng aus der Liste, die das zur Verfügung gestellt Entfernung.
%Vor%BEARBEITEN
Wenn Sie keinen Zugriff auf das LatLngs-Array haben, das die Polylinie bildet, aber Zugriff auf die Polylinie selbst haben, können Sie die Polylinie verwenden getPath-Methode , um den Pfad zu erhalten, der ein MVC-Array ist, sodass Sie .getArray () verwenden können, um ein Array von LatLngs zur Verwendung mit der obigen Funktion (am nächsten) zurückzugeben. p>
Tags und Links javascript google-maps-api-3