EngineNuevas características

Desarrollo de una nueva librería de visores de mapas

Cada vez más, nuestros Productos y Proyectos requieren de poder representar datos con componente espacial e incluso, en algunos casos, de realizar cálculos a partir de dichos datos para obtener nuevas capas de información.

Hasta ahora, cada equipo de desarrollo se ocupaba de la elaboración de un visor de mapas específico para sus necesidades. Esta manera de trabajar no era muy eficaz debido a que, aunque en general todos los visores contaban con las mismas funcionalidades (controles de vista, selecciones, geocodificación, etc.), cada uno de ellos era desarrollado desde cero por diferentes personas, siendo bastante complejo compartir funcionalidades entre los distintos equipos.

Ejemplo del visor de mapas de la demo del CLM.

Para atajar esta situación, a lo largo de este Q4 de 2022 hemos estado desarrollando una librería de visores de mapas con capacidades GIS orientada a su uso en todos los Productos y Proyectos que requieran de representación de datos geoespaciales. Para su diseño, nos hemos basado en todo el trabajo de recopilación de necesidades de los diferentes Productos y Proyectos donde existen visores de mapas que llevamos a cabo durante el Q3, analizando y clasificando las funcionalidades utilizadas.

Acabamos de publicar la primera versión estable de la librería, por lo que durante el próximo Q1 de 2023 nos dedicaremos a implementarlo en la Plataforma para poder configurar los visores de manera rápida y sencilla.

Tecnologías utilizadas 

A nivel de código fuente, la librería la hemos desarrollado con TypeScript, un superconjunto de JavaScript que principalmente añade tipos estáticos y objetos basados en clases. El API se ha abstraído completamente de la librería de mapas que se utilice, por lo que es independiente del proveedor utilizado. También se puede usar con cualquier framework actual del mercado (Vue, Angular, etc.).

Respecto a la librería de mapas utilizada, en esta primera versión se utiliza OpenLayers versión 6.14.1. Como se ha comentado previamente, la librería se encuentra diseñada de tal modo que permita la actualización de versiones de OpenLayers, así como para contemplar en un futuro el uso de otras librerías diferentes (CesiumJS, Leatlet, etc.).

Enfoque de trabajo

A la hora de trabajar con la librería, a nivel jerárquico vamos a diferenciar tres niveles diferentes:

  • Servicio de capa: que corresponde a una capa de datos geoespaciales, como puede ser un GeoJSON, un servicio WMS, etc.
  • Mapa: sería el visor del mapa que contendrá los servicios de capas que se encuentren definidos.
  • Proyecto de mapa: se trataría del contenedor que contendría los diferentes mapas que se quieran utilizar.

Por tanto, podemos decir que todo Proyecto y Producto que haga uso de esta librería contará con uno o más proyectos de mapa, los cuales contendrán todos los mapas que se requieran, y cada uno de ellos podrá tener las capas que se estimen oportunas.

Esquema de jerarquía.

Gracias a estar clasificación es posible generar todo tipo visores de mapas, contemplando todas las casuísticas posibles: un mapa único, dos mapas para comparar contenidos, una malla con múltiples mapas, etc.

Configuración del proyecto de mapa

La creación de un proyecto de mapa, el cual contenga los mapas con sus respectivos servicios de capas, se fundamenta en un archivo de configuración en formato JSON que contiene toda la información necesaria para configurar el proyecto del mapa.

