Esta breve introducción a varios conceptos de datos geoespaciales abarca las bases de datos espaciales, la indexación espacial y el uso de datos GeoJSON en NoSQL.
¿Qué son los datos espaciales?
Los datos espaciales son tipos de datos (archivos, bases de datos, servicios web) que codifican información geográfica para su uso en aplicaciones que tienen en cuenta la ubicación.
Hace 15 años, cuando escribí un libro sobre cartografía basada en la web, mis lectores se vieron obligados a aprender una pila de tecnologías en su mayoría nuevas. Los geógrafos tenían que aprender la tecnología y los desarrolladores, el dominio. Eso incluía servidores web, aplicaciones SQL y un poco de PHP. Pero la gran "novedad" era el uso de datos espaciales. Aunque hoy en día está más extendido, los desarrolladores de aplicaciones siguen necesitando saber cómo trabajar con este tipo de datos espaciales específicos del sector.
¿Qué son los Sistemas de Información Geográfica (SIG)?
La cartografía es tan antigua como la civilización misma. Desde la travesía de los océanos hasta la planificación de las ciudades, la información se recopilaba y transcribía en papel.
Al igual que digitalizamos textos y números, los cartógrafos empezaron a introducir datos de puntos, líneas y polígonos en sistemas digitales.
Esto creó la Sistemas de Información Geográfica (SIG) dominio. Los datos espaciales podían dibujarse como una capa gráfica en un mapa, pero también analizaban las características geográficas y las relaciones de ubicación. La gestión forestal, la ordenación del territorio, el transporte, la topografía, etc., se beneficiaron de estos sistemas.

1900 (est.) Mapa de la Universidad de Stanford por C. O. Taylor, de DavidRumsey.com artículo 1345400.
Se trata de vector porque se construyen a partir de puntos de datos (piensa en coordenadas x, y, z) y una dirección que los conecta. Encadena varios puntos formando una línea o cierra el bucle y crea un área poligonal.
Los datos rasterizados, por su parte, están formados por imágenes o cuadrículas de valores digitales en forma de píxeles (por ejemplo, imágenes de satélite, modelos de elevación, etc.). Este tipo de datos queda fuera del ámbito de este artículo.
* Se anima a los habitantes de la zona de la bahía a consultar mapas antiguos en el Colección de mapas de David Rumsey en línea alojado en Stanford con activos físicos
Espacial era Especial
Los sistemas de gestión de bases de datos relacionales tenían soporte para objetos espaciales, pero los utilizaban sobre todo los analistas espaciales. Estos tipos especiales de datos vectoriales y bases de datos eran algo esotéricos para los desarrolladores de aplicaciones y web.
Había que tener conocimientos especiales para utilizar datos especiales de un software SIG especial. A continuación, había que cargar los datos en una base de datos espacial para su posterior análisis y conectividad de aplicaciones.
Por supuesto, una vez que salió Google Maps, la gente empezó a ser más consciente de lo que son los datos espaciales, y la tendencia se desplazó hacia la integración de datos cartográficos de terceros, pero esa es otra historia.
Los geógrafos solían utilizar el software cartográfico de escritorio de ESRI para crear imágenes de mapas (estáticas) y archivos PDF. (Más recientemente, el proyecto QGIS.org, gratuito y de código abierto, ha arrasado en todo el mundo). También podían exportar esos datos para utilizarlos en una base de datos totalmente distinta. Los desarrolladores web pueden importar esos datos a una base de datos espacial y luego consultarla con una capa de aplicación de cartografía web que tenga en cuenta la ubicación para generar imágenes para sus usuarios.

