SQL de poblaciones españolas (con código postal, latitud y longitud)

Es difícil a veces encontrar por Internet alguna base de datos más o menos decente de las poblaciones españolas junto a algunos datos más… Hace un tiempo que tuve la posibilidad de disponer de una de ellas y, aunque no es 100% perfecta, creo que puede servir de base para algún que otro proyecto.

Tenemos la tabla de provincias y la tabla de poblaciones… en principio es un fichero sacado de una base de datos MySQL, pero por la simplicidad que tiene debería funcionar en cualquier base de datos… así que debería poderse usar en cualquier proyecto.

La tabla de provincias tiene los elementos:

  • idprovincia: un identificador
  • provincia: el nombre de la provincia
  • provinciaseo: la provincia sin espacios, letras raras, etc…
  • provincia3: un identificador de 3 letras

La tabla de poblaciones tiene los elementos:

  • idpoblacion: un identificador
  • idprovincia: el identificador de la tabla provincias
  • poblacion: el nombre de la población
  • poblacionseo: la población sin espacios, letras raras, etc…
  • postal: el código postal “principal” del lugar (si hay varios en una misma población, sólo se toma el “de numeración menor”)
  • latitud: la latitud aproximada
  • longitud: la longitud aproximada

Descargar SQL de Municipios de España con Código Postal, Latitud y Longitud (se recomienda usar “guardar como…”).

NOTA: Si alguien corrige la base de datos, se agradece que la mande para mantenerla actualizada. Ya que es gratis, al menos que la comunidad la mantenga. Gracias.

