Pregunta

Supuestamente, es posible obtener esto desde Google Maps o algún servicio similar. (Las direcciones de EE. UU. Solo no son lo suficientemente buenas).

¿Fue útil?

Solución

El término que estás buscando es geocodificación y sí, Google proporciona este servicio.

Otros consejos

Además de lo mencionado servicio web de geocodificación de Google , también hay un servicio de la competencia proporcionado por Yahoo . En un proyecto reciente donde se realiza la geocodificación con la interacción del usuario, incluí soporte para ambos. La razón es que he encontrado 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 cree que no sabe dónde está, obtendrá un error 602 que indica un error. Yahoo, por otro lado, si puede despegar una mala dirección de una ciudad / provincia / estado / etc, devolverá la ubicación del centro de esa ciudad. Así que tienes que prestar atención a los resultados que obtienes para ver si realmente son lo que quieres. Hay algunos campos auxiliares en algunos resultados que informan sobre esto: Yahoo llama a este campo " precisión " y Google lo llama " exactitud " ;.

Si desea hacer esto sin confiar en un servicio, descargue Shapefiles TIGER del Censo de EE. UU.

Buscas en la calle que te interesa, que tendrá varios segmentos. Cada segmento tendrá una dirección de inicio y una de finalización, y usted interpolará a lo largo del segmento para encontrar dónde se encuentra su número de casa en el segmento.

Esto te proporcionará un par lon / lat.

Sin embargo, tenga en cuenta que los servicios en línea emplean una gran cantidad de verificación y corrección de direcciones, que también tendría que duplicar para obtener buenos resultados.

También tenga en cuenta que a pesar de que los datos gratuitos son buenos, no son perfectos: las calles más recientes no están allí (pueden estar en los datos que usa Google), y las calles pueden estar fuera de su ubicación real debido a cierta inexactitudes de la encuesta. 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.

Openstreetmaps tiene el objetivo de mapear todo en el mundo, aunque no están del todo bien, vale la pena mantenerse al tanto de sus datos bajo una licencia CC

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

Si tiene que geocodificar una gran cantidad de datos, le servirán los datos del mapa de arrendamiento de un proveedor importante, como teleatlas.

-Adam

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

Google requiere que muestres un mapa de Google con sus datos, con un máximo de 2.5k (era de 25k) solicitudes HTTP por día. Útil pero tienes que ver el uso.

Ellos tienen

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

(Google ya ha eliminado esto. Si ves un duplicado o un caché, enlazaré con eso)

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

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

Para usar 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;
}

Puede ver los documentos de la API de Google Maps aquí para comenzar:

http://code.google.com/apis/maps /documentation/services.html#Geocoding

También parece ser algo que puede hacer para direcciones internacionales usando Live Maps también:

http://virtualearth.spaces.live.com/blog /cns!2BBC66E99FDCDB98!1588.entry

También puede hacer esto con los servicios web de MapPoint de Microsoft.

Aquí hay una publicación de blog que explica cómo: http://www.codestrider.com/BlogRead. aspx? b = b5e8e275-cd18-4c24-b321-0da26e01bec5

Código R 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"

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 acelerar las solicitudes si ve más de una cierta cantidad, por lo que desea utilizar una clave API en su solicitud HTTP.

Tenía un lote de 100,000 registros para geocodificar y me topé con el límite de la API de Google (y como era para una aplicación empresarial interna, tuvimos que actualizar a su servicio premium, que es de $ 10K más)

Entonces, utilicé esto en su lugar: http://geoservices.tamu.edu/Services/ Geocode / BatchProcess / : también tienen una API. (el costo total fue de ~ 200 $)

Puedes probar esto en JavaScript para ciudades 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);
  } 
});

 ingrese la descripción de la imagen aquí

En python utilizando PyPI geopy que se usa para obtener la latitud, langitude, código postal, etc. Aquí está el código de muestra de trabajo ...

from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent="your-app-id")

location = geolocator.geocode("Your required address ")

if location:
    print('\n Nominatim ADDRESS :',location.address)
    print('\n Nominatim LATLANG :',(location.latitude, location.longitude))
    print('\n Nominatim FULL RESPONSE :',location.raw)
else:
   print('Cannot Find')

En Nominatim : algunas direcciones no funcionan, así que simplemente probé MapQuest .
Vuelve correctamente. Mapquest ofrece 15000 transacciones mensuales gratuitas. Es suficiente para mí.

Código de muestra:

import geocoder
g = geocoder.mapquest("Your required address ",key='your-api-key')

for result in g:
   # print(result.address, result.latlng)
   print('\n mapquest ADDRESS :',result.address,result.city,result.state,result.country)
   print('\n mapquest LATLANG :', result.latlng)
   print('\n mapquest FULL RESPONSE :',result.raw)

Espero que ayude.

Sé que esta es una pregunta antigua, pero Google está cambiando la forma de obtener latitud y longitud en base regular.

código HTML

<form>
    <input type="text" name="address" id="address" style="width:100%;">
    <input type="button" onclick="return getLatLong()" value="Get Lat Long" />
</form>
<div id="latlong">
    <p>Latitude: <input size="20" type="text" id="latbox" name="lat" ></p>
    <p>Longitude: <input size="20" type="text" id="lngbox" name="lng" ></p>
</div>

Código JavaScript

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script>

    <script>
    function getLatLong()
    {
        var address = document.getElementById("address").value;
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode( { 'address': address}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                var latitude = results[0].geometry.location.lat();
                document.getElementById("latbox").value=latitude;
                var longitude = results[0].geometry.location.lng();
                document.getElementById("lngbox").value=longitude;
            } 
        });
    }
    </script>

Para obtener más información, consulte este enlace https://www.phpkida.com/java-script / get-latitude-longitude-from-address /

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top