Para un proyecto que espero que pronto vea la luz, he estado investigando cómo determinar la localización geográfica de cualquier sitio. Esto es, determinar la latitud/longitud a partir de una frase en plan «Elche, Alicante, Spain»
A esto se le llama Geocoding y a poco que he buscado tanto Google como Yahoo tienen APIs REST que te permiten enchufar queries en un servidor (aunque con unos términos de uso limitados).
En el caso de Yahoo, hace falta darse de alta para que te den un appid y poder hacer los queries.
En el caso de Google, no es así, y preguntar la latitud y longitud de «Elche, Alicante, Spain» es tan fácil como:
http://maps.googleapis.com/maps/api/geocode/json?address=Elche,+Alicante,+Spain&sensor=false
Esto devuelve un churrasco en JSON (también lo puedes pedir en XML) y dentro de este churrasco, dice que la latitud/longitud es:
«lat»: 38.2671765,
«lng»: -0.6952196
También existe GeoNames, que es menos preciso, pero puede resultar interesante también (ver enlace más abajo).
Para más información:
- Google Geocoding API:
http://code.google.com/apis/maps/documentation/geocoding/index.html - Yahoo! Place Finder:
http://developer.yahoo.com/geo/placefinder/ - GeoNames geographical database:
http://www.geonames.org/
16/11/2010 at 1:06 am Permalink
Hola Pau, para esas cuestiones de GeoCoding una solución bastante elegante una vez pasamos de las simples consultas contra el servidor es implementar una interfaz (algo así como IGeoCode) que hay en varias librerias de lenguajes de alto nivel (yo lo descubrí en C# pero habrá más). También te puedes crear tu la clase a mano, más casero.
Con un par de métodos es más que suficiente y desarrollando luego una fórmula para calcular distancias entre conjuntos de latitud/longitud se puede enriquecer mucho una aplicación de cualquier tipo:
A cuánta distancia estoy de éste sitio, seleccionar automáticamente el sitio más cercano, etc.
Esto se puede hacer también con Google Geocoding API, creo, pero para aplicaciones de escritorio cuanto menos acceso remoto haya, mejor (a veces tarda en contestar con los datos).
Tengo la solución implementada por ahí por si te interesa, espero que sirva la idea 🙂
24/11/2010 at 4:42 pm Permalink
Gracias por tu comentario. El otro día también estuve leyendo acerca de cómo calcular las distancias, y la verdad es que me he quedado asombrado de que hayan varias formas (cada cual con su error, y una de las que menos error tiene es supersencilla).
Coincido en que hay que evitar los accesos remotos al igual que hay que tratar de tener los datos más usados siempre en caché, en mi caso me voy a guardar los datos en la BBDD directamente.
Saludos y gracias!