2011-08-09 66 views
12

Digamos que tengo la dirección como texto:Cómo convertir una dirección (como texto) en coordenadas gps?

901 Cherry Ave. San Bruno, CA 94066 EE. UU.

¿Hay algún servicio GRATUITO que pueda ayudarme a identificar las coordenadas GPS (longitud y latitud) de esta dirección? (Lo usaré en mi aplicación, por lo que debería ser algún tipo de API)

El texto puede estar en cualquier idioma.

+1

Gracias por los enlaces API de google (http://code.google.com/apis/maps/documentation/geocoding/). ¿Hay la misma funcionalidad para OSM? –

+2

Aquí está el enlace para la geocodificación OSM - http://wiki.openstreetmap.org/wiki/Nominatim –

Respuesta

18

Se llama proceso de conversión de direcciones a coordenadas geográficas geocodificación.

Dependiendo de cómo va a utilizar los datos, hay una API disponible de Google, detalles here. ¡Buena suerte!

+3

Gracias, usando la palabra _geocoding_ Encontré la API OSM. –

0

Si usted es capaz/dispuestos a utilizar PHP y Zend Framework, entonces la mayoría de la API de Google Maps se abstrae utilizando Zend_Http_Client.

Por ejemplo:

$address = '69 Some Road, Somewhere, NW1 8UJ'; 

$http = new Zend_Http_Client('google_maps_url'); 
$http->setParameterGet(array('address' => $address, 'sensor' => 'false')); 
$get = $http->request(); 
$get = json_decode($get->getBody()); 

if ($get->status == self::GOOGLE_MAPS_SUCCESS) { 
    $lat = (float) $get->results[0]->geometry->location->lat; 
    $long = (float) $get->results[0]->geometry->location->lng; 
} 
3

Realmente no Mather qué marco se utiliza, porque si quieres algo grande que puede tener una gran sorpresa: un límite de 2,5 K petición/día en caso de que este no almacene esa información en un xml para su uso posterior. Por lo tanto, en este momento puede encontrar una mejor manera de combinar esto con una función OSM para la localización.

1

A continuación se muestra el código que uso. Lo preparé basándome en el código de voncox (gracias). Simplemente no quería usar Zend.
Si necesita geocodificar varias direcciones simplemente cierre este código con cualquier tipo de bucle, pero probablemente haya una manera más rápida. Lo he usado solo para unas 100 direcciones y tardó unos 30 segundos en procesarse.

$street="Lwowska 4"; $postcode="00-658"; $city="Warszawa"; $region="mazowieckie"; 

$a=$street.", ".$postcode.", ".$city.", ".$region; 
$address = urlencode($a); 
$link = "http://maps.google.com/maps/api/geocode/xml?address=".$address."&sensor=false"; 
$file = file_get_contents($link); 

if(!$file) { 
    echo "Err: No access to Google service: ".$a."<br/>\n"; 
}else { 
    $get = simplexml_load_string($file); 

    if ($get->status == "OK") { 
     $lat = (float) $get->result->geometry->location->lat; 
     $long = (float) $get->result->geometry->location->lng; 
     echo "lat: ".$lat."; long: ".$long."; ".$a."<br/>\n"; 
    }else{ 
    echo "Err: address not found: ".$a."<br/>\n"; 
    } 
} 
+0

Buena respuesta, Marcin. Puede ser una buena idea eliminar las partes de MySQL de su respuesta, ya que no es relevante para la pregunta y podría causar cierta confusión. –

+0

Bien hecho. Yo * solo * necesitaba una conversión de dirección a GPS y desperdicié grandes cantidades de tiempo en el sitio de Google tratando de obtener una clave API, de permitirla a una API, de probarla ... etc. Este enfoque no requiere una clave y simplemente proporciona datos de vuelta. Es todo lo que realmente necesitaba en primer lugar, no un mapa incrustado. –

0

FYI, licencia comunitaria de MapQuest tiene una API 'abierto', que utiliza nominatim/OpenStreetMap en la parte trasera.

Es la misma API (interfaz) que la aplicación Community 'Licensed', que facilita la transición posterior.

Encontré que la versión abierta requiere que la dirección sea un poco demasiado exacta; el primer día después del despliegue "fallamos" varias direcciones. Pensamos que el servicio no funcionaba, pero resultó que a los nombres de las calles les faltaban pequeños detalles, como una dirección (ex SW).

Probé la versión con licencia y devolvió incluso las direcciones mal escritas.

La licencia de la comunidad de datos con licencia también es gratuita, pero está restringida por los mismos términos que Google. Los datos 'abiertos' que puede hacer con lo que quiere.

Si va a terminar pagando, entonces Boss/Geo api de Yahoo parece ser el más barato para bajo volumen; simplemente no tienen una versión gratuita.

Cuestiones relacionadas