Administrando datos georeferenciados con GeoBack

GeoBack es una herramienta de código abierto para almacenar datos georeferenciados conforme al estándar GeoJSON. Es un proyecto de código abierto y es totalmente libre de uso.

Está implementado en lenguaje Java sobre Spring Boot, con Spring Data y MongoDB. Los accesos al Api están securizados con JWT. Incluye un Spring Converter  y un módulo Jackson para usar los objetos de dominio propios de Spring Data Mongo.

GeoBack

A lo largo de este post, vamos a entrar un poco en detalle expliando cómo está desarrollado.

Utiliza estándar GeoJSON para guardar los datos

GeoJSON es un formato estándar abierto, diseñado para representar elementos geográficos sencillos junto con sus atributos no espaciales, basado en JSON. El formato es ampliamente utilizado en aplicaciones de cartografía en entornos web, al permitir el intercambio de datos de manera rápida, ligera y sencilla.

Gracias a ser un formato estándar, muchas de las tecnologías Web relacionadas con mapas lo utilizan (Google Maps Api, Leaflet y Openlayers, así como CartoDB o Mapbox).

Spring Boot

El proyecto está implementado con Spring Boot, lo que nos permite aprovechar todas sus ventajas, que son:

  • Es ideal para una arquitectura de micro-servicios ya que permite una gran abstracción.
  • Fácil de escalar. Permite ser integrado con Docker u otros sistemas de contenedores.
  • Ecosistema Spring.
  • No necesitamos ningún servidor de aplicaciones en nuestra máquina, ya que viene embebido y pre-configurado.
  • Automatización de la configuración, haciéndola muy sencilla.

Spring Data y MongoDB

Las bases de datos no relacionales se antojan ideales a la hora de almacenar datos georeferenciados. Por ello, GeoBack está preparado para funcionar sobre MongoDB.

Existen otras bases de datos, como MySQLPostgreSQL, con características especiales para trabajar con datos georeferenciados. Podríamos hacer unos sencillos cambios en el código para poder utilizar cualquiera de estas bases de datos, gracias a la potencia de Spring Data y a que utilizamos el estándar GeoJSON.

Desde hace un tiempo, MongoDB incluye los índices 2dsphere. Estos índices permiten hacer consultas que calculan geometrías en una esfera similar a la de la Tierra. El índice 2dsphere admite todas las consultas geoespaciales de MongoDB (inclusión, intersección y proximidad), lo que nos permite realzar complicados cálculos de forma sencilla y a gran velocidad.

Api REST y Seguridad

Al incluir las capacidades Web de Srping Boot, el proyecto viene preparado para funcionar como una Api REST, para ello debemos implementar los controladores que serán nuestro enlace con la base de datos. Las principales ventajas de utilizar este sistema son su gran versatilidad a la hora de encajar en cualquier sistema (no dependemos de ningún lenguaje o plataforma específica), su fiabilidad y su fácil escalabilidad. Por poner un ejemplo, podemos tener varios geovisores con fines distintos que trabajen con la misma base de datos.

Pero estos sistemas tan “abiertos” podrían ser accesibles por cualquiera, es por ello que es necesario protegerlos. El ecosistema Spring tiene a Spring Security, el cual nos evita implementar la mayoría de mecanismos para poder proteger estos sistemas. 

En este caso, hemos añadido Json Web Tokens (JWT)  implementada sobre Spring Security. Esto nos permite securizar todos los accesos a la Api mediante autorización. De esta forma, podemos identificar y contabilizar los accesos a nuestro Api mediante el uso de tokens pre-generados.

 Qué es eso de Spring Converter y Jackson

GeoBack tiene la peculiaridad de utilizar los objetos de dominio propios de Spring Data para poder integrarlo de forma sencilla. Para poder utilizar estos objetos necesitamos que nuestra Api sea capaz de aceptar un documento en formato JSON y serializarlo en un objeto java (en este caso de una clase que implemente el interface GeoJson). Para este fin, se ha implementado un módulo Jackson con un serializer y un deserializer como se puede ver en este código.

Con este módulo Jackson podemos codificar y descodificar correctamente entre formato GeoJson y POJOs independientemente de su complejidad.

Un Spring Converter se encarga sencillamente de “transferir” los atributos de un objeto de una clase java a otra. Esto nos permitirá crear un Controller que acepte cualquier tipo de geometría, ya que el propio backend será el encargado de decodificarla y almacenarla correctamente por muy compleja que sea. Ademas lo hará de manera estándar, para que pueda ser entendido por un sistema completamente independiente de GeoBack.

Aquí podéis ver en detalle el código fuente de este converter.

Open source

Este proyecto está totalmente libre de uso. Lo podéis modificar y utilizarlo a vuestro antojo. Pronto publicaremos un ejemplo de uso implementando un controlador, con su correspondiente servicio, que nos permita administrar layers en una base de datos.

– En este enlace se encuentra el repositorio GitHub.

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s