Catálogo de países, estados y ciudades.

  • Por solio
  • Archivado en: Desarrollo
  • | jun 21,2014

Hace unas semanas me pidieron en el trabajo “unos combo box para que el usuario elija el país, estado y ciudad de su dirección particular cuando se registra en el sistema”. Mi primera idea fue buscar un catalogo con esos datos para colocarlo en la base de datos, y después de un rato, estando a punto de darme por vencido pues parece que esa información no la consigues gratis, encontré el sitio web GeoNames y su catalogo Free Postal Code Data, que contiene precisamente toda la información que buscaba y además tiene licencia Creative Commons así que la podemos usar sin problemas siempre y cuando le demos a GeoNames el crédito por publicar esos datos (Gracias).

La información se presenta de la siguiente manera:

Hay un archivo zip para cada país en el mundo (o al menos para la mayoría). El zip contiene un archivo readme y un archivo con los datos referentes a las distintas localidades de dicho país; justo lo que estamos buscando. El archivo está en formato utf-8 y delimitado por tabuladores con los siguientes campos:

  • Código ISO del país
  • Código Postal
  • Nombre del sitio
  • Nombre del estado
  • Nombre del estado (con una longitud menor)
  • Nombre de la provincia
  • Nombre de la provincia (con una longitud menor)
  • Nombre de la comunidad
  • Nombre de la comunidad (con una longitud menor)
  • Longitud
  • Latitud
  • Precisión

Ahora necesitamos transformar un poco esa presentación para poder usarla en una base de datos. Primero debemos diseñar nuestras tablas. Yo elegí el siguiente diseño. db-ciudades Es muy importante que sepan que todas las llaves primarias de las tablas son auto-incrementables. Para este ejemplo sólo usaré el archivo que corresponde a México. En primer logar debemos insertar los datos del país en la base de datos. Lo hacemos de la siguiente manera:

INSERT INTO PAISES (ISO_CODE, NOMBRE_PAIS) VALUES (‘MX’, ‘MEXICO’);

Para insertar los datos de los estados y ciudades hacemos uso de las herramientas incorporadas con linux para manipular archivos. Específicamente para los estados hice el siguiente script:

cat MX.txt | cut -f1,4 | sort | uniq | sed “s/\([A-Z]\{2\}\)\t\(.*\)/INSERT INTO ESTADOS (NOMBRE_ESTADO, ID_PAIS) SELECT ‘\2′, ID_PAIS FROM PAISES WHERE ISO_CODE = ‘\1′;/g” > CAT_ESTADOS.SQL

MX.txt es el archivo contenido en el zip con los datos de México, el script se debe usar cuando estemos en la carpeta en la que descomprimimos ese archivo, la salida es como la siguiente:

INSERT INTO ESTADOS (NOMBRE_ESTADO) SELECT ‘Aguascalientes’FROM PAISES WHERE ISO_CODE = ‘MX'; INSERT INTO ESTADOS (NOMBRE_ESTADO) SELECT ‘Baja California’FROM PAISES WHERE ISO_CODE = ‘MX'; INSERT INTO ESTADOS (NOMBRE_ESTADO) SELECT ‘Baja California Sur’FROM PAISES WHERE ISO_CODE = ‘MX';

Para insertar los datos de las ciudades hice el siguiente script:

cat MX.txt | cut -f1,3,4 | sort | uniq | sed “s/\([A-Z]\{2\}\)\t\([^\t]*\)\t\(.*\)/INSERT INTO CIUDADES (NOMBRE_CIUDAD, ID_PAIS, ID_ESTADO) SELECT ‘\2′, P.ID_PAIS, E.ID_ESTADO FROM ESTADO E JOIN PAIS P ON P.ID_PAIS = E.ID_PAIS WHERE E.NOMBRE_ESTADO=’\3′ AND P.ISO_CODE = ‘\1′;/g” > CAT_CIUDADES.SQL

la salida del script es como la siguiente:

