MySQL: Tablas de Entidades y Municipios de México (CSV a SQL con PHP)

Requisitos: Tener Apache o algún servidor web donde correr PHP

Complejidad: Sencillo

Objetivos:

1) Como obtener tablas de Entidades y Municipios para México, tal vez a alguien le ha pasado que para algún proyecto necesite crear algún formulario para registrar usuarios y le gustaría guardar el lugar de origen. También platicaremos donde se puede obtener una tabla de todos los países del mundo y de códigos postales para México.

2) Como convertir archivos CSV (http://es.wikipedia.org/wiki/CSV) a .SQL a través de PHP y la función fgetcsv (http://php.net/manual/es/function.fgetcsv.php).

Desarrollo:

Bueno, tal vez alguna vez nos habrá tocado desarrollar un proyecto donde necesitemos registrar perfiles de usuario. Si eres de México tal vez alguna vez necesitabas las tablas de estados y municipios o incluso tal vez una tabla de todos los países del mundo!.

Bueno, si necesitabas la tabla para todos los países del mundo, alguien ya hizo el trabajo por nosotros, lo tiene en varios formatos e idiomas, la puedes obtener en el siguiente enlace: http://dev.umpirsky.com/list-of-all-countries-in-all-languages-and-all-data-formats/

También la puedes descargar de aquí (un poco modificada para tener todos los campos en español): http://www.mediafire.com/view/mw765evyag7ktm0/country.mysql.sql

Ok, pero para obtener estados y municipios de México tendremos la misma suerte?. Buscando en Google sobre donde encontrar estas tablas, vi en algún foro que mencionaban como recurso la página del INEGI: http://www.inegi.org.mx/geo/contenidos/geoestadistica/catalogoclaves.aspx

Si entramos podemos toparnos con un mapa interactivo como el de la imágen:

inegi1

El procedimiento que seguí no fue tan complicado, solo seleccioné del menú>  “Seleccione el nivel de desagregación”, la opción > “Área Geoestadística Estatal (AGEE)” para obtener las entidades.

inegi2Finalmente solo damos click en el botón “Consultar” ubicado en la parte inferior:

inegi3Al hacerlo nos lleva a una nueva pantalla con la consulta solicitada, en este caso las entidades. Si hubieramos seleccionado “Área Geoestadística Municipal (AGEM)”, nos regresa un listado de todos los municipios del país.

Bueno, en esta nueva pantalla hay un botón de descargar en la parte superior:

inegi4Al dar click en “Descargar”, nos lleva a una nueva ventana, en Tipo de archivo seleccionamos la opción “Texto separado por comas(CSV)”, desactivamos la opción “Comprimir archivo en formato ZIP” y damos click en el botón Procesar y posteriormente en Descargar.

Ok, asi podemos obtener en CSV las tablas de Entidades y Municipios de México gracias al INEGI (recomiendo dar una visita a su página por que me fijé que cuentan con Webservices y recursos muy interesantes).

Los archivos CSV los subí a mediafire, los puedes descargar de los siguientes enlaces:

– Estado CSVs: http://www.mediafire.com/view/87397fu5xkvlw4x/ESTADOS.CSV

– Municipios CSV: http://www.mediafire.com/view/7momdmm7h9fagur/EMUNICIPIOS.CSV

Sin embargo, podemos convertir el CSV a SQL si lo parseamos con PHP (o de hecho, con el lenguaje de preferencia) para no tener que pasar los datos a mano y tener un script siempre disponible.

Para esto comparto el siguiente código en PHP, a mi me resultó útil, traté de comentarlo lo suficiente para si a alguien le interesa como convertir un CSV a SQL a lo mejor le podría ayudar: http://www.mediafire.com/view/zct20zcx4t0x33b/csvparse.php

Finalmente, mis tablas quedaron de la siguiente manera:

CREATE TABLE IF NOT EXISTS pais(
id VARCHAR(2) NOT NULL PRIMARY KEY,
nombre VARCHAR(64) NOT NULL,
fechaModificacion TIMESTAMP NOT NULL
) ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS entidad(
cve_ent VARCHAR(2) NOT NULL UNIQUE PRIMARY KEY,
nom_ent VARCHAR(50) NOT NULL,
nom_abr VARCHAR(10) NOT NULL,
fechaModificacion TIMESTAMP NOT NULL,
id_pais VARCHAR(2) NOT NULL,
FOREIGN KEY(id_pais) REFERENCES pais(id)
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS municipio(
cve_mun VARCHAR(3) NOT NULL,
nom_mun VARCHAR(50) NOT NULL,
cve_cab VARCHAR(4) NOT NULL,
nom_cab VARCHAR(50) NOT NULL,
fechaModificacion TIMESTAMP NOT NULL,
cve_ent VARCHAR(2) NOT NULL,
FOREIGN KEY(cve_ent) REFERENCES entidad(cve_ent),
UNIQUE(cve_mun, cve_ent),
PRIMARY KEY(cve_mun, cve_ent)
) ENGINE=InnoDB;

Y para la codificación, la Base de Datos la podemos crear:


CREATE DATABASE IF NOT EXISTS geobase DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

Puedes descargar el script también del siguiente enlace: http://www.mediafire.com/view/or3e3kfh8lzw82e/bd_estructura.sql

Finalmente, si no deseas seguir los pasos anteriores y solo necesitas los archivos para MySQL con los datos de las Entidades y Municipios de México los puedes descargar de:

– Entidades SQL: http://www.mediafire.com/view/b45c0far09ubbop/entidad.sql

– Municipios SQL: http://www.mediafire.com/view/t92rx57vl8xkzin/municipio.sql

Pienso que es útil saber que contamos con estos recursos para nuestros proyectos. Por decir, un recurso que podríamos necesitar es la base de datos de Códigos Postales de México, la cual podemos descargar de la página de SEPOMEX: http://www.sepomex.gob.mx/lservicios/servicios/CodigoPostal_Exportar.aspx en formatos XML, EXCEL o TXT.

Si estamos trabajando con XML podemos utilizar la función de PHP simplexml_load_file (http://php.net/manual/es/function.simplexml-load-file.php).

En la página del INEGI como mencioné, hay muchos recursos que valen la pena revisarse, especialmente si alguno de nuestros proyectos requiere datos geográficos específicos.

A lo mejor puede parecer un post sencillo pero me pareció útil tener referencias para estas tablas, es probable que en algún otro momento las vuelva a necesitar y creo que si Mediafire no las borra las podré bajar de este post en alguna situación de emergencia 🙂

 

Anuncios

Publicado el mayo 28, 2015 en How-To, MySQL, PHP, Web y etiquetado en , , , , , , , , , . Guarda el enlace permanente. 8 comentarios.

  1. muy bien me ahorras la chamba

  2. quiero hacer una busqueda por codigo postal amigo , como puedo obtener esos datos

  3. Nathalie Acevedo

    Excelente amigo, muchas gracias!

  4. Gabriel Armendariz Villarreal

    Muchas gracias. Siempre se agradece este tipo de ayudas

    Saludos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: