¿Qué es un shapefile y qué archivos necesita?
Un shapefile es un formato vectorial de SIG creado por Esri a principios de los años noventa. Es un grupo de archivos con un mismo nombre: .shp contiene la geometría, .shx un índice y .dbf los atributos. Un archivo .prj indica el sistema de coordenadas y un .cpg la codificación del texto. FileReshape puede mostrar un shapefile o convertirlo a GeoJSON, KML o GeoPackage en su navegador, sin subirlo.
De dónde viene el shapefile
Esri presentó el shapefile a principios de los años noventa con su programa de escritorio ArcView, como una forma sencilla de guardar puntos, líneas y polígonos junto con una tabla de atributos. En 1998, Esri publicó el ESRI Shapefile Technical Description, un documento técnico que describe la estructura de los archivos de geometría y de índice. Como la descripción era pública y el formato era sencillo, otros programas pudieron leerlo y escribirlo sin licencia, y el shapefile se convirtió en el formato de intercambio común de los SIG de escritorio.
Esa sigue siendo hoy su principal ventaja. Los portales de datos abiertos de las administraciones, los topógrafos, las oficinas de urbanismo y las empresas de servicios publican shapefiles porque casi todos los programas SIG, desde QGIS y ArcGIS Pro hasta GDAL, los cargadores de PostGIS y muchos programas de CAD, pueden leerlos. El formato también acusa su edad, y los límites que se describen abajo son la razón de que existan formatos más nuevos.
Los archivos que forman un shapefile
Un shapefile es un conjunto de archivos que comparten un nombre base, como parcels.shp, parcels.shx y parcels.dbf. Tres de ellos son obligatorios. El archivo .shp guarda la geometría de cada entidad como una lista de coordenadas. El archivo .shx es un índice con la posición de cada registro en el .shp, para que los programas puedan saltar directamente a la entidad número 5.000 en lugar de leer todo lo anterior. El archivo .dbf es la tabla de atributos en formato dBASE, con una fila por entidad en el mismo orden que las formas. El vínculo entre una forma y su fila no es más que ese orden.
Los demás archivos son opcionales. El archivo .prj contiene el sistema de coordenadas como una línea de texto WKT (well-known text), en el dialecto que usa Esri. El archivo .cpg es un pequeño archivo de texto que indica la codificación de caracteres del .dbf, como UTF-8 o 1252. Los archivos .sbn y .sbx son un índice espacial que usa el software de Esri, y .qix es otro índice espacial que escriben GDAL y MapServer; ambos solo aceleran el dibujo y la búsqueda en archivos grandes. El archivo .shp.xml lleva metadatos como una descripción, el autor y la fecha. También puede encontrar archivos .atx para índices de atributos. Si falta un archivo opcional, los programas pueden seguir leyendo los datos, pero sin .prj la ubicación es una suposición, y sin .cpg los caracteres especiales pueden salir mal.
Los nombres base deben coincidir exactamente, incluidas las mayúsculas y minúsculas en los sistemas que las distinguen. Cambiar el nombre solo de roads.shp a streets.shp rompe el conjunto. Cambie el nombre, copie y envíe todas las partes juntas; la forma más sencilla de mantenerlas juntas es un .zip con todo el conjunto.
Un tipo de geometría por shapefile
Cada shapefile declara un tipo de forma en su cabecera, y todas las entidades deben ser de ese tipo o estar vacías. Los tipos principales son Point, MultiPoint, PolyLine (líneas) y Polygon, cada uno en una versión 2D simple, una versión con valores Z para la altura y una versión con valores M para medidas, como la distancia a lo largo de una ruta. Un tipo MultiPatch, poco usado, describe superficies 3D. Un archivo no puede mezclar puntos con polígonos, así que un conjunto de datos de edificios y sus entradas tiene que guardarse en dos shapefiles.
Los polígonos se guardan como anillos. En la descripción publicada, el contorno exterior va en el sentido de las agujas del reloj y los huecos en sentido contrario, y un polígono con varias partes separadas, como un país con islas, es una sola entidad con varios anillos. El formato no guarda topología: dos parcelas vecinas guardan cada una por separado su límite común, y nada en el archivo garantiza que las líneas coincidan.
Límites de la tabla de atributos .dbf
Muchas de las peculiaridades del shapefile vienen del formato de tabla dBASE, que data de los años ochenta. Los nombres de campo pueden tener como máximo 10 caracteres, así que Population_2020 tiene que convertirse en algo como POP_2020, y algunos programas además los pasan a mayúsculas. Los campos de texto admiten como máximo 254 caracteres. El número de campos también está limitado; la cifra que suele darse es 255.
Los tipos de datos son pocos. El texto se guarda como campos de caracteres de ancho fijo, los números como campos numéricos o de coma flotante con un ancho y un número de decimales fijos, los valores verdadero y falso como campos lógicos, y las fechas como campos de fecha con la forma año, mes, día. No hay hora del día ni zona horaria, así que una marca de tiempo tiene que guardarse como texto o repartirse en varios campos. Tampoco hay un valor nulo propiamente dicho: un número vacío suele escribirse como espacios en blanco o como cero, según el programa, y algunos lectores muestran entonces 0 donde el valor era en realidad desconocido. No hay listas, valores anidados ni campos binarios.
Límites de tamaño de archivo
Las cabeceras de los archivos .shp y .shx guardan desplazamientos y longitudes como números de 32 bits, de donde viene la regla habitual de que cada parte de un shapefile, en particular el .shp y el .dbf, debe quedarse por debajo de 2 GB. Algunos programas, entre ellos GDAL, pueden leer y escribir archivos de hasta unos 4 GB si se les indica, pero otros programas pueden rechazarlos. Un conjunto de datos más grande tiene que dividirse en varios shapefiles o guardarse en otro formato. En la práctica, el .dbf suele llegar antes al límite, porque cada campo de texto ocupa todo su ancho en cada fila, aunque la mayoría de los valores sean cortos.
La codificación del texto y el archivo .cpg
El formato .dbf es anterior a Unicode. El texto se guarda como bytes, y la cabecera tiene un byte, a menudo llamado identificador del controlador de idioma (language driver ID), que puede indicar una página de códigos como Windows-1252 o una página de códigos de DOS. Muchos programas lo dejan vacío o lo rellenan mal. El archivo .cpg se añadió más tarde para indicar la codificación con claridad, y el software moderno escribe UTF-8 junto con un .cpg que lo dice.
Cuando ni el .cpg ni el byte de la cabecera son correctos, el programa tiene que adivinar, y nombres como Malmö, Ærø o São Paulo se convierten en cadenas de símbolos extraños. Si lo ve, los datos suelen estar intactos. Indique a su programa SIG qué codificación usar al abrir la capa, por ejemplo en las propiedades de la capa en QGIS, o añada un archivo .cpg con el nombre correcto. Cuando escriba shapefiles usted mismo, elija UTF-8 y mantenga el .cpg junto a las demás partes.
Los sistemas de coordenadas y el archivo .prj
El archivo .shp guarda números sin más, sin decir qué significan. Pueden ser longitud y latitud en grados, metros en una zona UTM o pies en un sistema State Plane de Estados Unidos. Solo el archivo .prj indica a los programas qué sistema de referencia de coordenadas se aplica, y lo hace como texto WKT y no como código EPSG. La mayoría de los programas pueden asociar las definiciones habituales a un código EPSG, pero los archivos .prj poco comunes o editados a mano a veces dan lugar a una interpretación ligeramente distinta.
Sin un .prj, un programa puede suponer WGS84 o preguntarle. Los valores entre -180 y 180 y entre -90 y 90 probablemente son grados; los valores grandes, de cientos de miles o millones, son metros o pies proyectados. Asignar un sistema de coordenadas solo etiqueta los datos. Reproyectar recalcula de verdad las coordenadas, y no deben confundirse ambas cosas.
Alternativas al shapefile
GeoPackage es un estándar abierto del Open Geospatial Consortium, basado en una base de datos SQLite en un solo archivo .gpkg. Admite varias capas, nombres de campo largos, fechas y horas propiamente dichas, valores nulos y conjuntos de datos grandes, y es el formato predeterminado de QGIS. Es una buena opción para entregar un proyecto completo. GeoJSON es un formato JSON de texto plano, normalizado como RFC 7946. Es fácil de leer en un editor de texto y es el formato natural para mapas web y API, pero la norma espera coordenadas WGS84 y los archivos se hacen grandes. FlatGeobuf es un formato binario más reciente, de un solo archivo y con un índice espacial integrado, diseñado para leerse rápido y transmitirse por la web; su compatibilidad crece, pero todavía no es tan universal como la de los demás.
Ninguno de ellos es el adecuado para todos los casos. El shapefile sigue siendo la opción más segura cuando no sabe qué programa usa el destinatario, o cuando un sistema o un cliente lo pide expresamente. Cuando sus límites estorban, como los nombres de campo truncados, las marcas de tiempo perdidas o los archivos cercanos a 2 GB, convertir a GeoPackage suele ser el paso menos doloroso.
Trabajar con shapefiles en su navegador con FileReshape
Las herramientas de shapefile de FileReshape leen las partes con GDAL compilado para la web, así que los archivos se procesan en su propio dispositivo y no se suben. El Visor de shapefile muestra las entidades en un mapa y la tabla de atributos, con el tipo de cada campo. Los convertidores Convertir shapefile a GeoJSON, Convertir shapefile a KML y Convertir shapefile a GeoPackage escriben los mismos datos en esos formatos; GeoJSON y KML se escriben en WGS84, y el GeoPackage conserva el sistema de coordenadas. Convertir KML a shapefile hace el camino inverso y escribe un .zip con archivos .shp, .shx, .dbf, .prj y .cpg, un shapefile por tipo de geometría. Puede soltar un .zip o seleccionar juntas las partes, y ninguna conversión puede restaurar los nombres ya acortados a 10 caracteres.
Preguntas frecuentes
¿Qué archivos de un shapefile son obligatorios?
Los archivos .shp, .shx y .dbf son obligatorios. Los archivos .prj y .cpg son opcionales pero recomendables, y .sbn, .sbx, .qix y .shp.xml son índices y metadatos que se pueden omitir.
¿Puede un shapefile contener a la vez puntos, líneas y polígonos?
No. Cada shapefile tiene un único tipo de forma en su cabecera. Los datos mezclados tienen que dividirse en un shapefile por tipo, o guardarse en un formato como GeoPackage o GeoJSON.
¿Por qué mi shapefile muestra caracteres extraños en lugar de letras acentuadas?
El programa leyó el .dbf con la codificación equivocada. Elija la codificación correcta al abrir la capa, o añada un archivo .cpg con el nombre correcto, como UTF-8 o 1252.
¿Puede un shapefile guardar la fecha y la hora?
Puede guardar una fecha, pero no la hora del día. Las marcas de tiempo suelen guardarse en campos de texto, o los datos se pasan a GeoPackage, que tiene un tipo de fecha y hora propiamente dicho.
¿Es el shapefile un formato abierto?
Sus archivos de geometría y de índice están documentados en una descripción técnica que Esri publicó en 1998, y la tabla de atributos usa el conocido formato dBASE, así que muchos programas gratuitos y comerciales leen y escriben shapefiles.