Trouver un point dans une polyligne qui est la plus proche à une latlng
j'ai un polyine que j'ai dessiné avec latlngs obtenus à partir de google maps directions de service.
Maintenant, je veux trouver un point sur la polyligne qui est plus proche d'un point donné.
Le moyen le plus évident (pour moi) c'est le type de boucle à travers tous les points de la polyligne et de trouver la distance entre eux et le point donné, mais c'est inefficace parce que les points de la polyligne peut potentiellement être grand.
Je serais heureux d'entendre que toutes les alternatives de le faire.
Merci à l'avance.
OriginalL'auteur T. Rex | 2013-05-07
Vous devez vous connecter pour publier un commentaire.
Voir le projet de Loi Chadwick exemple ici:
http://www.bdcc.co.uk/Gmaps/BdccGmapBits.htm
l'exemple ci-dessus porté à la v3 (code au bas de cette réponse)
sur sa page sous:
à partir de ce post:
Il est similaire, la meilleure démonstration ici http://wtp2.appspot.com/cSnapToRouteDemo.html
Il s'agit de trouver le point le plus proche sur la ligne à la souris. Notez également qu'il est un Google Maps API v2 exemple (mais le principe v3 serait le même).
Le premier exemple est de trouver la distance d'un point à une ligne. Le second lien répond à la question par trouver le point le plus proche sur la ligne. Le premier exemple ne fonctionne pas avec la v3 de l'enveloppe pour la v2 (contrôles de la carte ne sont pas pris en charge). Il ne devrait pas être trop dur pour le port de ces bibliothèques pour la v3, il n'y a que deux endroits où l'utilisation v2 syntaxe spécifique, et le changement des à la v3 est simple.
OriginalL'auteur geocodezip
J'avais besoin d'une version plus propre qui a été porté à la V3, si elle est ici:
Merci! Cela a très bien fonctionné. Je ne suis pas à l'aide de gmaps, donc j'ai simplement utilisé le getClosestPointOnLines fonction.
OriginalL'auteur RCrowe
Je ne pense pas que vous pouvez éviter de vérifier tous les points.
Que faire si le pas vérifié point est le plus proche?
Si vous avez à faire cette opération de nombreuses fois, vous pouvez choisir une structure de données qui est optimisé pour une telle recherche, quadtree par exemple.
Notez que vous ne devez pas utiliser lat gnl comme Descartes coordonnées.
Voir aussi Trouver le point le plus proche de manière efficace
C'est pour le plan en 2D, et non pas pour lat gnl, mais vous pouvez approximative: https://stackoverflow.com/a/16271669/59019
OriginalL'auteur jmihalicza
Inspiré par jmihalicza réponse, je suis venu avec cette fonction pour trouver le point le plus proche dans un tableau de LatLngs à un LatLng.
fonction la plus proche prend un LatLng(llng) et un tableau de LatLngs (listData) et trouve la distance entre chaque latlng dans le tableau et le latlng, il trouve alors le moins de distance et renvoie le Latlng à partir de la liste qui a fourni à cette distance.
MODIFIER
Si vous n'avez pas accès à toute la gamme de LatLngs qui composent la polyligne, mais ont accès à la polyligne lui-même, vous pouvez utiliser la polyligne est la méthode getPath pour obtenir le chemin d'accès qui est un MVC tableau de sorte que vous pouvez utiliser .getArray() pour retourner un tableau de LatLngs à utiliser avec la fonction ci-dessus (les plus proches).
Toutes les idées sur la façon de résoudre ce problème ?
Interpoler plus de sommets entre chaque paire de sommets de la polyligne, même si la nouvelle sommets volonté de ne pas ajouter de l'information spatiale. Faire ce quelle que soit la résolution de vous trouver une solution satisfaisante.
OriginalL'auteur T. Rex