Este SQL contiene una base de datos con "casi" todas las localidades del mundo agrupadas en regiones y países. Cada registro está en ocho idiomas (Ruso, Inglés, Alemán, Francés, Castellano, Italiano, Portugués y Chino). Contiene un total de 214 países, 1997 regiones y 129602 localidades. Contiene también la posición devuelta por la API de Google Maps para latitud y longitud y si esa posición es exacta o no. Espero que os sirva de ayuda en vuestros proyectos. Más info en el primer comentario.
Comentarios
#4 Pues ha sido un poco lioso.
1) He descargado una serie de XML con continentes, países, regiones y localidades, en total casi 20.000 XML.
2) He recorrido cada XML parseando el contenido y guardándolo en base de datos.
3) He creado un script de PHP que realiza la petición de geolocalización. El problema está en que google te corta las solicitudes en cuanto detecta peticiones sistemáticas automáticas o demasiado rápidas desde una misma IP, con lo que el script hacía un sleep(1) entre cada petición. Cuando google detectaba algo extraño, cortaba la conexión indicando "límite de peticiones alcanzado", entonces reiniciaba el router, y con nueva IP volvía a lanzar el proceso.
Es casi una semana de trabajo
#11 Despues de buscar en decenas de sitios y decenas de bases de datos, esta estructura es la única que he encontrado que mantiene una cantidad de niveles proporcional para todos los datos. En otras bases de datos había lugares con 5 niveles, 3 niveles, 2 o seis, con lo cual el trabajo manual de reasignar todas las posiciones a 4 niveles era imposible, entonces entre lo imposible y lo posible, he optado por lo segundo
Link a Gigasize.com: http://www.gigasize.com/get.php?d=2vmd9fgf4qb
#23 corregido
Aunque, eso realmente no está creado a partir de las coordenadas.
Las coordenadas las usaré para buscar envíos en un radio de quilómetros de otras localizaciónes (tu localización o la localización de los envíos), para eso, si os interesa, esta es la consulta:
SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
En donde selecciona un máximo de 20 localizaciones en un radio de entre 20 y 37 millas alrededor de la coordenadas 37, -122
El original:
Finding locations nearby with MySQL
To find locations in our markers table that are within a certain radius distance of a given latitude/longitude, you can use a SELECT statement based on the Haversine formula. The Haversine formula is used generally for computing great-circle distances between two pairs of coordinates on a sphere. An in-depth mathemetical explanation is given by Wikipedia and a good discussion of the formula as it relates to programming is on Movable Type's site.
Here's the SQL statement that will find the closest 20 locations that are within a radius of 25 miles to the 37, -122 coordinate. It calculates the distance based on the latitude/longitude of that row and the target latitude/longitude, and then asks for only rows where the distance value is less than 25, orders the whole query by distance, and limits it to 20 results. To search by kilometers instead of miles, replace 3959 with 6371.
Subiendo a a Uploading.com y Gigasize.com
Cada tabla contiene las relaciones con las tablas superiores siendo por orden: idiomas, paises, regiones, localidades.
Las tablas de paises, regiones y localidades contienen la posición de longitud y latitud en los campos x e y. Además incluye el campo de exacto que indica si ese lugar está correctamente posicionado (según los datos devueltos por google maps).
Las búsquedas de las localidades se realizaron de la siguiente manera:
Localidad, región, país [si falla] > Localidad, país [si falla] > país.
Solo lleva exacto = 1 cuando la búsqueda por localidad, región y país devuelve posición exacta.
#15 Hombre, sería acojonante que la posición GPS de mi ciudad estuviera sometida a copyright
¿Y estos datos de donde salen? No es una pregunta trivial ya que utilizar estos datos derivados pueden suponer una violación de la licencia de innumerables sitios, por ejemplo Google Maps.
En este enlace aparecen varios sitios que ofrecen esta información de forma libre
http://wiki.openstreetmap.org/index.php/Search
y quien se ha currado esto?
Parecido a esto está geonames.org con sus países, ciudades...
En geonames tienen también bases de datos descargables de puntos de interés, artículos de wikipedia geoposicionados, BDD con códigos postales de varios países...
http://download.geonames.org/export/dump/
Es importante saber de dónde salen, además, para saber si te puedes fiar o no.
#32 nadie te obliga a descargarlo. Es un fichero SQL que contiene las tablas de una base de datos MySQL.
#12 Gracias por compartirlo, majete.
#17 pues sí y no
Tu puedes coger un gps y publicar que tu ciudad está en longitud foo y latitud bar, lo que no puedes hacer es tomar esos datos de un corpus con copyright restrictivo y reproducirlos alegremente.
Meneo al canto por el trabajazo del asunto.
Mmmm... un post positivo, constructivo, curradísimo, desinteresado, no linkado a una página en inglés, sin hablar de iglesia ni política, mmm...
¡¡A LA HOGUERA CON ESTE BICHO RARO DE MENEAME!!
(Excelente, Lito, me has alegrado el día. Hacía años que no leía aportes como este en meneame, como era al principio.)
¡Muchas gracias!
Lito felicidades!!!!! muy buen trabajo!!!! y tal y como dice pacoss es raro encontrar un post como este en meneame.net, que ultimamente todos hacen referencia hacía su grupo politico para intentar machacar al otro bando (pepero criticando socialistas etc etc), felicidades
#4 pues npi, pero habrá que pillarlo rápido antes de que se entere Ramoncín...
Pues nunca está de mas tenerla, gracias
Porque no creas un proyecto en SourceForge.Net con el fichero? Así siempre estarà disponible i seguro que tendrà una buena difusión.
#6 podías habértelo bajado de este enlace http://rapidshare.com/files/119757880/paises.sql.gz
enhorabuena por el trabajo por el trabajo
#21 Si eres el responsable de Zeembo, que sepas que si buscas España/A Coruña/A Grela te lo posiciona en... Ourense
Gracias por el currazo
#36 Si amplías el comentario:
To search by kilometers instead of miles, replace 3959 with 6371.
#30 de aquí http://badoo.com/more_locations.phtml
Dice que:
Alguien puede poner algún enlace alternativo?
Por cierto:
Las horas felices de RapidShare
Las horas felices de RapidShare
incubaweb.comUn posible uso de estos datos: http://zeembo.com/gmaps.html
otra cosa, tiene algunas lagunas la cosa, por ejemplo una busqueda como cadiz dice que el id_pais es el 55 y no el 28.
el tema anterior no vi el comentario entero, perdona.
Hablando de Geonames, yo tengo una versión de hace un año. Cargué todos los paises en una tabla MySQL que tiene 6,291,013 posiciones entre las cuales hay 2,232,137 localidades.
#25, buen curro, pero el query no lo entiendo.
por que 3959 y no 6371, entiendo que quieres usar el teorema del Coseno de la trigonometría esférica.
Excelente, muchas gracias
#6 Sere curioso, ¿de donde has obtenido los xml con continentes, paises, regiones y localidades?
#6 Pues enhorabuena por el trabajo! Esperemos que no se muevan
#6 Un buen curro...una pregunta, porque lo has hecho a 3 niveles y no 4? (Country->AdministrativeArea->SubAdministrativeArea->Locality)
Saludos!
Ya podre practicar bases de datos con esto
Bendito seas Lito
Buen trabajo!
Un gran trabajo. Enhorabuena.
Me acabas de alegrar la vida #0, iba a mandarte un mensaje privado pero no he encontrado como se hace (o si se puede) y la verdad que llevo haciendo algún tiempo un SIG mediambiental, con la cosa del cambio climático, y crear las tablas georreferenciadas es lo mas pesado!.
Gracias por todo! :))))
#6 gracias x el aporte y por compartir tu trabajo
eso de "Este SQL" me ha desanimado por completo de descargar el archivo.