The INEGI just published the results of the latest population survey along with updated shapefiles to reflect the changes to the Mexican population. At the end of this post you’ll find a script to download the updated manzanas (blocks), urban AGEBs, rural AGEBs, municipios, streets (ejes viales), states, services, and localities (localidades). It’s 7GB of the latest shapefiles available for free!
If you don’t know how to run the script or prefer to simply
download the data, you can subscribe to my newsletter (one email per post) and you’ll
get the shapefile download links directly in your inbox as a bonus.
The script creates a directory for each of the 32 states and Federal District where you’ll find all the shapefiles.
File | Description |
---|---|
entidad | Entidad (states) |
municipio | Municipio (counties) |
localidad_urbana_y_rural_amanzanada | Localidad Urbana y Rural Amanzanada |
localidad_rural_no_amanzanada | Localidad Rural |
ageb_urbana | Área Geoestadística Básica (AGEB) [census tracts] |
ageb_rural | Área Geoestadística Básica Rural (AGEB) [census tracts] |
manzana | Polígonos de Manzanas (census blocks) |
frentes_de_manazana | Frentes de Manzana (census blocks) |
eje_vial | Ejes de vialidad (streets) |
servicios_area | Servicios con Información complementaria de tipo Área (Áreas Verdes, Camellones, glorietas) |
servicios_linea | Servicios con Información complementaria de tipo Línea (Ríos, Ferrocarriles) |
servicios_puntual | Servicios con Información complementaria de tipo Puntual (Palacios Municipales o Ayudantías, Parques o Jardines) |
territorio_insular | Territorio Insular (insular territory) |
The shapefiles didn’t change much from 2010 to 2015, but there were a few changes. Here’s and example of new services in Cancún (new ones are yellow):
Like I said, there weren’t that many changes. Urban and rural AGEBs in Jalisco:
Urban AGEBs and roads in Baja California:
Manzanas (blocks) in Morelos:
Roads, localidades, rural and urban AGEBs in Acapulco:
Since the shapefiles are divided by state, you can use the bash code below to merge all the individual state shapefiles into one big national file.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #! /bin/bash
# The filename of the merged file
FILEOUT="municipio.shp"
# The names of the files to merge, you can change this to
# "*entidad.shp" or "*eje_vial.shp", etc
TYPE="*municipio.shp"
for i in $(find . -maxdepth 3 -name $TYPE)
do
if [ -f "$FILEOUT" ]
then
echo "adding state $i to $FILEOUT"
ogr2ogr -f 'ESRI Shapefile' -update -append $FILEOUT $i -nln $(basename -s .shp $FILEOUT)
else
echo "startin merge..."
echo "adding state $i to $FILEOUT"
ogr2ogr -f 'ESRI Shapefile' $FILEOUT $i
fi
done
|
All shapefiles come from the INEGI’s “Cartografía Geoestadística Urbana y Rural Amanzanada. Cierre de la Encuesta Intercensal 2015.” Here’s the code to download them:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | #! /bin/bash
# Author: Diego Valle-Jones
# Web: https://www.diegovalle.net
# LICENSE: Apache 2.0
# Purpose: Download shapefiles of manzanas (blocks), agebs (census areas), ejes
# viales (streets), interesting areas and a whole bunch of other stuff from
# the Encuesta Intercensal 2015
# As of now, this script has not been tested on Windows,
# only on Ubuntu and Macs. The script will create a directory
# called 'shps' where all the shapefiles are located, if something
# goes wrong when dowloading be sure to delete it and try again
#Exit on error
set -e
# Projection compatible with Google Maps
PROJECTION="+proj=longlat +ellps=WGS84 +no_defs +towgs84=0,0,0"
# wget command
CURL="curl"
#The way the INEGI download url starts
URL="http://internet.contenidos.inegi.org.mx/contenidos/productos//prod_serv/contenidos/espanol/bvinegi/productos/geografia/Cinter_2015/"
#File ends in
SUFFIX="_s.zip"
#States as numbers
#I have no idea why the INEGI used these numbers to represent the states
declare -a states_numbers=("702825209025" "702825209032" "702825209049" "702825209056" "702825209087" "702825209094" "702825209063" "702825209070" "702825209100" "702825209117" "702825209124" "702825209131" "702825209148" "702825209155" "702825209162" "702825209179" "702825209186" "702825209193" "702825209209" "702825209216" "702825209223" "702825209230" "702825209247" "702825209254" "702825209261" "702825209278" "702825209285" "702825209292" "702825209308" "702825209315" "702825209322" "702825209339")
#State names in the URL
declare -a state_names=("Aguascalientes" "Baja_California" "Baja_California_Sur" "Campeche" "Coahuila_de_Zaragoza" "Colima" "Chiapas" "Chihuahua" "Distrito_Federal" "Durango" "Guanajuato" "Guerrero" "Hidalgo" "Jalisco" "Mexico" "Michoacan_de_Ocampo" "Morelos" "Nayarit" "Nuevo_Leon" "Oaxaca" "Puebla" "Queretaro" "Quintana_Roo" "San_Luis_Potosi" "Sinaloa" "Sonora" "Tabasco" "Tamaulipas" "Tlaxcala" "Veracruz_de_Ignacio_de_la_Llave" "Yucatan" "Zacatecas" )
# The list of shapefiles of manzanas, agebs, etc
declare -a files=("ar.shp" "ent.shp" "lpr.shp" "m.shp" "fm.shp" "sia.shp" "sip.shp"
"a.shp" "e.shp" "l.shp" "mun.shp" "sil.shp" "territorioinsular.shp");
#The INEGI filenames are unreadable
declare -a files_nice=("ageb_rural.shp" "entidad.shp" "localidad_rural_no_amanzanada.shp" "manzana.shp" "frente_de_manzana.shp" "servicios_area.shp" "servicios_puntual.shp"
"ageb_urbana.shp" "eje_vial.shp" "localidad_urbana_y_rural_amanzanada.shp" "municipio.shp" "servicios_linea.shp" "territorio_insular.shp");
# State abbreviations
declare -a states=("ags" "bc" "bcs" "camp" "coah" "col" "chis" "chih"
"df" "dgo" "gto" "gro" "hgo" "jal" "mex" "mich" "mor" "nay" "nl" "oax"
"pue" "qro" "qroo" "slp" "sin" "son" "tab" "tamps" "tlax" "ver" "yuc"
"zac");
declare -a state_num=(`seq -s " " -w 1 32`);
# Use gdal to reproject, and then rename the shapefiles to include
# a user friendly abbreviation instead of a number
# First argument: directory of shapefiles shps/state_abbreviation
# Second argument: the state abbreviation
# Third argument: the shapefiles inside the zip file as an array
# Fourth argument: the state number
# TODO: convert the encoding from windows-1252 to utf-8
function reproject {
name=$3[@]
arr=("${!name}")
len=`expr ${#files[*]} - 1`
# Has to match he number of files in the array
for i in `seq 0 $len`
do
if [ -f $1/conjunto_de_datos/$4${files[$i]} ];
then
echo "Creating... " "$1"/$2_${files_nice[$i]}
ogr2ogr "$1"/$2_${files_nice[$i]} $1/conjunto_de_datos/$4${files[$i]} -t_srs "$PROJECTION"
else
echo "No territorio insular in " "$1"/$2_${files_nice[$i]}
fi
done
rm -rf "$1"/conjunto_de_datos
}
counter=0
for state_number in "${states_numbers[@]}"
do
FILENAME="$URL${state_names[$counter]}/$state_number$SUFFIX"
# download the files from the inegi server.
$CURL $FILENAME -o ${states[$counter]}.zip
# Extract the shapefiles from the zip file
mkdir -p shps/${states[$counter]}
unzip -o -L ${states[$counter]}.zip -d shps/${states[$counter]}
reproject shps/${states[$counter]} ${states[$counter]} files ${state_num[$counter]}
counter=`expr $counter + 1`
done
# Delete the downloaded zip files
rm -rf *.zip
# You could use the code below to merge all the states into one giant
# shapefile of Mexico. Change "*localidad_urbana.shp" to
# '*ageb_urbana.shp' or '*eje_vial.shp' or whatever
#
# FILEOUT="municipio.shp"
# TYPE="*municipio.shp"
# for i in $(find . -maxdepth 3 -name $TYPE)
# do
# if [ -f "$FILEOUT" ]
# then
# echo "adding state $i to $FILEOUT"
# ogr2ogr -f 'ESRI Shapefile' -update -append $FILEOUT $i -nln $(basename -s .shp $FILEOUT)
# else
# echo "startin merge..."
# echo "adding state $i to $FILEOUT"
# ogr2ogr -f 'ESRI Shapefile' $FILEOUT $i
# fi
# done
|
P.S. The frente de manzana shapefile for Sonora contains an error in its attribute table, hopefully the INEGI will fix it in a future version.
P.P.S. Unlike the 2010 census shapefiles, these ones don’t contain demographic variables. (the Encuesta Intercensal is valid for all municipios and the localidades with more than 50,000 people)