2010-02-19 17 views
11

¿Hay un servicio que me dé la distancia de conducción entre dos direcciones? Aparentemente, Google Maps API requiere que muestres un mapa, lo que no quiero hacer (en esa página en particular), y me gustaría simplemente enganchar los datos y guardarlos en mi base de datos después de que el usuario envíe un formulario, en lugar de que esperar a que JS lo haga.REST API para la distancia de conducción?


Si es relevante, esto va a una aplicación de Django. Descubrí que CloudMade ofrece una API de Python, lo cual es bueno, excepto que su última versión de desarrollo tiene un error (no puede usar el objeto API), pero lo más importante es que el soporte para Canadá es horrible (no pudo encontrar direcciones desde ¡cualquier ciudad importante por aquí!).

Respuesta

1

Existen servicios gratuitos, pero la calidad de los datos puede ser cuestionable/inexistente en áreas. También tenga en cuenta las licencias en los datos, el almacenamiento en su propia base de datos puede ser una violación.

http://openrouteservice.org/

+0

¿Es ese solo el servicio para el Reino Unido? No parece reconocer ninguna ubicación canadiense ... – mpen

+0

Datos de Europa. Más información: http://wiki.openstreetmap.org/index.php/OpenRouteService. Además de otros ejemplos, http://wiki.openstreetmap.org/wiki/YOURS, http://www.yournavigation.org/ – Jonathan

3

¿Sería posible utilizar Mapas de Google GDirections objeto? Esto puede devolver las instrucciones de texto en lugar de la superposición de mapa si se llama con un objeto div. Desde allí, puede usar las funciones getDistance (o getDuration). Siempre puede usar un div invisible para las declaraciones si no desea que se muestre nada en la página.

de inicio aquí
http://code.google.com/apis/maps/documentation/examples/directions-advanced.html
http://code.google.com/apis/maps/documentation/reference.html#GDirections

Y utilizar este código de ejemplo

var map; 
    var directionsPanel; 
    var directions; 

    function initialize() { 
     directionsPanel = document.getElementById("route"); 
     directions = new GDirections(null, directionsPanel); 
     GEvent.addListener(directions , "load", onGDirectionsLoad); 
     directions.load("from: 500 Memorial Drive, Cambridge, MA to: 4 Yawkey Way, Boston, MA 02215 (Fenway Park)"); 
    } 

    function onGDirectionsLoad(){ 
     alert(directions.getDistance().html); 
    } 
+3

"Google Maps API requiere que muestre un mapa, que no quiero hacer (en esa página en particular), y me gustaría simplemente enganchar los datos y guardarlos en mi base de datos después de que un usuario envíe un formulario, en lugar de esperar a que JS lo haga ". - Requiere, como en, su política dicta. No es un problema programático, es un problema legal. En segundo lugar, preferiría una solución que no sea JS como indiqué. Gracias sin embargo. – mpen

+0

Bueno, el mapa "requiere" debe registrarse. Sus documentos API y ejemplos en línea explican claramente cómo NO mostrar el mapa a los clientes que no lo desean (el parámetro nulo en el constructor de GDirections). En cuanto a llamar desde el servidor en lugar del cliente, simplemente escriba el JS y llámelo desde el servidor en un control web (no estoy seguro de qué es eso en Django) y analice el retorno directamente. Pone el tráfico en su servidor en lugar del cliente. Sin embargo, no estoy seguro si puede hacer eso con una llamada directa, probablemente tenga que usar JS en un control web de servidor. – ktharsis

+0

No puedo recordar dónde leo contra su ToS ahora. Poner el JS en un control web en mi servidor compartido podría ser complicado ... – mpen

2

Tome un vistazo a Navteq. Utilicé su servicio en el desarrollo de una aplicación de indicaciones para conducir hace unos 5 años y obtuve buenos resultados. Aunque no puedo hablar por ellos últimamente. Creo que la mejor URL es Navteq Routing Service

+0

No es gratis :( – mpen

+0

correcto, no es así - no lo hizo sé que era un requisito ... lo siento –

+0

Supongo que no especificó. Demasiado temprano en el proyecto para comenzar a repartir $$$ por "agradable tener". – mpen

9

La API de direcciones de MapQuest está basada en HTTP Querystring (no estoy seguro de si es completamente RESTful). Puede obtener respuesta XML o JSON. Solo necesita enviar una solicitud HTTP GET.

http://developer.mapquest.com/web/products/open/directions-service

Usa el parámetro de respuesta "distancia".

+1

Ojalá pudiera cambiar el cheque a usted ... esto es exactamente lo que estaba buscando! – mpen

+0

solo ayudando a un compañero Canuck –

+1

http://developer.mapquest.com/web/products/dev-services/directions-ws (URL actualizada) – russellpierce

1

Puede utilizar la nueva API de Google Directions directamente, sin utilizar ningún javascript. http://code.google.com/apis/maps/documentation/directions/

+0

¿Cuándo se lanzó esto? ¡Exactamente lo que estaba buscando! – mpen

+1

Se lanzó en Google I/O 2010: http: // googlegeodevelopers.blogspot.com/2010/05/directions-web-service-arrives-at.html – eillarra

+2

Desafortunadamente, el uso del servicio descrito no infringe los términos de uso descritos en la página: "Nota: la API de indicaciones solo se puede usar en conjunción con la visualización de resultados en un mapa de Google; se prohíbe el uso de datos de indicaciones sin mostrar un mapa para el cual se solicitaron datos de indicaciones. Además, el cálculo de direcciones genera derechos de autor y advertencias que deben mostrarse al usuario de alguna manera. Para obtener detalles completos sobre el uso permitido, consulte las Restricciones de licencia de los Términos de servicio de la API de Maps."Estoy teniendo problemas debido a esto – snicker

8

No tengo una reputación lo suficientemente alta en SO para comentar una respuesta, pero quería dejar en claro que, contrariamente a la respuesta correcta, Google Directions API debe cumplir con la API de Google Maps. Si se desplaza hacia abajo por el enlace suministrado, verá:

Nota: la API de indicaciones solo se puede utilizar junto con la visualización de resultados en un mapa de Google; se prohíbe el uso de datos de indicaciones sin mostrar un mapa para el cual se solicitaron datos de indicaciones. Además, el cálculo de direcciones genera derechos de autor y advertencias que deben mostrarse al usuario de alguna manera. Para obtener detalles completos sobre el uso permitido, consulte las Restricciones de licencia de los Términos de servicio de la API de Maps.

3

Aquí está mi solución:

  1. Regístrese para la red desarrollador Mapquest.
  2. Get AppId
  3. Abre la consola de comandos y ejecutar el siguiente comando (o utilizar el violinista) Sin embargo, la ejecución a través rizo le dará flexibilidad para automatizar su solicitud

    curl -X POST -H "Content-Type: application/json" -d '{locations: ["Salt Lake City, UT","Ogden, UT",],options: {allToAll: false}}' http://www.mapquestapi.com/directions/v2/routematrix?key=YOURKEYGOESHERE >> distance.txt 
    
  4. Guardar comando anterior con todo su destinos en archivo por lotes o sh.

  5. Ahora grep y analice su archivo distance.txt para lo que necesita.