Por qué convertir un shapefile a GeoJSON
Si alguna vez te has preguntado "¿cómo convierto un shapefile a GeoJSON?", la respuesta corta es que un shapefile no es en absoluto un solo archivo. Lo que la mayoría llama "un shapefile" es en realidad un conjunto de al menos tres archivos separados que comparten el mismo nombre y distintas extensiones: `.shp` para la geometría, `.shx` para un índice posicional dentro de esa geometría, y `.dbf` para la tabla de atributos. Una exportación de shapefile real a menudo añade un archivo `.prj` para el sistema de referencia de coordenadas y un archivo `.cpg` para la codificación de texto. Si abres solo el archivo `.shp` en un editor de texto obtienes ruido binario; si abres solo el `.dbf` obtienes atributos sin formas a las que asociarlos.
GeoJSON, en cambio, es un único archivo JSON autocontenido, definido por una sola especificación (RFC 7946), y fija el sistema de referencia de coordenadas en longitud/latitud WGS84. Ese diseño de un solo archivo y un solo SRC es exactamente la razón por la que tantos mapas web, bibliotecas de JavaScript y APIs GIS modernas esperan GeoJSON como entrada en lugar de un paquete de shapefile. Convertir shapefiles a geojson suele ser el primer paso antes de poder cargar un conjunto de datos en Leaflet, Mapbox GL, una vista previa de mapa renderizada por GitHub, o casi cualquier otra herramienta de mapas basada en navegador.
Esta herramienta existe para hacer que ese primer paso sea indoloro. En lugar de instalar GDAL, abrir software GIS de escritorio, o escribir un script de Python solo para convertir un archivo, comprimes tus `.shp` / `.shx` / `.dbf` (y `.prj`, si lo tienes) juntos, sueltas el zip en tu navegador, y obtienes un archivo `.geojson` funcional en pocos clics. La conversión se ejecuta completamente del lado del cliente, así que la herramienta funciona igual para diez entidades que para cien mil, y tus datos nunca se envían a ningún sitio.
El formato Shapefile: historia y estructura
El formato shapefile fue publicado por ESRI (Environmental Systems Research Institute) en julio de 1998 en un documento llamado "ESRI Shapefile Technical Description". A pesar de tener casi tres décadas y carecer de soporte nativo para nombres de campos de atributos de más de 10 caracteres, múltiples capas de geometría por archivo, o Unicode por defecto, sigue siendo uno de los formatos GIS vectoriales más usados en conjuntos de datos gubernamentales, de servicios públicos y académicos en todo el mundo, en gran parte por lo temprana y exhaustivamente que fue adoptado antes de que existieran formatos más modernos.
El archivo .shp comienza con una cabecera fija de 100 bytes: los bytes 0 a 3 son un "código de archivo" big-endian que siempre es el entero 9994, los bytes 24 a 27 dan la longitud del archivo en palabras de 16 bits (big-endian), los bytes 28 a 31 dan la versión del shapefile (little-endian, siempre 1000), los bytes 32 a 35 dan el tipo de forma como un código entero (1 = Punto, 3 = PolyLine, 5 = Polígono, 8 = MultiPunto, con variantes +10 o +20 para valores de coordenadas Z y M), y los bytes 36 a 67 dan el cuadro delimitador de todo el archivo como cuatro doubles little-endian: Xmin, Ymin, Xmax, Ymax. Después de esa cabecera, el archivo es una secuencia de registros de longitud variable, cada uno con su propia pequeña cabecera que indica el número de registro y la longitud del contenido antes de los propios bytes de geometría.
El archivo .dbf es una tabla dBase III / dBase IV: un bloque de cabecera que describe cada campo (nombre, tipo, longitud en bytes, número de decimales), seguido de un registro de ancho fijo por fila. El orden de las filas en el .dbf coincide exactamente con el orden de los registros en el archivo .shp, posición por posición, ya que no hay una clave externa explícita entre ellos. El archivo .shx existe puramente como atajo: almacena un par (offset, longitud) de 8 bytes por registro para que un lector pueda saltar directamente a cualquier forma sin escanear todos los registros anteriores, lo cual importa mucho más en un shapefile de 500 MB que en uno pequeño.
Una particularidad estructural repercute directamente en la lógica de conversión: un registro de polígono de shapefile no tiene concepto de "este anillo es un agujero en aquel anillo". Es simplemente una lista plana de anillos cerrados. La convención (según la especificación) es que los anillos con orientación horaria son límites exteriores y los anillos con orientación antihoraria son agujeros, y se espera que un lector determine por sí mismo qué agujero pertenece a qué anillo exterior. Los polígonos de GeoJSON siguen la misma convención de orientación (RFC 7946 la recomienda, aunque no la exige estrictamente), pero un convertidor de shapefile a GeoJSON igualmente tiene que recorrer cada anillo, clasificarlo y reconstruir el anidamiento antes de poder emitir una geometría Polygon o MultiPolygon válida.
Guía paso a paso: cómo convertir shp a geojson