INSERT INTO CIUDADES (NOMBRE_CIUDAD, ID_PAIS, ID_ESTADO) SELECT ‘Zurcua’, P.ID_PAIS, E.ID_ESTADO FROM ESTADO E JOIN PAIS P ON P.ID_PAIS = E.ID_PAIS WHERE E.NOMBRE_ESTADO=’Guerrero’ AND P.ISO_CODE = ‘MX'; INSERT INTO CIUDADES (NOMBRE_CIUDAD, ID_PAIS, ID_ESTADO) SELECT ‘Zuri’, P.ID_PAIS, E.ID_ESTADO FROM ESTADO E JOIN PAIS P ON P.ID_PAIS = E.ID_PAIS WHERE E.NOMBRE_ESTADO=’Chihuahua’ AND P.ISO_CODE = ‘MX'; INSERT INTO CIUDADES (NOMBRE_CIUDAD, ID_PAIS, ID_ESTADO) SELECT ‘Zurita’, P.ID_PAIS, E.ID_ESTADO FROM ESTADO E JOIN PAIS P ON P.ID_PAIS = E.ID_PAIS WHERE E.NOMBRE_ESTADO=’Veracruz Llave’ AND P.ISO_CODE = ‘MX'; INSERT INTO CIUDADES (NOMBRE_CIUDAD, ID_PAIS, ID_ESTADO) SELECT ‘Zurumbeneo’, P.ID_PAIS, E.ID_ESTADO FROM ESTADO E JOIN PAIS P ON P.ID_PAIS = E.ID_PAIS WHERE E.NOMBRE_ESTADO=’Michoacan De Ocampo’ AND P.ISO_CODE = ‘MX';

Listo, con los archivos CAT_ESTADOS.SQL Y CAT_CIUDADES.SQL podemos poblar nuestra base de datos que contendrá todos los municipios y estados de México. El mismo proceso se puede repetir para todos los países que se requiera o incluso hay un archivo que contiene la información de todos los países, les dejo a ustedes la aplicación de estas ideas para generar sus catálogos. Espero que este post les ayude. Saludos!


ComeSolo para Android

Hola estimados lectores, hace mucho que no me paso por acá :) , quiero contarles que hace unas semanas publiqué un juego en la Play Store. El juego en cuestión se llama ComeSolo y está basado en un clásico juego didáctico, pero no se dejen engañar es un verdadero reto para cualquier publico. Me gustaría que lo vieran y me dieran su opinión, éste juego es parte de un proyecto mucho más grande que estoy iniciando con unos amigos y que lleva por nombre DOLcode Studio (estamos trabajando en el sitio web), un caldo de cultivo para futuros proyectos de desarrollo de aplicaciones para smartphones y desarrollo web.

icon_comesolo

No se pierdan ComeSolo, en poco tiempo lo estaré actualizando gracias al feedback de todos ustedes y para ofrecerles un juego con más retos y sorpresas.

Saludos!


Instalar plugins de Firefox en Palemoon

Palemoon es un hermano gemelo del excelente navegador firefox (de hecho son igualitos, en apariencia solo se nota la diferencia por el logo del navegador y por que palemoon solo esta en ingles) optimizado para que funcione mejor en sistemas operativos Windows, el problema es que cuando lo instalas y deseas instalar un plugin de firefox nos aparece un mensaje como este:

pm0

El problema es que para los ojos del servidor de plugins de firefox estamos navegando usando Palemoon y los plugins son solo para Firefox, para resolver este problema tenemos dos alternativas:

1. Instalar plugins usando el buscador de plugins de palemoon.

Nos dirigimos a Tools>Add-ons, lo que nos lanzara una ventana en esa ventana nos dirigimos a Get Add-ons, nos aparecerá un buscador donde podemos buscar el complemento para firefox pero solo podremos instalar los complementos que aparezcan en esa ventana, si deseamos instalar por ejemplo, google gears, va a ser imposible por este método

pm2

Seguir leyendo »