¿Qué es un Shapefile?
El Shapefile es el formato de datos geoespaciales vectoriales más extendido del mundo — y no es un único archivo. Introducido por ESRI en 1994 junto con ArcView GIS 2, un Shapefile es en realidad un conjunto de archivos que comparten el mismo nombre base pero con diferentes extensiones, y que deben mantenerse juntos para que los datos sean utilizables.
A pesar de su antigüedad y sus limitaciones bien documentadas, el Shapefile sigue siendo la lengua franca del intercambio de datos geoespaciales. Agencias gubernamentales, exportaciones de OpenStreetMap, archivos TIGER de la Oficina del Censo, agencias de recursos naturales y departamentos de transporte distribuyen datos en formato Shapefile. Entenderlo es inevitable para cualquier persona que trabaje con SIG.
El Conjunto de Archivos
Un Shapefile completo requiere como mínimo tres archivos:
| Extensión | Función | Formato |
|---|---|---|
.shp |
Almacenamiento de geometría — coordenadas de las características | Binario |
.dbf |
Tabla de atributos — filas de datos por cada característica | dBASE IV |
.shx |
Índice espacial — desplazamientos de bytes en el archivo .shp | Binario |
Y suele incluir:
| Extensión | Función |
|---|---|
.prj |
Sistema de Referencia de Coordenadas como cadena WKT |
.cpg |
Declaración de página de código para la codificación de texto del .dbf (p.ej. UTF-8) |
.qpj |
PRJ extendido de QGIS con metadatos SRC más completos |
.sbn / .sbx |
Índice espacial para rendimiento en ArcGIS |
.xml |
Metadatos ISO 19139 |
Si recibes un archivo .shp sin su compañero .dbf, tienes geometría pero no datos de atributos. Si falta el .prj, el software te pedirá que especifiques el sistema de coordenadas manualmente — una fuente común de errores de proyección.
Tipos de Geometría
El Shapefile admite exactamente un tipo de geometría por archivo:
| Código | Geometría | Ejemplo de uso |
|---|---|---|
| 1 | Punto | Ubicaciones de ciudades, puntos de muestreo, waypoints GPS |
| 3 | Polilínea (MultiLineString) | Carreteras, ríos, tuberías, curvas de nivel |
| 5 | Polígono (MultiPolygon) | Países, parcelas, zonas de uso del suelo |
| 8 | MultiPunto | Nubes de puntos, epicentros de terremotos |
| 11 | PuntoZ | Puntos 3D con elevación |
| 13 | PolilíneaZ | Rutas 3D — túneles, trayectorias de vuelo |
| 15 | PolígonoZ | Superficies 3D — huellas de edificios con altura |
| 21 | PuntoM | Puntos medidos — marcadores de jalones kilométricos |
Un único Shapefile no puede mezclar tipos de geometría — todas las carreteras deben ir en un archivo, todos los polígonos en otro. Esta es una limitación fundamental que confunde a los usuarios nuevos de SIG.
La Tabla de Atributos DBF
El archivo .dbf (dBASE IV) almacena datos de atributos para cada geometría:
- Máximo 10 caracteres por nombre de campo — la limitación más criticada del Shapefile
- Máximo 255 bytes por valor de campo de texto
- Máximo 2.147.483.647 registros (límite de tamaño de archivo de 2 GB)
- Sin soporte nativo para Unicode en la especificación original (el archivo
.cpglo aborda parcialmente) - Sin soporte para valores NULL en campos enteros/flotantes (almacenados como 0, lo que es ambiguo)
- Sin tipo fecha-hora — solo fecha (AAAAMMDD)
Estas restricciones hacen que atributos como "NombreMunicipio" se conviertan en "NMBMNCPIO" y "DensidadPoblacionHabitantesKm2" en "DENPOBKM2" — abreviaturas completamente opacas que requieren un diccionario de datos separado para interpretarse.
El Archivo de Proyección .prj
El archivo de proyección contiene una cadena WKT (Well-Known Text) que describe el Sistema de Referencia de Coordenadas:
GEOGCS["GCS_WGS_1984",
DATUM["D_WGS_1984",
SPHEROID["WGS_1984",6378137.0,298.257223563]],
PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]]
Sin este archivo, el software debe adivinar el SRC — a menudo usando WGS84 por defecto. Cuando los datos reales están en un sistema proyectado (UTM, ETRS89), las características aparecerán en la ubicación incorrecta o con la escala equivocada. Distribuye siempre el archivo .prj junto con tu Shapefile.
Lectura de Shapefiles en Python
GeoPandas (la biblioteca estándar para SIG vectorial en Python):
import geopandas as gpd
# Leer un Shapefile
gdf = gpd.read_file("paises.shp")
print(gdf.crs) # sistema de referencia de coordenadas
print(gdf.dtypes) # tipos de columna
print(gdf.head()) # primeras filas incluyendo geometría
# Consulta espacial — seleccionar características que intersectan un bounding box
from shapely.geometry import box
bbox = box(-10, 35, 30, 70) # aproximadamente Europa
europa = gdf[gdf.intersects(bbox)]
# Reproyectar a Web Mercator para mapas en teselas
gdf_mercator = gdf.to_crs(epsg=3857)
# Escribir de nuevo como Shapefile
gdf_mercator.to_file("paises_mercator.shp")
# Escribir como GeoJSON
gdf_mercator.to_file("paises.geojson", driver="GeoJSON")
Conversión de Shapefiles con ogr2ogr
# Shapefile → GeoJSON
ogr2ogr -f GeoJSON paises.geojson paises.shp
# Shapefile → GeoPackage (reemplazo moderno)
ogr2ogr -f GPKG paises.gpkg paises.shp
# Reproyectar al vuelo (de EPSG:4326 a EPSG:3857)
ogr2ogr -f "ESRI Shapefile" paises_mercator.shp paises.shp \
-s_srs EPSG:4326 -t_srs EPSG:3857
# Filtrar por atributo
ogr2ogr -f GeoJSON europa.geojson paises.shp -where "CONTINENTE='Europa'"
# Recortar a bounding box
ogr2ogr -f "ESRI Shapefile" recortado.shp entrada.shp \
-clipsrc -10 35 30 70
Por Qué Migrar a GeoPackage
GeoPackage (.gpkg) es el reemplazo estandarizado por OGC basado en SQLite:
| Característica | Shapefile | GeoPackage |
|---|---|---|
| Archivo único | No (conjunto) | Sí (un .gpkg) |
| Longitud máx. del campo | 10 caracteres | 1000+ caracteres |
| Tamaño máximo de archivo | 2 GB | 140 TB |
| Múltiples capas | Una por conjunto de archivos | Múltiples en un archivo |
| Soporte Unicode | Parcial (.cpg) | UTF-8 completo |
| Tipos de geometría | Uno por archivo | Mixtos por capa |
| Valores NULL | Ambiguos (0) | NULL real |
| Soporte de fecha-hora | Solo fecha | Fecha-hora completa |
| Soporte raster | No | Sí (teselas) |
QGIS, ArcGIS Pro, GDAL y PostGIS admiten GeoPackage de forma nativa. La Agencia Nacional de Inteligencia Geoespacial de EE. UU. (NGA) estableció GeoPackage como el formato preferido para el intercambio de datos geoespaciales en 2021. Para nuevos proyectos, GeoPackage es casi siempre la mejor opción.
Limitaciones de Tamaño en la Práctica
El límite de 2 GB se aplica por separado a los archivos .shp y .dbf. Un Shapefile con geometrías de polígono complejas (líneas de costa, límites de cuencas hidrográficas) puede agotar el límite de 2 GB del .shp sin tener muchas características. Las exportaciones de planeta completo de OpenStreetMap superan rutinariamente este límite y deben dividirse por región geográfica o convertirse a GeoPackage o PostGIS para un uso práctico.
El Shapefile tampoco puede representar topología — los límites compartidos entre polígonos adyacentes se almacenan como secuencias de coordenadas duplicadas, lo que lleva a costuras y huecos después de la edición independiente de características adyacentes. PostGIS aplica topología explícitamente; el Shapefile nunca ha podido ni podrá hacerlo.
Conversiones relacionadas
Conversiones frecuentes del catálogo: