2008-10-01 27 views

Respuesta

65

El término que busca es la codificación geográfica y sí Google proporciona este servicio.

+1

Excelente!La sección "Geocodificación vía HTTP" parece ser lo que estoy buscando. –

+3

Solo asegúrese de cumplir con las reglas de uso. Creo que Google solo permite el uso de esto si muestra las ubicaciones en un mapa de Google. No está permitido usarlo para otros fines, pero debe verificar las reglas de licencia y uso. – peSHIr

+0

v2 (en desuso desde 2010) se está cerrando completamente en solo unos pocos meses (mayo de 2013), ¡así que recomiendo no construir nada nuevo con este! – Funka

14

Si usted quiere hacer esto sin depender de un servicio, entonces se descarga el TIGER Shapefiles a partir del Censo de EE.UU. .

Usted busca la calle que le interesa, que tendrá varios segmentos. Cada segmento tendrá una dirección de inicio y una dirección final, e interpolará a lo largo del segmento para encontrar el lugar en el que se encuentra el número de su casa.

Esto le proporcionará un par de lon/lat.

Tenga en cuenta, sin embargo, que los servicios en línea emplean una gran cantidad de comprobación y corrección de direcciones, que también debe duplicar para obtener buenos resultados.

También tenga en cuenta que tan bueno como los datos gratuitos, no es perfecto: las últimas calles no están ahí (pueden estar en los datos que usa Google) y las calles pueden estar fuera de su ubicación real para investigar imprecisiones. Pero para el 98% de las necesidades de geocodificación, funciona perfectamente, es gratis y usted controla todo para reducir las dependencias en su aplicación.

OpenStreetMap tiene el objetivo de mapear todo en el mundo, aunque no son muy allá que vale la pena mantenerse al tanto de lo que ofrecen a sus datos bajo una licencia CC

Sin embargo, muchos (la mayoría?) Otros países están solo mapeado por el gobierno o servicios por los cuales debe pagar una tarifa. Si no necesita geocodificar muchos datos, entonces usar Google, Yahoo o algunos de los otros servicios gratuitos de mapeo mundial puede ser suficiente.

Si tiene que geocodificar una gran cantidad de datos, lo mejor será que arrendar datos de mapas de un proveedor importante, como teleatlas.

-Adán

+0

Esto no funcionaría (para esta pregunta, en general, suena bien para los EE. UU.), Ya que la pregunta ya indica que una solución que solo funciona para direcciones de EE. UU. no sería una solución aceptable. – peSHIr

+1

Eso es cierto, pero originalmente la pregunta no decía esto: las ediciones realizadas por el autor dentro de los 15 minutos posteriores a la publicación original no se consideran modificaciones. Aún así, actualizaré la respuesta. –

22

Además de la mencionada Google geocoding web service, también hay un competir service provided by Yahoo. En un proyecto reciente donde la geocodificación se hace con la interacción del usuario, incluí el soporte para ambos. La razón es que he descubierto que, especialmente fuera de los EE. UU., Su manejo de ubicaciones más oscuras varía ampliamente. A veces Google tendrá la mejor respuesta, a veces Yahoo.

Hay que tener en cuenta: si Google realmente piensa que no sabe dónde está su lugar, le devolverá un error 602 que indica un error. Yahoo, por otro lado, si puede sacar una ciudad/provincia/estado/etc. de su mala dirección, devolverá la ubicación del centro de esa ciudad. Entonces debes prestar atención a los resultados que obtienes para ver si realmente son lo que quieres. Hay campos auxiliares en algunos resultados que le informan sobre esto: Yahoo llama a este campo "precisión" y Google lo llama "precisión".

+1

Un jsfiddle con un ejemplo del reemplazo del servicio de Yahoo, ovimaps de Nokia: http://jsfiddle.net/MgjGr/ –

4

Los términos de servicio de Google le permitirán utilizar su API de geocodificación de forma gratuita si su sitio web es a su vez libre para que lo usen los consumidores. Si no, tendrá que obtener una licencia para Enterprise Maps.

9

También puede probar el OpenStreetMapNameFinder, que contiene datos de calle de código abierto y tipo wiki para (potencialmente) todo el mundo. NameFinder dejará de existir a fines de agosto, pero Nominatim es su reemplazo.

7

Google se requiere para mostrar un mapa de Google con sus datos, con un máximo de 2,5 k (era 25k) peticiones HTTP por día. Útil pero tienes que mirar el uso.

Tienen

http://groups.google.com/group/Google-Maps-API/web/resources-non-google-geocoders

(ya que Google ha eliminado esta. Si ve un duplicado o caché, voy enlace a esa.)

... en el que encontré GeoNames que tiene un servicio descargable de bases de datos, servicio web gratuito y un servicio web comercial.

+1

Desafortunadamente, parece que el enlace groups.google.com ya no existe. Gracias por el enlace geonames sin embargo, parece prometedor! – Funka

+1

Punto de corrección/aclaración: Google "v3" API permite 2.500 solicitudes por día (por dirección de IP!), No 25k. Consulte https://developers.google.com/maps/documentation/geocoding/#Limits – Funka

+0

Actualizado. Gracias, Funka. –

3

Para su uso con Drupal y PHP (y fácilmente modificable):

function get_lat_long($address) { 
    $res = drupal_http_request('http://maps.googleapis.com/maps/api/geocode/json?address=' . $address .'&sensor=false'); 
    return json_decode($res->data)->results[0]->geometry->location; 
} 
+0

¡Súper! Gracias a Dios, leí toda la respuesta, esa es y puedo encontrar tu respuesta. ¿Debo saber si hay alguna restricción para usar esta url en php normal? como número de solicitud por día? @Nate – Rajesh

2

R código para obtener la latitud y longitud de una dirección de calle

# CODE TO GET THE LATITUDE AND LONGITUDE OF A STREET ADDRESS WITH GOOGLE API 
addr <- '6th Main Rd, New Thippasandra, Bengaluru, Karnataka' # set your address here 
url = paste('http://maps.google.com/maps/api/geocode/xml?address=', addr,'&sensor=false',sep='') # construct the URL 
doc = xmlTreeParse(url) 
root = xmlRoot(doc) 
lat = xmlValue(root[['result']][['geometry']][['location']][['lat']]) 
long = xmlValue(root[['result']][['geometry']][['location']][['lng']]) 
lat 
[1] "12.9725020" 
long 
[1] "77.6510688" 
2

Si quieres hacer esto en Python:

import json, urllib, urllib2 

address = "Your address, New York, NY" 

encodedAddress = urllib.quote_plus(address) 
data = urllib2.urlopen("http://maps.googleapis.com/maps/api/geocode/json?address=" + encodedAddress + '&sensor=false').read() 
location = json.loads(data)['results'][0]['geometry']['location'] 
lat = location['lat'] 
lng = location['lng'] 
print lat, lng 

Tenga en cuenta que Google parece Otorga solicitudes si ve más de una cierta cantidad, por lo que desea utilizar una clave API en su solicitud HTTP.

1

que tenía un lote de 100.000 registros que se van codificación geográfica y se encontró con el límite de la API de Google (y ya que era para una aplicación interna de la empresa, hemos tenido que actualizar a su servicio premium, que es $ 10K más)

Así , Usé esto en su lugar: http://geoservices.tamu.edu/Services/Geocode/BatchProcess/ - también tienen una API. (El costo total fue de alrededor de ~ 200 $)

0

Puede probar esto en JavaScript para ciudad como Kohat

var geocoder = new google.maps.Geocoder(); 
var address = "kohat"; 
geocoder.geocode({ 'address': address}, function(results, status) { 
var latitude = results[0].geometry.location.lat(); 
var longitude = results[0].geometry.location.lng(); 
alert(latitude+" and "+longitude); 
    } 
}); 

enter image description here

Cuestiones relacionadas