Mapa de distribución del virus y la población mediante QGIS autor Kurt Menke.
¿Qué es una base de datos espacial (geoespacial)?
Una base de datos espaciales -también conocida como "base de datos geoespaciales"- se construye para capturar y almacenar los puntos, líneas y áreas de información cartográfica a los que nos referimos como datos espaciales. A menudo estas bases de datos eran bastante ordinarias pero tenían extensiones para manejar objetos binarios (BLOBs) en uno de sus campos - SQL Server, Oracle, PostgreSQL, Ingres, SQLite todas tienen addons espaciales.
Los problemas se hicieron más complejos a medida que crecían los volúmenes de datos y se transformaban los flujos de trabajo. En lugar de limitarse a producir y compartir datos, se presionaba a los desarrolladores para que produjeran más información y conocimientos a partir de los datos. También se buscaba la interoperabilidad y la eficiencia.
Esto ofrecía nuevas oportunidades de crear normas para servicios geoespaciales optimizados para la web, es decir, para compartir imágenes de mapas o datos tabulares sin procesar que se utilizarían en otra aplicación que tuviera en cuenta la ubicación. Aunque los formatos basados en archivos de ESRI (shapefiles, geodatabase) eran populares para los usuarios de ordenadores de sobremesa, muchos desarrolladores web querían datos en una base de datos empresarial como PostgreSQL que es desde hace años la principal base de datos espaciales de código abierto.
Una vez que los datos estaban en una base de datos, los desarrolladores podían controlar mejor el flujo de trabajo. Asimismo, un número cada vez mayor de analistas espaciales empezaron a utilizar la funcionalidad espacial de los sistemas de bases de datos.
¿Qué es GeoJSON?
A medida que evolucionaban las normas técnicas para los datos espaciales en la web, los desarrolladores utilizaron el formato JSON (JavaScript Object Notation) con normas de codificación geográfica incorporadas. GeoJSON que podía contener campos de datos de atributos junto con pares de coordenadas de puntos para definir puntos vectoriales, líneas y polígonos. Basado en JSON, que permite múltiples objetos incrustados, listas y mapeos clave/valor, era muy adecuado para los datos geográficos.
He aquí un ejemplo de línea básica con dos campos de datos de atributos:
|
1 2 3 4 5 6 7 8 9 10 11 |
<span clase="s2">"tipo"</span><span clase="o">:</span> <span clase="s2">"Característica"</span><span clase="p">,</span> <span clase="s2">"geometría"</span><span clase="o">:</span> <span clase="p">{</span> <span clase="s2">"tipo"</span><span clase="o">:</span> <span clase="s2">"LineString"</span><span clase="p">,</span> <span clase="s2">"coordenadas"</span><span clase="o">:</span> <span clase="p">[</span> <span clase="p">[-</span><span clase="mf">121.0</span><span clase="p">,</span> 49<span clase="mf">.0</span><span clase="p">],</span> <span clase="p">[-</span><span clase="mf">103.0</span><span clase="p">,</span> 52<span clase="mf">.0</span><span clase="p">],</span> <span clase="p">[45</span><span clase="mf">.0</span><span clase="p">,</span> 51<span clase="mf">.0</span><span clase="p">],</span> <span clase="p">[</span><span clase="mf">10.0</span><span clase="p">,</span> 46<span clase="mf">.0</span><span clase="p">]</span> <span clase="p">]</span> <span clase="p">},</span> <span clase="s2">"propiedades"</span><span clase="o">:</span> <span clase="p">{</span> <span clase="s2">"tipo"</span><span clase="o">:</span> <span clase="s2">"ruta de vuelo"</span><span clase="p">,</span> <span clase="s2">"distancia"</span><span clase="o">:</span> 3400<span clase="mf">0.0</span> <span clase="p">}</span> |
Los desarrolladores saben que JSON es una forma de obtener datos de un archivo plano o una base de datos de sus colegas geógrafos. Cuando se solicita, una base de datos espacial convierte un formato tabular en JSON antes de enviarlo a la aplicación consumidora.
Alineación NoSQL
Lo bueno de Bases de datos NoSQL es que se crearon para utilizar JSON directamente. Con Couchbase, con el que estoy más familiarizado, el esquema flexible también es una ventaja, ya que no requiere la validación del esquema de una estructura tabular estricta como parte de una aplicación. Esto hace que sea más fácil de ajustar según sea necesario, especialmente durante las fases de creación de prototipos, donde los tipos de datos y esquemas pueden estar cambiando.
No todos los datos espaciales están en forma tabular, ni tendría sentido que lo estuvieran, así que ¿por qué forzarlos? Por ejemplo, un perfil de usuario para una aplicación puede querer tener datos jerárquicos en los que una dirección es un objeto opcional en el campo Modelo de datos NoSQL. O puede que exista la opción de tener varios números de teléfono, pero no todos tengan uno. En estos casos, no conviene mantener columnas vacías en una tabla por si acaso.
Cuando empieces a pensar en los datos espaciales como un objeto más con una lista de coordenadas, verás lo bien que se alinean con las bases de datos NoSQL.
La naturaleza de computación distribuida de NoSQL siempre añade lujo a su uso para aplicaciones geoespaciales, ya que están construidas para manejar cargas de trabajo difíciles. Al utilizar la computación basada en clústeres, los datos espaciales pueden crecer con el tiempo y se pueden añadir fácilmente más recursos de consulta según sea necesario.
Éstas son sólo algunas razones por qué las empresas eligen datos NoSQL plataformas.
Funciones de bases de datos geoespaciales
Dibujar mapas
La función más común para los desarrolladores que acceden a datos espaciales es hacer un mapa, ya sea en línea, en una aplicación móvil o en un ordenador de sobremesa. Esto puede adoptar varias formas, pero se trata principalmente de una solicitud de un conjunto específico de registros de documentos que la aplicación renderiza para el usuario.
La representación de mapas es un campo en sí mismo, pero la mayoría de las API en línea que ayudan a hacer esto (por ejemplo, MapBox, Leaflet) tienen algunos valores predeterminados básicos que permiten a los usuarios ponerse en marcha rápidamente. Para ser sinceros, la mayoría de los mapas en línea se limitan a mostrar algunos marcadores de puntos sobre una imagen. Se trata, por tanto, de un caso de uso de los datos cartográficos, pero no es realmente lo que los usuarios de SIG elegirían a la hora de realizar análisis.
Más allá de la simple solicitud de un conjunto de documentos, una base de datos espacial debe permitir el filtrado de características/documentos específicos a partir de una consulta. Naturalmente, el uso de lenguajes SQL que ofrecen una cláusula WHERE ayuda a hacer esto posible. Existen formas geográficas más avanzadas de filtrar datos (por ejemplo, para una región/zona específica).
Indexación espacial
Para realizar un filtrado espacial más avanzado para dibujar mapas, o incluso para realizar lo que se denomina uniones espaciales (unir registros en función de su ubicación próxima, como una tienda dentro de una región), es necesario tener indexados los datos geográficos. Al igual que se indexan otros campos de una base de datos, existen métodos de indexación especiales para los tipos de campos geoespaciales.
Las bases de datos espaciales suelen calcular un rectángulo alrededor de cada una de las características de un conjunto de datos y lo utilizan como índice aproximado para las consultas. Esto también se conoce como rectángulo de delimitación mínima (RBM) y es un tipo de índice aproximado. Índice R-Tree también se utiliza.
A continuación, la consulta de datos utiliza estos índices para encontrar las características espaciales que se solapan o se encuentran a una distancia de otra ubicación. Utilizan el MBR para ver lo cerca que pueden estar unas características de otras, de modo que puede ignorar las que no están lo suficientemente cerca como para importar.
Couchbase construye índices espaciales utilizando su búsqueda de texto completo servicio. Al especificar qué campo contiene datos geográficos, el índice sabrá qué tipo de índice construir. Las posteriores solicitudes de búsqueda con un componente geoespacial utilizarán esos índices, aunque el usuario nunca tendrá que verlos ni interactuar directamente con ellos.