Este archivo JSON incluye, a grandes rasgos, la siguiente información:

  • Identificador del contenedor que contendrá el proyecto de mapa.
  • Máximo número de mapas permitidos.
  • Visualización de los mapas: en malla o en pila.
  • Propiedades de la exportación del mapa: como el logotipo a utilizar.
  • Propiedades de las diferentes herramientas: estilos de simbología, proveedores de servicios, propiedades de servicios, etc.
  • Mapas del proyecto: con la configuración de cada uno de los mapas, incluyendo:
    • Librería a utilizar en el mapa: por defecto OpenLayers.
    • Nombre del mapa.
    • Si se encuentra activo o no.
    • Si está visible inicialmente o no.
    • Su opacidad.
    • Opciones de vista inicial: coordenadas y zoom iniciales, sistema de proyección a utilizar, zoom máximo y mínimo permitidos, etc.
    • Interacciones del mapa: zoom con doble clic, rotación del mapa, etc.
    • Servicios de capas: con el listado de capas y sus propiedades, tales como:
      • Nombre e identificador de la capa.
      • Tipo de capa.
      • Opacidad inicial.
      • Si es visible inicialmente o no.
      • Si es seleccionable o no.
      • Si es editable o no.
      • Fuente de los datos: URL y proyección original de los datos.
      • Simbología a utilizar.

Características principales 

De manera resumida, el nuevo API permite llevar a cabo la totalidad de las necesidades detectadas en todos los Productos y Proyectos analizados.

Algunas de las características que remarcamos son:

  • Soporte de varios mapas para un mismo visor, con la opción de sincronizar los diferentes mapas entre sí.
  • Soporte de diferentes formatos vectoriales: GeoJSON, GML.
  • Soporte de contenidos OGC: servicios WMS, WMTS, WFS, según la directiva Inspire.
  • Fuentes de datos diversos: se pueden usar capas de entidad de la Plataforma y servicios de servidores GIS (GeoServer, MapServer, ArcGIS Server, etc.).
  • Edición vectorial: se puede añadir geometrías, modificarlas o eliminarlas.
  • Navegación directa a una coordenada.
  • Herramientas de navegación: control de zoom, histórico de desplazamiento sobre el mapa, etc.
  • Herramientas de identificación: popup que muestra la información de las entidades seleccionadas, tanto vectoriales como de servicios WMS.
  • Herramientas de medida: tanto lineales como de área en diferentes formatos: sistema internacional e imperial.
  • Herramientas de selección de entidades: tanto por atributos (seleccionar una entidad por un valor de un campo) como por geometría (seleccionar en base a una geometría).
  • Carga dinámica de servicios desde el Front: de servicios OGC: WMS, WMTS y WFS.
  • Geocodificador integrado: tanto directo para búsqueda de direcciones como inverso para obtener la información de una coordenada.
  • Gestor de rutas: para el cálculo de una ruta a partir de unos puntos de paso, considerando bloqueos en el camino. Se incluyen opciones de optimización de ruta, medio de transporte, etc.
  • Herramientas de impresión de mapa: con la posibilidad de imprimir el mapa de la vista en formato PDF, PNG o JPG en diferentes resoluciones.
  • Herramientas de geoprocesamiento: incluyendo algunas herramientas GIS básicas como:
    • Zonas de influencia: tanto a partir de entidades de una capa, resultados de geoprocesamientos o interactuaciones en el mapa, como de una geometría definida por el usuario.
    • Intersecciones: entre capas, resultados de geoprocesamientos o interactuaciones en el mapa, como de una geometría definida por el usuario.
    • Análisis de proximidad: entre entidades de una capa, resultados de geoprocesamientos o interactuaciones en el mapa, como de una geometría definida por el usuario.
Ejemplo de una selección de entidades de tipo punto a partir de la intersección de la capa de puntos con una zona de influencia (polígono) de 150 metros de un punto seleccionado por el usuario.

Próximos pasos 

A lo largo del Q1 del 2023 vamos a proceder a desarrollar los asistentes de creación de los proyectos de mapas, mapas y servicios de capas que nos permitirá de una manera intuitiva y rápida generar los archivos de configuración JSON, pudiendo crear así desde la propia Plataforma nuestros visores.

Prototipo de diseño de cómo sería el listado de proyectos de mapas.

Imagen de cabecera: Colton Sturgeon en Unsplash

✍🏻 Author(s)

Deja una respuesta