GeoJSON es un formato basado en JSON (JavaScript Object Notation) para codificar datos geoespaciales. Ha ganado gran popularidad debido a su simplicidad y compatibilidad con aplicaciones web, servicios de mapas y sistemas de información geográfica (SIG). GeoJSON se utiliza para representar diferentes tipos de datos espaciales, como puntos, líneas y polígonos, de una manera sencilla y legible para humanos y máquinas.
Este formato se adhiere al estándar de datos geoespaciales de la Internet Engineering Task Force (IETF), bajo la especificación RFC 7946.
En este artículo, exploraremos los principales tipos de GeoJSON, sus estructuras y ejemplos de uso.
Un archivo GeoJSON tiene dos componentes principales:
1. Geometrías: Representan las formas y ubicaciones espaciales (puntos, líneas, polígonos, etc.).
2. Características (Features
): Asocian las geometrías con propiedades adicionales, como nombres, descripciones o cualquier otro tipo de dato.
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [102.0, 0.5]
},
"properties": {
"name": "Simple Point"
}
}
]
}
En este ejemplo, se define una colección de características que incluye un punto con coordenadas y una propiedad (name
).
En GeoJSON, los datos espaciales se organizan en varios tipos de geometrías. Cada tipo de geometría define una forma espacial específica. Estos tipos son:
El tipo Point se utiliza para representar una única ubicación en el espacio. Las coordenadas de un punto están formadas por dos o más valores (latitud y longitud, y opcionalmente una altitud o valor z).
{
"type": "Point",
"coordinates": [102.0, 0.5]
}
Aquí, las coordenadas [102.0, 0.5]
corresponden a un punto en la Tierra.
Un MultiPoint es una colección de varios puntos individuales. Cada punto tiene sus propias coordenadas, pero se agrupan dentro de un único objeto.
{
"type": "MultiPoint",
"coordinates": [
[102.0, 0.5],
[103.0, 1.5],
[104.0, 2.5]
]
}
Este ejemplo muestra un conjunto de tres puntos en diferentes ubicaciones.
Una LineString representa una secuencia de puntos conectados por líneas. Se utiliza para describir trayectorias o caminos, como carreteras o rutas de viaje.
{
"type": "LineString",
"coordinates": [
[102.0, 0.0],
[103.0, 1.0],
[104.0, 0.0],
[105.0, 1.0]
]
}
En este ejemplo, se define una línea conectada por cuatro puntos.
El tipo MultiLineString es una colección de varias líneas, donde cada línea está representada por un conjunto de puntos conectados.
{
"type": "MultiLineString",
"coordinates": [
[
[102.0, 0.0],
[103.0, 1.0]
],
[
[104.0, 0.0],
[105.0, 1.0]
]
]
}
Este ejemplo representa dos líneas, cada una con su propio conjunto de puntos.
Un Polygon representa una forma cerrada en el espacio, como una parcela de tierra o el contorno de un lago. Los polígonos se definen por un anillo de puntos conectados, donde el primer y el último punto son iguales para cerrar la forma.
{
"type": "Polygon",
"coordinates": [
[
[100.0, 0.0],
[101.0, 0.0],
[101.0, 1.0],
[100.0, 1.0],
[100.0, 0.0]
]
]
}
En este caso, el polígono tiene cuatro lados y está definido por cinco puntos, con el primero y último coincidiendo para cerrar la figura.
Un polígono también puede tener un o varios anillos interiores, que definen agujeros en el área delimitada por el polígono exterior.
{
"type": "Polygon",
"coordinates": [
[
[100.0, 0.0],
[101.0, 0.0],
[101.0, 1.0],
[100.0, 1.0],
[100.0, 0.0]
],
[
[100.2, 0.2],
[100.8, 0.2],
[100.8, 0.8],
[100.2, 0.8],
[100.2, 0.2]
]
]
}
El primer anillo define el contorno exterior del polígono, mientras que el segundo anillo crea un agujero en su interior.
Un MultiPolygon es una colección de varios polígonos. Cada polígono puede tener uno o más anillos internos y externos.
{
"type": "MultiPolygon",
"coordinates": [
[
[
[102.0, 2.0],
[103.0, 2.0],
[103.0, 3.0],
[102.0, 3.0],
[102.0, 2.0]
]
],
[
[
[100.0, 0.0],
[101.0, 0.0],
[101.0, 1.0],
[100.0, 1.0],
[100.0, 0.0]
],
[
[100.2, 0.2],
[100.8, 0.2],
[100.8, 0.8],
[100.2, 0.8],
[100.2, 0.2]
]
]
]
}
En este caso, el primer polígono es simple, mientras que el segundo polígono tiene un agujero.
Una GeometryCollection es un tipo especial de GeoJSON que agrupa diferentes tipos de geometrías en un solo objeto. Puede contener puntos, líneas y polígonos en una misma colección.
{
"type": "GeometryCollection",
"geometries": [
{
"type": "Point",
"coordinates": [100.0, 0.0]
},
{
"type": "LineString",
"coordinates": [
[101.0, 0.0],
[102.0, 1.0]
]
}
]
}
Aquí, la colección incluye un punto y una línea.
Además de las geometrías, los objetos Feature en GeoJSON incluyen propiedades adicionales para describir las características de las geometrías. Esto permite asociar datos como nombres, tipos de entidades o cualquier otra información relevante.
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [102.0, 0.5]
},
"properties": {
"name": "Lugar de Interés",
"categoria": "Turismo"
}
}
Aquí, además de las coordenadas del punto, tenemos propiedades adicionales que describen la categoría del lugar.
Un FeatureCollection es una colección de múltiples Features, cada uno con su propia geometría y propiedades.
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [102.0, 0.5]
},
"properties": {
"name": "Lugar 1"
}
},
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[100.0, 0.0],
[101.0, 0.0],
[101.0,
1.0],
[100.0, 1.0],
[100.0, 0.0]
]
]
},
"properties": {
"name": "Área 1"
}
}
]
}
Este ejemplo muestra un conjunto de características, que incluyen tanto un punto como un polígono, cada uno con sus propias propiedades.
El formato GeoJSON es extremadamente versátil y se utiliza en una amplia gama de aplicaciones geoespaciales. Comprender los tipos de geometrías disponibles y cómo se estructuran las características y colecciones en GeoJSON es fundamental para trabajar con datos espaciales de manera eficiente. Gracias a su sencillez y compatibilidad con muchas herramientas de mapeo y análisis, GeoJSON sigue siendo una de las opciones más populares para el intercambio de datos geoespaciales.
Jorge García
Fullstack developer