Pese a que el formato Shapefile, inventado por ESRI a finales del pasado siglo, sigue siendo la forma más extendida de trabajo con archivos vectoriales en los Sistemas de Información Geográfica, existen otros mucho muy útiles e interesantes como los JSON y el GeoJSON.
JSON son las siglas en ingles de (JavaScript Object Notation) y nos permite intercambiar datos de una forma sencilla, pero sobretodo, legible y fácil de comprender. Los JSON son muy utilizados en el entorno web a la hora de intercambiar información, sobre todo cuando usamos servicios REST.
¿Qué es el GeoJSON?
Una descripción sencilla y rápida sería un JSON mejorado y especializado para intercambiar datos GIS.
GeoJSON define la gramática basada en un estándar del OGC (WKT). Este formato apareció en 2008 y puede representar una geometría, un fenómeno o una colección de fenómenos.
En dicho GeoJSON tendríamos por un lado la geometría y en otra los atributos asociados a dicha información. Los GeoJSON también poseen una estructura específica diferente de la de un JSON, el cual puede tener diferentes estructuras.
A continuación, vamos a comparar los dos tipos de formatos con los mismos datos.
El primero es un formato JSON de ESRI:
{ "objectIdFieldName" : "FID", "globalIdFieldName" : "", "geometryType" : "ESRIGeometryPoint", "spatialReference" : { "wkid" : 102100, "latestWkid" : 3857 }, "fields" : [ { "name" : "Land_Use", "type" : "ESRIFieldTypeString", "alias" : "Land_Use", "sqlType" : "sqlTypeNVarchar", "length" : 254, "domain" : null, "defaultValue" : null } ], "features" : [ { "attributes" : { "Land_Use" : "I" }, "geometry" : { "x" : -9177311.62541634, "y" : 4247151.2052222416 } }, { "attributes" : { "Land_Use" : "I" }, "geometry" : { "x" : -9177302.518331565, "y" : 4247155.3927341122 } }, { "attributes" : { "Land_Use" : "I" }, "geometry" : { "x" : -9177381.8884007987, "y" : 4247204.22222955 } } ] }
En el segundo podemos observar un formato GeoJSON:
{ "type" : "FeatureCollection", "crs" : { "type" : "name", "properties" : { "name" : "EPSG:3857" } }, "features" : [ { "type" : "Feature", "geometry" : { "type" : "Point", "coordinates" : [ -9177311.62541634, 4247151.20522224 ] }, "properties" : { "Land_Use" : "I" } }, { "type" : "Feature", "geometry" : { "type" : "Point", "coordinates" : [ -9177302.51833157, 4247155.39273411 ] }, "properties" : { "Land_Use" : "I" } }, { "type" : "Feature", "geometry" : { "type" : "Point", "coordinates" : [ -9177381.8884008, 4247204.22222955 ] }, "properties" : { "Land_Use" : "I" } } ] }
Como se puede observar ambos formatos poseen la misma información y una estructura JSON bastante similar, (los datos son obtenidos de un servicio REST de ESRI, y el JSON es el formato denominado ESRI JSON).
El segundo formato es un GeoJSON. En él observamos que existe una diferencia a la hora de crear la estructura. Generalmente se caracteriza por tener un objeto features donde se contienen las diferentes entidades, divididas a su vez en geometry y properties, siendo esta última la que contiene la información de los atributos.
Ahora, quizás estéis pensando cuál de los dos es la mejor opción para trabajar. Bueno, en caso de tomar un JSON dependerá de que estructura tenga. ESRI ha creado una estructura válida para su API y también para otras como Leafleft u OpenLayers, pero en caso de obtener un JSON con otro formato, deberíamos de modificar algo el código para poder visualizar dicha información, lo mismo pasaría si quisiéramos cargar dicho JSON en QGIS, necesitaríamos transformarlo a formato GeoJSON para que no existiese ningún problema.
¿Cuándo y por qué los GeoJSON o JSON?
GeoJSON es un sustituto perfectamente adecuado del Shapefile en muchos escenarios (visualización e intercambio de datos).
Estos formatos son una gran ventaja a la hora de trabajar en la web generando aplicaciones webmapping. Estos ficheros permiten obtener datos directos de servidores o también guardar esta información para generar mapas e incluso editar estos. El formato GeoJSON es bastante accesible, webs como overpass turbo nos permiten descargar directamente la información en GeoJSON. Además podemos partir de un shapefile y convertirlo en geoJSON para crear un sencillo mapa web con Leaflet.
¿Y tú? ¿Has trabajado alguna vez con este formato?
Analista Desarrollador GIS con experiencia Internacional. Ha realizado diferentes proyectos en Python tanto para ArcPy como PyQGIS y en desarrollo Web Mapping.
Síguenos en Twitter y en Facebook.
Hola,
para realizar una aplicación web con LeafLet para el mantenimiento de servicios para planos de edificios con PostgreSQL+PostGIS, cuál sería la aproximación que más rendimiento daría:
-El acceso a las tablas PostgreSQL/PostGIS con AJAX+PHP+GeoJSON.
-El acceso a los datos a través de GeoServer.
El tamaño de ficheros GeoJSON a tratar oscilaría entre 1,5 Mb i 20 Mb.
Saludos y gracias por vuestra labor divulgativa y formativa.
Muy buena pregunta, tambien me gustaria saberlo. Yo siempre he usado geoserver, pero no sé por qué, en mi último trabajo me salía siempre muchos problemas con las refernecias cruzadas al pner la direccion del servidor (que tienen solucion, pero te busca las cosquillas), asi que ahora me toca aprender y estoy en ello aprender php, para poder hacer esto.
Un saludo
Hola Jose, es complicado dar una respuesta a esta pregunta, porque depende del proyecto. Lo ideal es crear los dos escenarios para poder comparar los tiempos de respuesta. Además el tamaño de los archivos es muy variable, aunque pueden considerarse archivos pequeños.
En cualquier caso para acceder a los datos a través de GeoServer, es necesario crear un servicio WFS-T. Un factor importante que no se si has contemplado es el almacenamiento de los datos en GeoPackage. En GeoServer 2.13 el rendimiento en cuanto a la lectura y representación de GeoPackage ha mejorado de forma significativa. Es hasta dos veces más rápido en extracciones completas de grandes conjuntos de datos y un 50% más rápido en búsquedas de recuadros delimitadores pequeños, lo que equipara a GeoPackage con PostGIS.
Saludos!
Hola, comentas lo siguiente: «GeoJSON es un sustituto perfectamente adecuado del Shapefile en muchos escenarios (visualización e intercambio de datos)». ¿Significa eso que hay otros escenarios en los que no es un sustituto adecuado? Me gustaría tener claras la implicaciones de, por ejemplo, transformar en bloque unos cientos de shapefiles a GeoJSON para reorganizar mi librería de datos geográficos vectoriales. Saludos y gracias por el esfuerzo de escribir estos artículos.
Hola Angel
Por ejemplo, para trabajar con analisis espaciales no podrias usar dicho formato. JSON o GeoJSON a fin de cuentas es codigo JavaScript por lo que su utilizacion se debe mas a un uso web, y para cantidades pequeñas de informacion. Si que te lo recomiendo para Web maps.
Un saludo y espero que te ayude mi respuesta
Exelente artículo en relación a los formatos de todos geográficos JSON y GEOJSON.
Muchas gracias Jorge, me alegro de que te guste 🙂