El esquema de continentes, paÃses y ciudades es de uso común para cualquier aplicación. Si además queremos mantener una lista de direcciones quizá nos interese añadir también el código postal.
Estos dÃas me he decidido a poner en una base de datos una serie de contactos. Como quiero evitar errores y que haya coherencia y consistencia con los datos, lo primero que he buscado es la estructura de paÃses, algo que por lógica se necesita en muchÃsimas aplicaciones y parece obvio que será algo muy estandarizado o por lo menos muy consensuado.
Estructura de paÃses del mundo
Lo primero que he hecho ha sido buscar la lista de paÃses del mundo, con sus respectivos códigos internacionales (por ejemplo, sabemos que para España es ES, para Francia FR, para Alemania DE, etc.). Pero querÃa una lista que pudiese importar directamente a una base de datos, sin tener que entrarla de nuevo, ya que es más rápido y evita errores. Me ha gustado encontrar esta:
Según dice cumple con la norma internacional ISO y está disponible en tres formatos: xls, txt, csv. Como mi base de datos es una MySQL, elegà el formato csv, que se importa directamente mediante phpMyAdmin sin ningún problema.
Provincias y municipos de España
A continuación, para poder encontrar los códigos de las distintas provincias y municipios de España, podemos recurrir a la web del Instituto Nacional de EstadÃstica, que cada año actualiza esta información y nos la ofrece en listados en formato xls:
He abierto el fichero en Open Office y lo he guardado en formato csv. A continuación lo he importado en MySQL sin problema.
En este fichero vemos que tenemos los códigos y nombres de los municipios y el código de las provincias. Ahora nos faltarÃa una tabla que relacione los códigos de las provincias con el nombre de cada una de ellas; nada difÃcil, pues no hay muchas.
Con esto serÃa suficiente según lo que queramos hacer, pero a mà personalmente también me interesa tener la clasificación por autonomÃas. No he podido encontrar ninguna tabla ya hecha, asà que la he creado yo misma.
Los Códigos Postales
Si queremos añadir los códigos postales debemos tener en cuenta que no podemos relacionarlos directamente con los códigos de municipios que tenemos. Los códigos postales se asignan a calles y zonas (núcleos de población) que no tiene por qué coincidir obligatoriamente con un municipio. AsÃ, a veces tenemos un municipio con un único código postal pero muchas otras veces tenemos varios códigos postales para distintas zonas de una misma localidad y también podemos encontrar varios municipios compartiendo un mismo código postal.
Al ir a buscar un listado de códigos postales, lo primero que piensas es en acudir a la web de correos, donde encontramos las tablas de la base de datos con unas tarifas a precios desorbitados; no guardan ninguna proporción con el precio real de mercado.
Nada que ver con la generosidad de Albin, que nos ofrece gratuitamente la base de datos completa en 3 formatos: txt, xml y MySQL ¡¡Gracias, amigo!!
Sin embargo, en mi caso no ha sido posible utilizarla directamente porque la importación de la base de datos me daba un error de «checksum» en el formato MySQL, en todos los intentos de importación.
Tampoco parecÃa tener éxito con el formato txt (tras conversión a csv), pues también da error grave. Pero, a diferencia del otro formato, pude acceder al archivo y finalmente encontré el error: existe una calle en Córdoba, dos en Madrid y una en Las Palmas (Quemadillas, Princesa Juana y Canteras) en las que se ha incluÃdo un punto y coma, con lo cual la importación de datos interpreta que en esos registros existe un campo de más que no puede procesar. Sólo tuve que corregirlo y ya pude importar sin problemas.
En esta base de datos salen muchos más «municipios» que en el listado del INE, asà que he substituido la anterior lista de municipios por esta otra.
Actualización: Otra opción serÃa enlazar los núcleos de población con que trabaja correos y asignarlos a los municipios (entidad legal) correspondientes. Algo a valorar dependiendo del uso que vaya a darse a la base de datos.
El resto de paÃses
Dado que me ha costado más de lo que creÃa conseguir esta estructura, dejo para más adelante el resto de paÃses.
O puede que quizá más adelante compre alguna estructura de base de datos, pero a un precio asequible 😉
Actualización:
Edito la entrada para añadir los enlaces que nos pasa Eqhes. Se trata de la página GeoNames. Hay información de todo tipo que se puede descargar o usar como servicio web gratuitamente, aunque aceptan donaciones. ¡Realmente útil!
Technorati Tags: códigos postales, csv, mysql
¡Buenos dÃas Carme! Has hecho un gran trabajo 😉 A ver si algún dÃa se ponen las pilas los de Correos. No veo mal que cobren por ofrecer los datos, pero a esos precios no sé si alguien se lo puede permitir…
Hace algún tiempo estuve buscando lo mismo que ahora tú nos regalas, pero además querÃa geodatos de las poblaciones, y acabé llegando a una página más que interesante: GeoNames. Hay información de todo tipo que se puede descargar o usar como servicio web gratuitamente, aunque aceptan donaciones. Espero que te sea útil 😉
Saludos.
¡Muchas gracias, Eqhes!
El sitio es muy bueno y tremendamente útil. Al igual que tú, tampoco veo mal que cobren si actualizan los datos si lo mantienen al dÃa, pero algo que sea razonable.
Gracias de nuevo por los enlaces y si aceptan donaciones estupendo, pues podremos pagar lo que pensemos que es justo 🙂
Hola Carmen, gracias por poner a disposicion este producto tan útil.
saludos jaime
Thanks!
Muchas gracias, Carmen.
Estaba empezando mi proyecto de BI con informacion geografica y me ha venido de perlas.
Merci!!!
El problema con las bases de datos de correos es que se basan únicamente en nucleos de población y no en la entidad legal «municipio», con lo cual, en las bases de datos de correos no viene la información del municipio. Por ejemplo: El municipio Segovia tiene 6 nucleos de población (la mayorÃa antiguios pueblos que se unieron al municipio hace mas de un siglo), algunos de ellos a una distancia de más de 20 km. En correos encontraremos que Segovia tiene los códigos postales 40001 a 40007, Aldeallana y Fuentemilanos el 40153, Madrona, Perogordo y Torredondo el 40154, Zamarramala el 40156, Revenga y Hontoria el 40195; pero en la base de datos de correos no indica por ninguna parte que sean parte del término municipal de Segovia. Incluso hay veces que en un municipio con varios núcleos de población, alguno de ellos tenga el mismo código postal que el de algún núcleo de población del término municipal contiguo.
Hola Pedro. Efectivamente, lo has descrito muy bien. Y este es el motivo por el cual en la base de dados de códigos postales salen muchos más «municipios«: porque en la base de datos del INE están los municipios legalmente constiuÃdos (necesarios para relacionarnos con la administración pública) mientras que correos trabaja en base a núcleos de población.
A la hora de crear nuestra base de datos tendremos que tener muy clara la finalidad de la misma y elegir el sistema que nos permita sacar el máximo rendimiento de nuestro trabajo.
Muchas gracias por el comentario.
Para los datos de españa, puedes probar con los datos del INE, en principio son gratuitos:
http://www.ine.es/prodyser/callejero/callejero.htm
Esta URL no tiene contenido, supongo que desde el ministerio la han cambiado de ubicación sin redireccionar, como de costubre.
Saludos
que estupides no disque era unna tabla ilusos
Hola Carme,
En primer lugar muchas gracias por los enlaces a los Códigos Postales de España : Base de datos, como tu sabes nos vienen de perlas a todos.
Pero más arriba comentas:
«Sin embargo, en mi caso … me daba un error de “checksum†en el formato MySQL, en todos los intentos de importación.»
En realidad no es necesario realizar ninguna importación, solo copiar los archivos formato MySQL descomprimidos en el directorio oportuno, que en mi caso con Ubuntu 9.04 es /var/lib/mysql/nombre_BD. Si nos fijamos en el contenido del directorio que debe ser el mismo que el nombre de la base de datos que nos aparece en el phpmyadmin, vemos que hay están todas las tablas de nuestra BD. Si una vez copiados los archivos no aparecen las tablas directamente basta con reiniciar el mysql:
#sudo /etc/init.d/mysql restart
Si además queremos modificar las estructuras de las tablas necesitamos darle permisos de escritura a los archivos:
#sudo chmod 660 /var/lib/mysql/nombre_BD/t*
Y también cambiaremos el usuario y el grupo propietario de los mismos:
#sudo chown mysql:mysql /var/lib/mysql/nombre_BD/t*
De esta forma obtenemos el resultado deseado por todos que es disponer, ¡por fin!, de los códigos postales en nuestra BD.
Gracias nuevamente y saludos.
Endika.
Hola Endika,
Me alegra que te hayan sido útiles los enlaces y sobretodo ¡Muchas gracias! por tus valiosos apuntes.
denada
Genial, Currada, Guay y Util! Tambien gracias a Albin, aunque debajo ponga que no le des las gracias.
Me parece que aun le falta bastante a lo que hasa hecho para serte sincera. Me parece desorganizado, enmarañado e intendible
Ãnimos con tu proyecto. Si encuentras algo útil te agradeceremos que nos lo comentes, nos ayudará a todos.
Hola Carme:
Que mal me ha sabido leer el comentario de «Hasta las narices», como la mayorÃa de los que te han visitado y te visitarán, simplemente iba a tomar lo que has puesto a disposición de todos e irme sin dar las buenas tardes.
Al bajar la base de datos de códigos postales me di cuenta de que lo que tú llamabas municipios en realidad no lo son, como ya han indicado son núcleos de población o localidades (es como las llamo yo), asà que me he creado una tabla de localidades que habrá que enlazar con las de municipios (tomada del INE). Precisamente al darme cuenta del hecho venÃa a comentártelo y previamente he leÃdo los comentarios, como era lógico ya alguien te (nos) ha puesto sobreaviso.
Bueno que no querÃa que el último comentario de esta fantástica entrada de tu blog fuese algo tan absurdo. Enhorabuena por el curro y ¡Gracias!.
Carlos
En el Instituto Nacional de EstadÃstica tienes mucha información:
http://www.ine.es/prodyser/callejero/callejero.htm
…también puedes buscar en el Ministerio de EconomÃa y Hacienda por el Catastro…
Salu2
cual es el codigo postal de EEUU??????????????ayuda ur…………
Sabiendo el estado y el municipio, puedes buscarlo aquÃ: http://www.geopostcodes.com/usa_zip_codes
soy pemdegadas
Buenos dÃas Carme,
Genial post sobre poblaciones y provincias.
Apunte, la base de datos de Albin se encuentra en este enlace, rectificarlo:
http://codigos-postales.albin.es/
Gracias.
¡Muchas gracias, David!
Corregido 😉
Un currazo Carme!, para todos los que hacemos nuestro pinitos caseros esto es la bomba. Llevo ya una temporada leyendo, buscando, bajando cosas, sin obtener ningún resultado, y sinceramente es lo mejor que me ha pasado dar con tu post!
Muy agradecido! ; )
Me alegra leer esto. Choca esos cinco 😉
Información muy util
Se agradece
Hola Carme, hace 10 mnutos nos ha surgido la necesidad de conseguir los listados de provincias y poblaciones, te hemos encontrado y ya lo tenemos.
De verdad: !muchÃsimas gracias!
Muchas Gracias,
lo has currado bien, lo has expuesto mejor y nos has hecho la vida más fácil a más de uno.
A pesar de que Albin dice que «no hace falta dar las gracias» … es de bien nacido …. 😉
¡GRACIAS!
Muchas gracias a todos los que dejáis aquà vuestro feedback.
De veras se agradece.
Gracies Carme per la feina