Comprime tus archivos `.shp`, `.shx` y `.dbf` juntos (incluye también el `.prj`, si lo tienes), luego elige ese archivo zip en el convertidor, o haz clic en "Try sample" para cargar un pequeño shapefile de ejemplo ya preparado. El shapefile se analiza de inmediato y se previsualiza en el mapa como una capa gris "Source shapefile".

El panel Layers lista el shapefile de origen con su número de entidades. Revisa el mapa para confirmar que se cargaron los datos correctos, y luego haz clic en "Convert to GeoJSON" cuando estés listo.

Se añade una segunda capa "Converted GeoJSON" sobre la de origen, y aparece un resumen: cuántas entidades se convirtieron, qué tipos de geometría se encontraron, el cuadro delimitador, las columnas de atributos y el tamaño resultante del archivo GeoJSON.

Usa las casillas del panel Layers para mostrar u ocultar la capa de origen y la convertida de forma independiente, y activa "Show basemap" si quieres un mapa de calles como contexto debajo de ambas.

Haz clic en "Download converted.geojson" para guardar el archivo GeoJSON terminado y conforme a los estándares en tu computadora.
Seis casos de uso reales
Dónde surge realmente la conversión de shapefiles a geojson en el trabajo GIS del día a día.
- Publicar datos abiertos gubernamentales en la web. Muchos portales de datos abiertos municipales, estatales y nacionales todavía distribuyen conjuntos de datos de parcelas, zonificación y límites como shapefiles. Convertir shapefiles a geojson convierte esa descarga en algo que un mapa web o una aplicación de JavaScript puede cargar directamente, sin procesamiento del lado del servidor.
- Cargar datos de topografía o campo en un mapa web. Los dispositivos GPS de campo y los flujos de trabajo GIS de escritorio más antiguos suelen exportar shapefiles. Una conversión rápida de shp a geojson suele ser el único paso entre la salida de un topógrafo y un mapa compartible en Leaflet o Mapbox GL.
- Preparar datos para vistas previas de mapas en GitHub o GitLab. GitHub renderiza automáticamente los archivos `.geojson` como un mapa interactivo, pero no renderiza shapefiles en absoluto. Convertir un shapefile antes de subirlo marca la diferencia entre un mapa renderizado y cuatro archivos binarios ilegibles en un repositorio.
- Alimentar bibliotecas de mapas de JavaScript. Leaflet, Mapbox GL JS, OpenLayers y deck.gl consumen todos GeoJSON de forma nativa. Ninguno puede leer un shapefile directamente en el navegador, así que un convertidor de shp a geojson es un paso obligatorio en cualquier pipeline de mapas del lado del cliente que parta de datos en shapefile.
- Migrar archivos GIS antiguos a formatos modernos. Las organizaciones que retiran sistemas GIS de escritorio antiguos suelen tener años de archivos shapefile. Convertir shapefiles a geojson (o más adelante a GeoParquet o GeoPackage) suele ser el primer paso de migración, ya que GeoJSON es legible por prácticamente cualquier herramienta moderna.
- Comprobaciones rápidas puntuales sin instalar GIS de escritorio. A veces solo necesitas ver qué hay dentro de un archivo `.shp` que alguien te envió por correo. Convertirlo a GeoJSON y previsualizarlo en un mapa es más rápido que instalar QGIS o ArcGIS para un solo archivo.
El algoritmo de conversión, paso a paso
Convertir un shapefile a GeoJSON no es una sola operación, sino una pequeña cadena de pasos bien definidos de análisis y reconstrucción de geometría. Esto es exactamente lo que le pasa a tus datos, en orden.
1. Descomprimir y localizar el conjunto de archivos coincidente
El .zip subido se descomprime en memoria, y el convertidor agrupa los archivos por su nombre base compartido para encontrar un trío coincidente .shp / .shx / .dbf (más un .prj y .cpg opcionales). Si un zip contiene más de un trío así, se trata como una exportación de shapefile multicapa y cada capa se convierte de forma independiente.
2. Analizar la cabecera fija de 100 bytes del `.shp`
La cabecera se lee primero para confirmar que el código de archivo sea igual a 9994, para leer el tipo de forma (que indica al analizador qué estructura de registro esperar a continuación), y para leer el cuadro delimitador a nivel de archivo. El diseño de los campos relevantes para la conversión es:
Bytes 0-3 File code big-endian int, always 9994 Bytes 24-27 File length big-endian int, in 16-bit words Bytes 28-31 Version little-endian int, always 1000 Bytes 32-35 Shape type little-endian int (1=Point, 3=PolyLine, 5=Polygon, 8=MultiPoint) Bytes 36-67 Bounding box 4 little-endian doubles: Xmin, Ymin, Xmax, Ymax
Todo después del byte 100 se lee como un flujo de registros de longitud variable, cada uno precedido por su propia pequeña cabecera que indica el número de registro y la longitud del contenido en palabras de 16 bits, que luego se convierte a un conteo de bytes multiplicando por dos.
3. Reconstruir anillos en geometrías Polygon y MultiPolygon
Para registros de tipo Polígono, cada anillo del registro se lee como un array plano de pares (x, y). El convertidor entonces calcula el área con signo de cada anillo usando la fórmula del área de Gauss (fórmula del cordón de zapato), área = 0.5 * Σ(x[i] * y[i+1] - x[i+1] * y[i]). Un resultado positivo (en la convención horaria-positiva del shapefile) marca un anillo exterior; un resultado negativo marca un agujero. Cada anillo de agujero se asocia entonces con el anillo exterior más pequeño cuyo cuadro delimitador lo contiene por completo, y ambos se combinan en un único array coordinates de un Polygon de GeoJSON, con el anillo exterior primero y cada anillo de agujero después. Cuando un registro contiene más de un anillo exterior, el resultado se convierte en un MultiPolygon.
4. Reproyectar coordenadas y adjuntar atributos
Si hay un archivo .prj presente y su sistema de referencia de coordenadas no es ya WGS84, cada par de coordenadas producido en el paso anterior se reproyecta a longitud/latitud WGS84, ya que ese es el sistema de coordenadas que RFC 7946 exige para un GeoJSON válido. En paralelo, la tabla .dbf se analiza campo por campo, y el registro i en el .dbf se adjunta como el objeto properties de la geometría construida a partir del registro i del archivo .shp, ya que ambos archivos se asocian puramente por posición, no por ninguna clave explícita.
El paso final envuelve cada geometría convertida y sus propiedades en un Feature de GeoJSON, recopila cada entidad en una única FeatureCollection, y serializa esa estructura a texto, lista para descargar como archivo .geojson. Como cada paso anterior es una transformación determinista y bien definida, convertir el mismo shapefile dos veces siempre produce una salida GeoJSON idéntica byte a byte.
Las bibliotecas GIS detrás de la conversión de shapefiles
Un convertidor de shp a geojson es tan bueno como el analizador de shapefile que tiene debajo. Esto es lo que realmente hace el trabajo, en esta herramienta y en otras.
- shpjs: El motor detrás de esta herramienta. shpjs es una biblioteca en JavaScript puro que descomprime el archivo, analiza la geometría binaria `.shp` y la tabla de atributos `.dbf`, reproyecta coordenadas usando datos `.prj` cuando están presentes, y ensambla el resultado en GeoJSON, todo sin salir del navegador ni de un proceso de Node.js.
- GDAL / OGR (ogr2ogr): La biblioteca en C/C++ que subyace a la mayoría del software GIS de escritorio y del lado del servidor. El comando `ogr2ogr -f GeoJSON output.geojson input.shp` es la forma estándar de facto de convertir shapefiles a geojson desde la línea de comandos, y es el mismo motor que QGIS llama internamente cuando usas su diálogo "Export Features".
- Fiona y GeoPandas: La pila de E/S de archivos geoespaciales de Python. Fiona envuelve GDAL/OGR directamente, y GeoPandas se construye sobre Fiona, de modo que `gpd.read_file('data.shp')` seguido de `gdf.to_file('data.geojson', driver='GeoJSON')` es una de las formas más comunes en que los desarrolladores convierten shapefiles a geojson dentro de un pipeline de datos.
- Mapshaper: Una herramienta ampliamente usada de línea de comandos y basada en navegador (de Matthew Bloch) que lee shapefiles con su propio analizador y puede simplificar la geometría durante la conversión, útil cuando un shapefile es demasiado detallado para un mapa web y se necesitan tanto conversión como simplificación en un solo paso.
- QGIS y ArcGIS: Ambas aplicaciones GIS de escritorio pueden abrir un shapefile de forma nativa y exportarlo como GeoJSON mediante una acción de menú, "Export Features" en QGIS y "Feature Class to GeoJSON" o herramientas similares en ArcGIS, ambas de las cuales llaman a GDAL/OGR o una biblioteca equivalente por debajo de la interfaz de usuario.
Todas estas herramientas coinciden en la misma especificación de shapefile subyacente y el mismo formato de salida GeoJSON, así que un archivo convertido por cualquiera de ellas debería ser estructuralmente equivalente. La diferencia práctica está en dónde ocurre el trabajo: GDAL, Fiona y el software GIS de escritorio se ejecutan en una máquina con algo instalado, mientras que el motor basado en shpjs de esta herramienta se ejecuta directamente en la pestaña de tu navegador, por lo que aquí nunca se requiere instalación ni subir un archivo a un servidor.
Preguntas y respuestas técnicas
Diez preguntas comunes sobre cómo convierto un shapefile a GeoJSON, respondidas directamente.
1. ¿Cómo convierto un shapefile a GeoJSON?
Pon los archivos .shp, .shx y .dbf (más .prj si lo tienes) en un único archivo .zip, sube ese zip a este convertidor, y haz clic en "Convert to GeoJSON". La herramienta lee la geometría binaria del shapefile, la asocia con la tabla de atributos, y produce un archivo .geojson conforme a los estándares que puedes descargar de inmediato, todo dentro de tu navegador.
2. ¿Por qué esta herramienta pide un archivo zip en lugar del archivo .shp directamente?
Un archivo .shp por sí solo solo contiene geometría, sin atributos y, de forma crítica, sin ningún campo que describa qué representa realmente cada forma. Un shapefile válido es un conjunto de al menos tres archivos (.shp, .shx, .dbf) que deben leerse juntos, así que este convertidor, como cualquier otro convertidor de shp a geojson, necesita todos a la vez, y un zip es la forma más simple de entregar un conjunto coincidente.
3. ¿Esta conversión de shp a geojson es gratis, y hay un límite de tamaño de archivo?
Sí, es completamente gratis y sin registro. No hay un límite artificial de tamaño de archivo, aunque los shapefiles muy grandes (varios cientos de MB) tardarán más en analizarse ya que todo ocurre en tu propio dispositivo en lugar de en un servidor.
4. ¿El convertidor conserva mis datos de atributos?
Sí. Cada campo de la tabla .dbf se lee y se adjunta a su entidad correspondiente como un objeto properties de GeoJSON, conservando nombres y valores de campos, incluyendo números, texto y fechas.
5. ¿Qué pasa con el sistema de referencia de coordenadas?
Si tu zip incluye un archivo .prj, el convertidor lee el sistema de referencia de coordenadas que describe. GeoJSON, según RFC 7946, siempre está en longitud/latitud WGS84, así que si el shapefile de origen usa una proyección diferente (un caso común en sistemas de cuadrícula nacionales), las coordenadas se reproyectan a WGS84 durante la conversión. Si no hay un archivo .prj, se asume que las coordenadas ya están en WGS84.
6. ¿Puede manejar correctamente shapefiles de tipo Polígono con agujeros?
Sí. Los registros de polígono de shapefile almacenan anillos como una lista plana sin relación explícita padre-hijo, dependiendo del orden de orientación de los anillos para distinguir límites exteriores de agujeros. El convertidor clasifica cada anillo por su área con signo, reasocia los agujeros a su anillo padre correcto, y produce geometrías GeoJSON Polygon o MultiPolygon adecuadas.
7. ¿Qué tipos de geometría se admiten?
Point, MultiPoint, PolyLine (convertido a LineString o MultiLineString), y Polygon (convertido a Polygon o MultiPolygon), incluyendo sus variantes Z (elevación) y M (medida). Los registros de tipo nulo se omiten, ya que no llevan geometría que convertir.
8. ¿Se puede convertir un shapefile con más de una capa?
Un único archivo .shp siempre contiene exactamente una capa de geometría, así que si tu zip contiene varios archivos .shp (una exportación multicapa), cada uno se convierte por separado y se etiqueta claramente en el resultado, para que puedas saber qué entidades vinieron de qué shapefile original.
9. ¿Por qué algunos atributos de texto se ven corruptos después de la conversión?
El formato .dbf almacena texto usando una página de códigos (codificación de caracteres) específica, y los shapefiles más antiguos no siempre incluyen un archivo .cpg que indique cuál es. Cuando no se declara ninguna codificación, el convertidor recurre a un valor predeterminado común; si tus datos de origen usaban una codificación regional inusual, es posible que algunos caracteres acentuados necesiten corrección manual después de la conversión.
10. ¿Se sube mi shapefile a un servidor?
No. Descomprimir el archivo, analizar la geometría binaria .shp, leer la tabla de atributos .dbf, y ensamblar el GeoJSON final ocurre todo localmente en tu navegador usando JavaScript. Tu archivo nunca sale de tu dispositivo.
La conversión se ejecuta completamente en tu navegador usando shpjs. Ningún archivo se sube nunca a un servidor. Map tiles © OpenStreetMap contributors.
