Posicionamiento en interiores   |

Mapas para guiado en interiores

Mapas para guiado en interiores es un artículo de Adrian Canedo, CTO en Situm – PhD Robotics

1. Posicionamiento en interiores y mapas de interiores

En un post anterior hablamos sobre uno de los ingredientes más importantes que debe tener una app de navegación en interiores: un buen sistema de posicionamiento en interiores. Para los rezagados, resumimos un buen sistema de posicionamiento en interiores en:

  • Buena precisión (1-5 metros es suficiente).
  • Frecuentes y estables actualizaciones de localización (una por segundo, sin saltos…).
  • Detección automática de la planta donde estás y poder trabajar con el smartphone en la mano o en el bolsillo.

¡Ah! Y que todo esto se pueda dar sin necesidad de grandes inversiones en infraestructura. Para hacerlo, habitualmente se basan en todos los sensores del smartphone para utilizar la información que esté disponible (señales WiFi, lecturas BLE, sensores inerciales…).

Pero, así como tener una base crujiente no te asegura tener una gran pizza, no puedes desarrollar apps de navegación en interiores confiando únicamente en el sistema de localización en interiores. También necesitas desarrollar una buena experiencia de navegación para el usuario, y para hacer esto tienes que añadir dos ingredientes más a la mezcla: mapas y rutas en interiores.

2. Mapas y cartografía indoor

Un sistema de localización en interiores aportará información como: “El usuario está en el edificio 1234, en la planta 4567, en las coordenadas 42.875813-8.535442 y 94º de orientación con respecto al Norte”. Ningún usuario sabría qué hacer con esta información, y aquí es donde entra en juego la ayuda de la cartografía. Puedes mostrar todas las plantas y la localización del usuario en cada punto del plano con un diseño agradable. También puedes crear una barra de búsqueda para que el usuario pueda buscar puntos de interés (por ejemplo, una tienda en un centro comercial, o la consulta del médico en un hospital). Y también puedes mostrarle la ruta más corta hasta ese destino con indicaciones giro a giro (¡hablaremos sobre esto más adelante!).

Cuando hablamos de mapas, nos referimos a toda la cartografía del edificio, habitualmente los planos, puntos de interés y geofences.

2.1 Planos

Los planos son el elemento más importante. Proporcionan una representación visual de cada planta, permitiendo al usuario saber dónde está y también tener todos los detalles del edificio de un vistazo. La mayoría de los espacios ya tienen disponibles planos en archivos CAD o PDF. Estos archivos no son demasiado user friendly, así que probablemente necesitarás diseñar los tuyos propios (visualmente agradables y atractivos) basados en estos. Para ello, puedes usar algo tan sencillo como tu herramienta de diseño favorita (como Photoshop o Inkscape) o tan complejo como un software BIM (Building Information Modeling). A la hora de diseñar y mantener los planos de un edificio, hay dos enfoques.

Planos raster (imágenes simples).

Los planos se pueden representar utilizando archivos raster, habitualmente archivos PNG/JPEG, o formatos más avanzados como GeoTIFF, JPEG 2000, etc. En resumen, los archivos raster son simples imágenes o mapas de bits, básicamente un surtido de píxeles cuyos valores representan ciertas localizaciones en el espacio indoor.

La forma más sencilla de generar estos planos es exportando los dibujos de los edificios de su archivo original CAD o PDF a un formato de imagen. Normalmente, los editaremos utilizando un editor de imágenes (por ejemplo, Photoshop o Inkscape) para darle un aspecto agradable al plano para nuestros usuarios.

La forma más sencilla de generar archivos raster es exportando los dibujos de los edificios de su archivo original CAD o PDF a un formato de imagen. Normalmente, los editaremos utilizando un editor de imágenes (por ejemplo, Photoshop o Inkscape) para darle un aspecto agradable al plano para nuestros usuarios.
Imagen 1. Plano en Illustrator y plano exportado a un formato de imagen

Puedes insertar estas imágenes directamente en tus apps y trabajar con ellas como mapas de bits (link Android, link iOS). Otra forma de representar el plano en tu app podría ser utilizando un proveedor de mapas base, como Google Maps o Mapbox.

Imagen 2. Mapa de interiores insertado directamente en una app vs insertado sobre google maps

Para colocar tus planos por encima de un mapa base, necesitarás georreferenciarlos. Aquí es cuando son útiles plataformas de cartografía como la de Situm: puedes subir y georreferenciar tus planos fácilmente y las API y SDKs te darán toda esta información para que la integres y muestres (sin tener que lidiar con complejos conceptos cartográficos).