Configurando un tipo de geopunto en la GUI web de búsqueda de Couchbase. El campo 'geo' contiene datos de puntos GeoJSON. Haz clic para ver el blog en el que se muestra su uso.
Lenguaje de consulta espacial
Las aplicaciones cartográficas son excelentes para ocultar las consultas espaciales más complejas que se utilizan entre bastidores. Por ejemplo, cuando un usuario activa o desactiva una capa, la aplicación debe cambiar las consultas que se están ejecutando, ignorando cualquier dato que no necesite. Del mismo modo, cuando un usuario hace zoom en un mapa, la ventana del mapa cambia y las consultas subyacentes solicitan datos sólo para esa nueva ventana del mapa. Si una aplicación solicitara todos los datos, todo el tiempo sería inutilizable.
Las consultas utilizan funciones que toman distintos tipos de variables:
- cuadro delimitador o área de la consulta
- nombres de capas o tablas a incluir
- distancia de un punto dado a la consulta
- coordenadas de un polígono que define el área de consulta
Las bases de datos relacionales lo hacen a través de las consultas SQL subyacentes. Los sistemas NoSQL varían en sus enfoques. Couchbase, por ejemplo, puede hacer la solicitud de documentos utilizando N1QL/lenguaje basado en SQL para consultas NoSQL.
A continuación, las aplicaciones posteriores pueden utilizar directamente los objetos geoespaciales. Este blog, por ejemplo, muestra cómo el Lenguaje de programación R solicita datos fácilmente y utiliza el paquete de mapeo Leaflet para obtener resultados. No fue necesario ningún procesamiento avanzado, solo una solicitud básica N1QL/SQL.
Pero cuando se desea realizar consultas más relacionadas con el ámbito geoespacial, Couchbase utiliza un conjunto de solicitudes de búsqueda geoespacial (del servicio de búsqueda de texto completo) utilizando una distancia radial desde un punto, dentro de un área rectangular y dentro de una forma de polígono proporcionada. Esto permite extraer únicamente los documentos/registros de interés, sin necesidad de bibliotecas o herramientas espaciales adicionales.
Operaciones espaciales avanzadas
Pero las consultas son sólo la mitad de la batalla. Las aplicaciones SIG y las bases de datos espaciales completas tienen muchas más funciones de generación de datos. Esto incluye el cálculo del punto central (centroide) de polígonos, operaciones booleanas entre múltiples formas superpuestas (intersección, diferencia, unión) y conversión a diferentes formatos de serialización (binario, texto, XML, JSON).
El Open Geospatial Consortium (OGC) mantiene las especificaciones de todas estas características bajo el título de Funciones sencillas para SQL. Hay muchos tipos de características espaciales y funciones diferentes en esa especificación. He aquí una muestra.

