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.

Comments

47 respuestas a «SQL de poblaciones españolas (con código postal, latitud y longitud)»

  1. Avatar de Firenze

    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! 🙂

    1. Avatar de Javier Casares

      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.

  2. Avatar de Julio

    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.

  3. Avatar de Javier Casares

    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.

  4. Avatar de Francisco

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

    Has mirado otras opciones de distribucion como Google Fusion Tables?

    Saludos!

  5. Avatar de Viperey

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

  6. Avatar de Carlos

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

    Muchas gracias!

  7. Avatar de Javier Casares

    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 🙂

  8. Avatar de Antonio Villena

    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.

  9. Avatar de Javier Casares

    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é 🙂

  10. Avatar de pepe

    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)

  11. Avatar de fruiz

    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.

  12. Avatar de Juan Ramón Díaz
    Juan Ramón Díaz

    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,

  13. Avatar de edu

    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.

  14. Avatar de SirLouen

    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

  15. Avatar de 4seo

    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.

  16. Avatar de outdoor lighting manufacturers usa
    outdoor lighting manufacturers usa

    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?

  17. Avatar de Diego Alegre

    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

  18. Avatar de David

    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

  19. Avatar de Ibrahim

    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».

  20. Avatar de Juan Andrés Moreno Rubio
    Juan Andrés Moreno Rubio

    Gracias Julio!!

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

    Saludos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *