Base de Datos del INEGI en MySQL, PostgreSQL y SQLite
El INEGI cuenta con “Catálogo Único de Claves de Áreas Geoestadísticas Estatales, Municipales y Localidades” de la república mexicana que actualiza cada mes. El archivo fuente se encuentra en varios formatos y se puede descargar desde la sección Catálogos Predefinidos y consultar el documento de descripción de los campos.
En este proyecto, extraigo toda la información de un archivo CSV versión UTF-8 y lo convierto a bases de datos MySQL, PostgreSQL y SQLite.
El archivo contiene 3 tablas: estados, municipios y localidades. El diseño de la base de datos se muestra en la siguiente imagen:
He importado todos los campos que vienen en la base de datos del INEGI, se pueden consultar en la sección "Diccionario de Datos". Los campos importados están marcados en negrita.
La versión actual es: 2025.11
La fecha de corte corresponde a NOV 2025. Este dato es importante porque garantiza que el catálogo está actualizado a noviembre de 2025.
Conteo de registros:
- 32 Estados
- 2,469 Municipios
- 300,690 Localidades
El peso de la base de datos es de: 37.3 MB
Los campos latitud y longitud vienen originalmente en un sistema de coordenadas DMS (Grados/Minutos/Segundos) . Actualmente el archivo también cuenta con dos campos con un sistema de coordenadas DD (Grados Decimales) en los campos lat y lng para ser ocupados en sistemas de mapas tipo Google Maps
Archivos de descarga por motor y formato:
| Formato | MySQL | PostgreSQL | SQLite |
|---|---|---|---|
| sql.gz | ![]() |
![]() |
![]() |
| db | — | — | ![]() |
mysql/,postgresql/,sqlite/: scripts SQL (.sql) y comprimidos (.sql.gz) listos para importar.sqlite/: incluye ademásageeml.dbgenerado automáticamente.importer/: generador de SQL y base SQLite a partir del CSV del INEGI.ageeml-odata-service/: servicio OData para consumir el catálogo (Estados, Municipios y Localidades).docker-compose.yml: entorno de ejemplo con MySQL, PostgreSQL y el servicio OData.
Los datos están actualizados a noviembre de 2025. Este punto es crítico para asegurar que las claves y catálogos reflejan el último corte del INEGI.
Puedes ejecutar el importador para sobrescribir los .sql y .sql.gz de MySQL, PostgreSQL y SQLite. En el caso de SQLite, también actualiza sqlite/ageeml.db. Esto descarga el archivo oficial del INEGI AGEEML y garantiza que los datos quedan actualizados.
DOTNET_ENVIRONMENT=Development dotnet run --project importerEl servicio ageeml-odata-service expone un API OData con las entidades Estados, Municipios y Localidades. Sirve una base de datos lista para usarse y permite consultas con filtros y proyecciones.
Ejemplos de consultas:
/api/v1/Estados?$select=id,nombre/api/v1/Municipios?$filter=estadoId eq 1/api/v1/Localidades?$filter=poblacion gt 1000000&$count=true/api/v1/Localidades?$top=10&$skip=20/api/v1/Localidades?$expand=municipio($select=id,nombre)
Puedes iniciar MySQL y PostgreSQL como ejemplo, además del servicio OData:
docker compose upSi no quieres construir la imagen localmente, puedes usar la imagen pública:
micromatt27170/ageeml-odata-service
Descripción de los campos de cada tabla del proyecto
| Columna | tipo | Comentarios |
|---|---|---|
id |
int(11) | 🔑 |
clave |
varchar(2) | Cve_Ent - Clave de la entidad |
nombre |
varchar(40) | Nom_Ent - Nombre de la entidad |
abrev |
varchar(10) | Nom_Abr - Nombre abreviado de la entidad |
activo |
tinyint(1) |
| Columna | tipo | Comentarios |
|---|---|---|
id |
int(11) | 🔑 |
estado_id |
int(11) | Relación: estados -> id |
clave |
varchar(3) | Cve_Mun - Clave del municipio |
nombre |
varchar(100) | Nom_Mun - Nombre del municipio |
activo |
tinyint(1) |
| Columna | tipo | Comentarios |
|---|---|---|
id |
int(11) | 🔑 |
municipio_id |
int(11) | Relación: municipios -> id |
clave |
varchar(4) | Cve_Loc – Clave de la localidad |
nombre |
varchar(100) | Nom_Loc - Nombre de la localidad |
mapa |
int(10) | Mapa - Identificador del INEGI |
ambito |
varchar(1) | Ámbito - Clasificación |
latitud |
varchar(15) | Latitud - Latitud en formato DMS |
longitud |
varchar(15) | Longitud - Longitud en formato DMS |
lat |
decimal(10,7) | Lat_Decimal Latitud en formato DD |
lng |
decimal(10,7) | Lon_Decimal Longitud en formato DD |
altitud |
varchar(15) | Altitud - Altitud |
carta |
varchar(10) | Cve_Carta - Clave de carta topográfica |
poblacion |
int(11) | Pob_Total - Población Total |
masculino |
int(11) | Pob_Masculina - Población Masculina |
femenino |
int(11) | Pob_Femenina - Población Femenina |
viviendas |
int(11) | Total De Viviendas Habitadas - Total De Viviendas Habitadas |
activo |
tinyint(1) |
Este repositorio es un fork de https://github.com/developarts/AGEEML. El objetivo es complementar el proyecto con más proveedores de bases de datos más allá de MySQL, además de servicios para importar y actualizar las bases desde INEGI y un servicio out-of-the-box para microservicios (OData/WebAPI).
[2025-12-28]Se agregó soporte a bases de datos para PostgreSQL y SQLite, se creó un servicio para importar las bases desde el INEGI y un microservicio WebAPI con .NET.[2020-11-20]Se actualizó la información del INEGI a OCT2020.[2020-11-19]El nombre del proyecto de renombró a AGEEML.[2018-10-18]Se actualizó la información del INEGI a SEP2018.[2018-10-11]Se creó el proyecto en GitHub para la distribución de los releases.[2016-02-01]Se actualizó la información del INEGI a ENE2016.