72 comentarios en “SQL de poblaciones españolas (con código postal, latitud y longitud)

  1. Pingback: SQL de poblaciones españolas (con código postal, latitud y longitud)
  2. Pingback: ComeTwitts (@cometwitts) (@cometwitts)
  3. Pingback: Limay Cerrutti (@limay)
  4. Pingback: Albert Moreno (@dj_MoRe_)
  5. Qué bueno, Javier. Este tipo de documentos son los típicos que resultan súper útiles pero que suelen ser difíciles de encontrar y, aunque se pueden hacer a mano, resultan bastante costosos y poco exactos.

    ¡Muchísimas gracias! 🙂

  6. Pero estos números son códigos de población (los que se usa por ejemplo en el catastro o cuando te mandan la carta para votar), no son los códigos postales de Correos.

  7. Sí, el código postal, así como longitud y latitud, son cosas que aporta tu lista y no están en la del INE, mi comentario iba por los “id”, que yo creo que es mejor usar los oficiales. Por otro lado, la lista del INE es la oficial de municipios, o sea, que si falta o sobra alguno en tu lista es en la del INE donde hay que comprobarlo.

  8. Hola Julio!

    Sí, en eso estoy de acuerdo… habría que intentar mirar de fusionar las listas o algo así, intentar incluso meter los datos de población de 2010 que incluye el INE y hacer algo abierto…

    Supongo que será cuestión de jugar un rato con tablas, SQL, PHP y funciones de comparación 😉 Si tengo un rato me pondré, a ver qué sale.

  9. Se agradece mucho que se compartan este tipo de tablas, todos los que nos dedicamos a ello sabemos lo que vale 😉

    Muchas gracias!

  10. Gran curro el que te has pegado, y es genial que lo compartas.

    Has mirado otras opciones de distribucion como Google Fusion Tables?

    Saludos!

  11. Hola Francisco!

    Es una primera versión, queda mucho trabajo… como decía por ahí, tal vez fusionar los identificadores con los oficiales del Estado y cosas así…

    Es cuestión de tiempo y paciencia que acabe saliendo algo 🙂

  12. Enhorabuena por el curro y por compartir la base de datos. Tiene bastante mérito.

    Sugerencias no técnicas:
    -súbelo a un proyecto google code o sourceforge. Si alguien quiere actualizar es más fácil darle permiso al repositorio que tener que hacer tú los cambios manualmente.

    Sugerencias técnicas:
    -el campo seo veo que es redundante, se puede obtener fácilmente pasando a minúsculas, quitando tildes y cambiando espacios por guiones. Si es así es más fácil de mantener la base de datos con un campo menos.
    -El campo código postal te cabe en un SMALLINT UNSIGNED.
    -Las longitudes y latitudes caben en un DECIMAL(8, 6)
    -Puedes usar los códigos de tres letras de las provincias como clave primaria, te ahorras un campo en provincias y un byte por cada registro en población (al usar 3 en lugar de 4).
    -También es posible en lugar de usar la tabla provincias, un campo ENUM en población, aunque esto sería menos portable a otro sistema que no sea MySQL.

  13. Cuando anduve montado algo parecido a lo que tienes utilizaba tres columnas para los nombres: el original con caracteres no soportados, uno con los caracteres pasados por el htmllentities y otro con el texto reducido a la minima expresion, sin tildes ni espacios.

    El script (PHP) para quien le resulte util:

    function validarTextHTML($text)
    {

    return htmlentities($text, ENT_QUOTES, ‘UTF-8’);
    }

    function quitarAcentos($text)
    {
    $text = htmlentities($text, ENT_QUOTES, ‘UTF-8’);
    $text = strtolower($text);
    $patron = array (
    // Espacios, puntos y comas por guion
    ‘/[., ]+/’ => ‘-‘,

    // Vocales
    ‘/à/’ => ‘a’,
    ‘/è/’ => ‘e’,
    ‘/ì/’ => ‘i’,
    ‘/ò/’ => ‘o’,
    ‘/ù/’ => ‘u’,

    ‘/á/’ => ‘a’,
    ‘/é/’ => ‘e’,
    ‘/í/’ => ‘i’,
    ‘/ó/’ => ‘o’,
    ‘/ú/’ => ‘u’,

    ‘/â/’ => ‘a’,
    ‘/ê/’ => ‘e’,
    ‘/î/’ => ‘i’,
    ‘/ô/’ => ‘o’,
    ‘/û/’ => ‘u’,

    ‘/ã/’ => ‘a’,
    ‘/&etilde;/’ => ‘e’,
    ‘/ĩ/’ => ‘i’,
    ‘/õ/’ => ‘o’,
    ‘/ũ/’ => ‘u’,

    ‘/ä/’ => ‘a’,
    ‘/ë/’ => ‘e’,
    ‘/ï/’ => ‘i’,
    ‘/ö/’ => ‘o’,
    ‘/ü/’ => ‘u’,

    ‘/ä/’ => ‘a’,
    ‘/ë/’ => ‘e’,
    ‘/ï/’ => ‘i’,
    ‘/ö/’ => ‘o’,
    ‘/ü/’ => ‘u’,

    // Otras letras y caracteres especiales
    ‘/å/’ => ‘a’,
    ‘/ñ/’ => ‘n’,

    // Agregar aqui mas caracteres si es necesario

    );

    $text = preg_replace(array_keys($patron),array_values($patron),$text);
    return $text;
    }

  14. Después de comentarlo Francisco, y con las recomendaciones que haces, probablemente suba las tablas a Google Fusion… así estarán disponibles y “dará igual el formato” ya que eso exporta en CSV y la gente ya se lo organizará como vea y en el sistema que quiera 🙂

    Ahora los problemas que tengo son de ISO-UTF y demás… estoy por quitarle las tildes a nuestros pueblos de “Espana” 😀

    Si consigo revisarlo todo, lo publicaré 🙂

  15. En puesto de poblaciones, seria mas correcto decir municipios. Pues las pedanias no estan incluidas en el fichero. ej. Santiago de la Ribera (cp30720). Balsicas (30591)

  16. Pingback: tonybvnh (@tonybvnh)
  17. Pingback: Sergio Recio (@elbichoBicho)
  18. Pingback: SQL con las poblaciones de España | Linkeando
  19. En teneis cientos de tablas (la mayoria en XLS para facilitar a usuarios no técnicos) con todos los datos actualizados de todo tipo de territorios españoles, incluidos los municipios con población desde 1857 hasta 2010, coordenadas geográficas, archivos de ellos para google earth, …
    tam,bién se incluyen muchos mapas.
    TODO SOBRE LA POBLACIÓN DE ESPAÑA Y SUS TERRITORIOS.

  20. Pingback: culoman (@culoman)
  21. Pingback: Iñaki (@sakyfuxe)
  22. Felicidades! Gran trabajo!

    En OSClass estamos creando una base de datos con toda la información posible y que se pueda acceder a través de una API (geo.osclass.org). De momento la tenemos integrada en nuestro proyecto, pero una vez tengamos más tiempo haremos una buena documentación. No esta completa, algunos países están mejor que otros y falta alguna información (latitud y longitud)… pero también vamos a crear un backoffice para que la gente pueda colaborar 🙂

    Un saludo,

  23. Tu base de datos es de Municipios, faltan miles de poblaciones, por poner un ejemplo, la base de datos de localidades de España que manejo yo, ronda los 80 mil registros, la que has puesto, sólo unos 8 mil.

  24. Esta muy bien esto planteado, y se entiende que es una primera version.

    Pero no estan todos los codigos postales por ciudades. Por ejemplo Cadiz pone que el codigo postal es 11005, pero Cadiz tiene un monton de codigos postales mas. ¿Se nota que soy de Cadiz? Seguramente pase igual con otras capitales o ciudades con codigos postales. Deberias de crear el tipo Codigo Postal como un set, con toda la lista de codigos postales que le pertenece

    O si ya quieres reventar el saco de la base de datos, y ponerlo en 4FN como una tabla mas por ejemplo “codigospostales” con dos campos en la que este asociado cada cp con el identificador del municipio (aunque luego surge el hecho de que hay varios municipios/pedanias que comparten el mismo codigo postal, por eso seria necesario igual mantener el codigo postal tambien en “localidades” como doble relacion)

    Mas info sobre codigos postales.
    http://www.codigospostales.com/descarga.html

  25. Muchas gracias, me viene genial para un experimento que estoy haciendo sobre posicionamiento web local y geoposicionamiento, a ver que tal sale y os comento.

  26. Hey – buen blog , solo mirando algunos blogs , parece una plataforma muy buena que esté utilizando. Estoy en el momento en que utiliza Drupal para un par de sitios de mi sin embargo que buscan cambiar de uno en todos ellos a una plataforma muy parecida a la suya como una prueba. Algo en particular que te sugiero al respecto?

  27. Primero agradecer el excelente trabajo y que lo compartais con los demás.

    Tengo el mismo problema que SirLouen.
    Tengo el CP de una venta que quiero geolocalizar en Google Maps, para lo que necesito la longitud y latitud de cada CP. En la base de datos hay uno por cada ciudad (el más céntrico), pero no aparecen el resto.

    ¿ Conocéis alguna base de datos libre donde pueda encontrar esta relación: CP-Long-Lat? Solo he encontrado una con estos datos y es de pago…

    Gracias

  28. Fántástica recopilación, muchas gracias!!
    Por corregir algo, hay un par de poblaciones confundidas.
    En La Rioja, hay un pueblo que se llama Calahorra y no “La Calahorra”. Por contrapartida, en Granada, al parecer sí que está “La Calahorra”, en vez de “Calahorra”.

    Gracias por el trabajo!
    Saludos
    David

  29. Buenas,
    he reunido un par de archivos sql de provincias y municipios españoles siguiendo los códigos INE. Lo pueden descargar en el siguiente enlace:

    He intentado hacer otro para localidades españolas, pero en algunas bases de datos consultadas he visto localidades como “restaurante manolito”, ó “centro comercial pepito”.

  30. Gracias Julio!!

    Me has ahorrado un buen rato de trabajo, y la lista está muy muy lograda!!

    Saludos

Deja un comentario