Imagen 3. Mapa de interiores georreferenciado

Si quieres gestionar edificios grandes (por ejemplo, de más de 500 metros de largo), una imagen raster sencilla no servirá: para poder dar un nivel de detalle decente, necesitarás unos planos con una resolución mayor que 4096×4096. Con mayores resoluciones, tu app móvil puede incluso no responder. Un enfoque común es usar raster tiles, que dividen una imagen de alta resolución en pequeñas porciones, y después las muestran de forma independiente en la aplicación. Situm también es compatible con este enfoque, siendo posible mostrar edificios enormes sin perder resolución.

Para aquellos que necesiten capacidades más avanzadas (por ejemplo, importar/exportar automáticamente la cartografía en formatos como CAD o GeoTIFF, múltiples capas raster por planta, compatibilidad con una larga lista de formatos OGC y estándares de cartografía, etc.) pueden consultar a proveedores como Carto o Esri. También hay buenas alternativas open source, como Mapserver o Geoserver, y si realmente necesitas conocer el terreno más a fondo, también puedes desarrollar tu propia solución a medida con PostGIS + QGIS. De cualquier manera, la localización en interiores y los SDKs de Situm se integrarán perfectamente.

Planos vectorizados

Hemos visto que los planos raster dividen el espacio en un conjunto de áreas más pequeñas (píxeles) y representan los elementos del edificio por el valor de esos píxeles. Este enfoque es sencillo, eficiente y se integra bien con cualquier app móvil y web, además de que permite representar todo tipo de espacios interiores, desde edificios pequeños hasta los grandes (¡en los que las raster tiles acuden al rescate!).

No obstante, hay algunas situaciones en las que los planos raster pueden no ser la opción más sensata. Por mencionar algunos:

  • Las imágenes de tus planos son realmente grandes. Has incrementado la resolución raster (e incluso usado raster tiles) pero todavía puedes ver esos píxeles pequeñitos, y no te gustan.
  • Quieres que el usuario interactúe con los elementos de tu cartografía. Tal vez quieras que cambie el color de una tienda cuando el usuario haga click en esa zona, o mostrar un texto cuyo nivel de zoom y su rotación varíen según los gestos del usuario, etc.
  • Quieres mostrar/ocultar/estilizar ciertos elementos de la cartografía de forma dinámica, dependiendo de condiciones predefinidas, ya sea la interacción del usuario o la lógica de tu aplicación. Un requerimiento habitual en este sentido es proporcionar una visión 3D extrayendo elementos de la cartografía.

Aquí es donde la mayor complejidad de los planos vectorizados entra en juego. Los planos vectorizados no son más que representaciones matemáticas de formas geométricas en 2D/3D. En lugar de dibujar la consulta de un médico en una imagen sencilla, definimos su geometría matemáticamente (por ejemplo, un rectángulo) ¡y lo renderizamos para ejecutarlo! Algunos formatos de vectores populares son GeoJSON, IMDF o Mapbox Vector Tiles.

Propiedades como la resolución, el color o la intensidad no han de estar necesariamente incrustadas en la información del vector, así que podemos cambiarlas al momento. Podemos mostrar la consulta del médico con una resolución, modificar su color de gris a marrón, e incluso proyectarlo para conseguir una vista 3D. ¡Y todo esto sin modificar la información original!

Por supuesto, esto también tiene sus desventajas. Los planos vectorizados son más complicados de generar y mantener. Mientras que los mapas raster pueden ser generados por casi cualquiera que sepa editar una imagen, los planos vectorizados requieren herramientas especializadas (por ejemplo, QGIS) y ciertos conocimientos de cartografía. Además, si tu edificio es grande y tiene muchos elementos de cartografía, el peso de los planos vectorizados puede crecer de forma desproporcionada, consumiendo muchos datos móviles de tus usuarios (¡ouch!). Por suerte, algunos formatos también soportan los tiles vectorizados (por ejemplo, Mapbox Vector Tiles), que alivian un poco este último problema.

2.2. Puntos de interés

Los planos son la parte central de la cartografía de cualquier edificio, ¡pero también hay otros elementos importantes! Uno de esos elementos son los Puntos de Interés (POIs).

POIs no son más que lugares importantes dentro del espacio. Pueden ser la consulta de un médico, una puerta de embarque, o simplemente una máquina expendedora. Los puntos de interés son importantes porque tus usuarios querrán encontrarlos, tener información sobre ellos y saber cómo llegar a ellos.