Lista de tipos y funciones de las Características Geoespaciales Simples del OGC en comparación con otras normas. En https://www.ogc.org/standards/sfs
Las uniones espaciales también son muy populares para conectar, por ejemplo, un conjunto de puntos y encontrar los polígonos en los que se encuentran. O conectar una capa de polígonos con otra capa de características. A continuación, los campos de ambos conjuntos de datos pueden utilizarse en mapas o informes.
Todos ellos son muy potentes y útiles para los analistas. Sin embargo, los índices espaciales sólo ayudan en parte de las consultas. La parte más compleja es hacer la geometría computacional para calcular nuevas características. No hay forma fácil de hacerlo, así que la gestión de recursos (y una buena cafetera) es realmente importante.
Conclusión
Esta ha sido una breve introducción a muchos conceptos diferentes. Espero que te dé algunos puntos de contacto para aprender más sobre el dominio de las bases de datos espaciales. Aquí tienes más blogs y recursos geoespaciales de Couchbase.
Descargar la base de datos NoSQL Couchbase gratis. Desarrollar en un ordenador portátil, implementar fácilmente en la nube cuando esté listo para escalar. Instálalo y sigue estos tutoriales:
- R Programming With Couchbase NoSQL Queries and Maps (Folleto)
- Búsqueda geoespacial con ASP.NET Core, Aurelia y Google Maps
- Consultas geoespaciales: Uso de Python para buscar ciudades
- Uso de NoSQL para la búsqueda geoespacial sin una base de datos espacial
