2010-02-19 100 views

Respuesta

29

Suponiendo que está buscando el geographic distance, primero es necesario obtener la latitud y longitud de sus dos códigos postales con el Google Maps server-side geocoding services como en el siguiente ejemplo:

$url = 'http://maps.google.com/maps/geo?q=EC3M,+UK&output=csv&sensor=false'; 

$data = @file_get_contents($url); 

$result = explode(",", $data); 

echo $result[0]; // status code 
echo $result[1]; // accuracy 
echo $result[2]; // latitude 
echo $result[3]; // longitude 

A continuación, se puede calcular la distancia entre las coordenadas de sus dos códigos postales mediante el uso de una aplicación great-circle distance tales como los siguientes:

Tenga en cuenta que el servicio de geocodificación del lado del servidor solo se puede utilizar junto con la visualización de resultados en un mapa de Google; Los resultados de geocodificación sin mostrarlos en un mapa están prohibidos por el Google Maps API Terms of Service License Restrictions.


ACTUALIZACIÓN:

Si usted está buscando la distancia de conducción en lugar de la distancia geográfica, tenga en cuenta que no existe un método documentado y aprobado en el momento de acceder a la API de Google Maps llegar a través de una Solicitud HTTP en el lado del servidor.

Sin embargo, un método indocumentado que devuelve una salida JSON es la siguiente:

http://maps.google.com/maps/nav?q=from:London%20to:Dover 

Esto le devolverá las direcciones de conducción, junto con la distancia de conducción total en formato JSON: "meters":122977.

El formato del parámetro q debe ser from:xxx%20to:yyy. Reemplace xxx e yyy con el inicio y el destino, respectivamente. Puede utilizar la latitud y la longitud coordina en lugar de direcciones completas:

http://maps.google.com/maps/nav?q=from:51.519894,-0.105667%20to:51.129079,1.306925 

Tenga en cuenta que no sólo se trata de indocumentados, pero también puede violar las restricciones 10.1 y 10.5 de la Google Maps API Terms and Conditions.

También puede ser interesante en probar los siguientes artículos relacionados:

+1

Esta es una gran explicación de cómo hacerlo. Pero ten en cuenta, ya que preguntas específicamente sobre el Reino Unido, que la geolocalización de Google no es tan precisa para los códigos postales del Reino Unido. Sin embargo, podría estar bien para tus propósitos, depende de lo que necesites. – MarkJ

+0

@Mark: Gracias por compartir esta información sobre la exactitud de los códigos postales del Reino Unido. –

+1

Esto existe: https://developers.google.com/maps/documentation/distancematrix/ – malix

0

La API de Google Maps está en JavaScript, PHP no. Para lograr lo que desea, gire los 2 códigos postales a las coordenadas LatLang y use la función distanceFrom para encontrar la distancia entre ellos.

Eche un vistazo a this article para obtener un código de muestra.

+0

¿De todos modos puedo devolver datos JSON? Voy a hacer llamadas AJAX para calcular la distancia de conducción entre 2 lugares. – dotty

+0

Debería poder. Los datos provenientes de la API de Google ya están en formato JSON. Simplemente lo envié de regreso a PHP, o lo analizo desde el lado del cliente usando Javascript. –

3

No sabe si la API V3 cambia nada, pero he estado usando esto por un tiempo y que todavía funciona:

desde y hasta son cada uno expresado como latitud, longitud (una dirección probablemente trabajo; estoy seguro de que lo probé, pero no recuerdo y que tenía las coordenadas de todos modos)

$base_url = 'http://maps.googleapis.com/maps/api/directions/xml?sensor=false'; 
$xml = simplexml_load_file("$base_url&origin=$from&destination=$to"); 
$distance = (string)$xml->route->leg->distance->text; 
$duration = (string)$xml->route->leg->duration->text 
2

sobre la base de la respuesta de Daniel, se puede utilizar de Geocoding API Google para obtener coche, transporte público, caminar y distancias de ciclismo fácilmente:

$postcode1='W1J0DB'; 
$postcode2='W23UW'; 
$result = array(); 

$url = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=$postcode1&destinations=$postcode2&mode=bicycling&language=en-EN&sensor=false"; 

$data = @file_get_contents($url); 

$result = json_decode($data, true); 
print_r($result); 

Asegúrese de reemplazar & mode = bicicleta con su parámetro preferido:

modo
  • & = modo de conducción
  • & = bicicleta
  • & mode = tránsito
  • modo
  • & = caminar
Cuestiones relacionadas