Si estás utilizando mapas raster, una manera de representar POIs es “pintarlos” por encima de los planos. Esta forma es lo suficientemente sencilla, aunque los resultados estarán lejos de lo ideal (por ejemplo, necesitarás re-dibujar el plano si cambia un POI). Un enfoque mejor es utilizar una plataforma de cartografía, como Situm, que te permita crear/editar POIs a partir de una interfaz web por encima de tus planos, y también asociarles información (por ejemplo, el nombre, la categoría, customizar el icono y mucho más). Después de eso, las APIs y SDKs recogerán tus POIs para que puedas integrarlos fácilmente en tus apps.

Imagen 2. Mapas de interiores con puntos de interés
Imagen 4. Mapas de interiores con puntos de interés

Si utilizas mapas vectorizados, también podrás definir los POIs como elementos de esos mapas, ya que los POIS son esencialmente unos puntos con información asociada. Las especificaciones sobre cómo hacerlo dependerán del formato que escojas.

2.3 Geofences

Los geofences son el último dato importante. Son similares a los POIs en el sentido de que representan elementos del edificio (por ejemplo, una tienda en un centro comercial, o el pasillo de un hospital), pero difieren en que los geofences son polígonos, así que representan áreas (y no solo puntos específicos).  

Los geofences son útiles porque trabajar con áreas es útil. Por ejemplo, puede que quieras destacar una zona en concreto de tu espacio, enviar una geopromoción a un usuario que entre en ella o incluso computar geoanalíticas (por ejemplo, el número de usuarios por geofence para comprobar la capacidad actual).

Mapas de interiores con geofences para promocionesAnalíticas de estancia de usuarios en geofences
Imagen 5. Los geofences son útiles para lanzar geopromociones y obtener geoanalíticas de una zona concreta

Una forma de definir y utilizar los geofences es servirse de una plataforma de cartografía como Situm. Con Situm puedes definir tus geofences por encima de tus planos a través de una interfaz web sencilla. Después de eso, puedes operar fácilmente con esos geofences en tu app utilizando nuestros REST APIs y SDKs móviles.

Otro método común de definir geofences es tratándolos como zonas dentro de tus mapas de vectores (en caso de que los utilices). Un procedimiento útil, por ejemplo, sería diferenciar las áreas del entorno utilizando una herramienta de mapas de vectores (por ejemplo, QGIS) y asociar información a esas zonas.

3. Rutas e indicaciones en interiores

En este punto, tu aplicación tendrá planos, puntos de interés y geofences. Y, esperamos, ¡también geolocalización! Pero esto no es suficiente: para proporcionar una experiencia de guiado al completo, necesitarás rutas e indicaciones giro a giro.

3.1 Rutas

Las rutas son caminos que conectan un origen con un destino. El origen es, normalmente, la geolocalización del usuario, y el destino es cualquier punto de interés o geofence al que el usuario quiere llegar.

Para computar rutas en tu app, necesitarás conocer las zonas de paso en tu edificio. Hay dos aproximaciones más comunes:

1) Una forma es definir zonas de tránsito y no tránsito en tu plano (por ejemplo, utilizando un conjunto de 0s y 1s).

2) Otra es crear un gráfico de guiado, un conjunto de nódulos y enlaces que representan los trayectos de paso del edificio, y por lo tanto todas las rutas posibles.

De cualquier manera, para computar la ruta más corta necesitarás implementar algoritmos como Dijkstra o A*.

Por suerte, plataformas como Situm hacen que esto sea pan comido. En Situm puedes seleccionar “clik y conecta los puntos” en el Dashboard de Situm para crear tu gráfico de guiado.

Imagen 6. Definición de rutas sobre las que se puede proporcionar guiado a los usuarios de una app

Así, podrás servirte de los SDKs de Situm para computar la ruta más corta sin tener que introducir el código de los algoritmos tú mismo. No solo eso, sino que Situm también te permite computar rutas especiales, tales como las que están adaptadas para personas con movilidad reducida, rutas que minimizan el número de cambios de planta, o rutas que evitan trayectos de cierto tipo (por ejemplo, se pueden evitar aquellos marcados como “privado” si el usuario no puede acceder a zonas privadas del edificio). ¡Todo lo que tienes que hacer es mostrar la ruta computada por encima de tus planos!

Mientras el usuario se va moviendo, tú necesitarás actualizar tu UX: mostrar cómo avanza el usuario en la ruta (por ejemplo, no mostrando las partes que el usuario ya ha pasado), volver a computar la ruta si el usuario se va “out-of-route”, actualizar la visión del plano en caso de que el usuario cambie de planta, etc. El SDK de Situm carga con todo este peso para que tú puedas centrarte en tu app.

