Suchen Sie einen Punkt in einer Polylinie, der einem Breitengrad am nächsten kommt

8

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.

    
T. Rex 07.05.2013, 22:22
quelle

4 Antworten

9

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%     
geocodezip 07.05.2013, 22:32
quelle
8

Ich brauchte eine sauberere Version, die nach V3 portiert wurde, also hier:

%Vor%     
RCrowe 15.05.2015 22:58
quelle
2

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: Ссылка

    
jmihalicza 07.05.2013 22:25
quelle
1

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>     

T. Rex 08.05.2013 14:21
quelle

Tags und Links