web-dev-qa-db-fra.com

Obtenir les coordonnées géographiques exactes d'un itinéraire complet, Google Maps ou OpenStreetMap

Supposons que j'ai un itinéraire défini d'une ville à une autre. À partir de l'API Google Maps, je peux récupérer un itinéraire entre les deux. Toutefois, l'itinéraire renvoyé par Google est un itinéraire comportant des géo-coordonnées uniquement aux endroits où il y a une autre étape dans une étape (par exemple, lorsque je dois changer de route).

Ce dont j'ai besoin, ce sont des géolocalisations (lat/long) tout au long de l'itinéraire, à des intervalles spécifiques (par exemple, tous les 1/4 de mile ou 100 m).

Est-il possible d'y parvenir via l'API Google Maps/les services Web? 

Ou la base de données OpenStreetMap serait-elle le moyen de le faire?

Cordialement, Madeleine.

27

OSRM vous donne des itinéraires avec des géométries de route telles qu'elles sont dans la base de données OpenStreetMap. Par exemple, vous pouvez obtenir la route en tant que GPX (et post-traiter ce fichier si vous le souhaitez). Cela ressemblerait à ceci:

GET http://router.project-osrm.org/viaroute?hl=en&loc=47.064970,15.458470&loc=47.071100,15.476760&output=gpx

En savoir plus: Documentation API OSRM

23
tyr

Comme la réponse acceptée est obsolète et ne fonctionne plus, voici comment interroger tous les nœuds situés le long d’une route à l’aide du service route de Project OSRM .

Étant donné un nombre arbitraire de paires lat, lat ..... Par exemple, les trois suivantes (à Berlin):

  • 13.388860,52.517037
  • 13.397634,52.529407
  • 13.428555,52.523219

Route-service calcule l'itinéraire le plus rapide entre ces points et il est possible de renvoyer tous les nœuds le long de la route à l'aide de la requête suivante:

http://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.397634,52.529407;13.428555,52.523219?alternatives=false&annotations=nodes

Cela renvoie une réponse JSON contenant les ID de nœud de tous les nœuds le long de la route. Le résultat devrait ressembler à ceci:

{
  "routes": [
    {
      ...
      "legs": [
        {
          "annotation": {
            "nodes": [
              2264199819,
              2045820592,
              21487242,
              ...
    ]
 }

Pour recevoir les coordonnées latérales des nœuds OverpassAPI peuvent être utilisées. 

[out:json];
(
   node(264199819);
   node(...);
   node(...);
   ...
);
(._;>;);
out;

Voici un exemple de demande utilisant overpass-turbo: http://overpass-turbo.eu/s/toe

5
user2350644

C'est simplement la méthode google.maps.DirectionsService (). Route (). Vous devez transmettre la demande de service, puis un rappel qui s'exécute à la fin de la demande de service.

https://developers.google.com/maps/documentation/javascript/directions

5
Marlio

Ajout à la réponse de Marlio.

Vous pouvez utiliser l'API Google Maps Directions lui-même . Pour une origine et une destination données, dans la sortie JSON, recherchez les éléments suivants:

"polyline" : {
  "points" : ""
}

Vous pouvez utiliser un décodeur pour obtenir les coordonnées de la polyligne.: https://github.com/emcconville/google-map-polyline-encoding-tool Ou. vous pouvez utiliser le paquet googleway en R pour décoder le même . https://cran.r-project.org/web/packages/googleway/googleway.pdf

Je ne sais pas trop comment régler la résolution au niveau souhaité.Mais la résolution dans la sortie de l'API est vraiment bonne.

0
Adithya Ajith