3.2 Indicaciones

Poder mostrar una ruta es genial, pero las apps de guiado necesitan otro elemento importante: indicaciones giro a giro. Las indicaciones giro a giro son mensajes que informan al usuario sobre cómo llegar al destino, y la serie de pasos o acciones que debe hacer (por ejemplo, “avanza 40 metros; después, ve al segundo piso; después gira a la derecha y avanza 50 metros”, etc.)

Si lo piensas, una ruta no es más que un conjunto de desplazamientos (líneas rectas) que el usuario ha de seguir. Las indicaciones traducen esos desplazamientos a lenguaje humano. Pero… esta traducción no es tarea fácil. Para ello, necesitas:

  1. Definir y extraer el conjunto de acciones y modificaciones que el usuario debería realizar. Necesitarás computar las distancias a pie, los cambios de planta, y los cambios de orientación y ángulo entre trayectos consecutivos. Algunos ejemplos son:
    1. Camina hacia delante (acción) durante 100 metros (modificador).
    2. Turn (action) to your left (modifier).
  2. Mostrar la acción apropiada y el modificador al usuario en todo momento, teniendo en cuenta su posición actual y orientación. ¡Las rutas no son estáticas! Así que necesitarás actualizar constantemente la indicación actual a medida que el usuario avanza o gira.
    1. Por ejemplo, la indicación puede ser “Avanza hacia delante durante 100 metros”. Pero si el usuario se detiene y se da la vuelta, debes “insertar” una nueva indicación dinámica como “date la vuelta” antes de que el usuario pueda continuar con la indicación de “avanza hacia delante”.

De nuevo, plataformas como Situm hacen que esto esté chupado. Situm define tres acciones principales (gira, continúa hacia delante, cambia de planta) y dos modificadores (orientación y distancia). Proporciona todas las indicaciones para una ruta dada, y también provee actualizaciones constantes teniendo en cuenta la localización y orientación del usuario (¡e incluso vuelve a computar toda la ruta si es necesario!)

Y, si quieres ponerle la guinda final, puedes reproducir las indicaciones en alto utilizando las capacidades texto-a-voz de Android o iOS. Con solo unas pocas líneas de código, ¡también podrás hacer que tu app proporcione también guiado en interiores para los usuarios con discapacidad visual!

Video. App de Marineda City

4. Conéctalo todo con la mejor UX de navegación en interiores

Geolocalización, cartografía y rutas son los ingredientes requeridos para desarrollar una app de navegación. Pero la diferencia real entre una gran app y una mala es la experiencia de usuario (UX). Necesitarás combinar estos elementos para implementar tus casos de uso de forma que tu usuario espere y comprenda. Aunque esto cambia de app a app, te recomendamos echar un vistazo a cómo funciona nuestra app Situm Mapping Tool. Siéntete libre de inspirarte en nuestros diseños e interacciones, o incluso integrar esta misma UX con unas pocas líneas de código usando nuestro Módulo Wayfinding.

Suscríbete a nuestro boletín

INFORMACIÓN BÁSICA SOBRE PROTECCIÓN DE DATOS

Responsable del tratamiento: SITUM TECHNOLOGIES, S.L.
Contacto: Responsable del tratamiento: situm@situm.es
Responsable de protección: dpo@situm.es
Finalidad y base legal: Gestionar el envío de newsletter de SITUM sólo con consentimiento.
Legitimación: Consentimiento expreso del interesado.
Destinatarios: Los datos no serán cedidos a terceros salvo obligación legal.
Plazo de conservación: Mientras la parte interesada permanezca suscrita al newsletter (en cada newsletter enviado por Situm estará disponible un link para darse de baja).
Derechos: El interesado podrá revocar en cualquier momento su consentimiento, así como ejercitar los derechos de oposición, acceso, conservación, rectificación, limitación, supresión de datos y no ser objeto de una decisión basada únicamente en el tratamiento automatizado de datos, dirigiéndose por escrito a SITUM en las direcciones indicadas.
Información Adicional: Puede consultar la información adicional y detallada sobre Protección de Datos en nuestra política de privacidad.

Por favor, descarga tu copia aquí.

Muchas gracias por descargar nuestro whitepaper. No dudes en contactar con nosotros si quieres saber más sobre cómo nuestras soluciones pueden ayudar a tu negocio.


Cerrar ventana