Nominatim: una alternativa a Google Maps

Nominatim: una alternativa a Google Maps

En el ámbito de la geolocalización y búsqueda geográfica, contar con herramientas eficientes y versátiles es fundamental para desarrollar aplicaciones y proyectos exitosos. Una de esas herramientas es Nominatim, un poderoso motor de búsqueda geográfico y geocodificación de código abierto. Si buscas una forma fácil y rápida de integrar Nominatim en tus proyectos, has llegado al lugar correcto.

En este artículo, explicaré cómo utilizar Nominatim en conjunto con Docker, una plataforma de contenedores que simplifica el despliegue y la gestión de aplicaciones, y aprenderemos a crear una imagen de Docker que incluya Nominatim, lo cual nos permitirá disfrutar de todas las funcionalidades de este motor de búsqueda geográfica de manera rápida y sencilla.

A lo largo de este tutorial, descubriremos los pasos necesarios para construir nuestra propia imagen de Docker con Nominatim y explotar sus capacidades en la geolocalización y búsqueda de direcciones. No importa si eres un desarrollador experimentado o si das tus primeros pasos en el mundo de Docker y Nominatim: este artículo te guiará en el proceso de configuración y te proporcionará los conocimientos necesarios para integrar Nominatim en tus proyectos.

Antes de sumergirnos en el proceso de creación de la imagen de Docker, daremos un vistazo a las características y ventajas de Nominatim, así como a las posibles aplicaciones y casos de uso en los que este motor de búsqueda geográfico puede marcar la diferencia. Sin más preámbulos, comencemos nuestro viaje hacia la creación de una imagen de Nominatim con Docker y aprovechemos al máximo sus capacidades de geolocalización.


¿Qué es Nominatim?

Nominatim es un motor de búsqueda geográfico, conocido por su capacidad para realizar geocodificación precisa, es decir, convertir direcciones y nombres de lugares en coordenadas geográficas. Se basa en datos de OpenStreetMap (OSM), un proyecto de mapeo colaborativo de código abierto. Esto significa que los datos utilizados por Nominatim están disponibles libremente y puedes contribuir con mejorarlos.

Al decidir incorporar Nominatim en tu proyecto, tienes la posibilidad de personalizar y adaptar la configuración  según tus necesidades. Puedes definir el área geográfica específica en la que deseas que Nominatim realice las búsquedas, ajustar los parámetros de búsqueda y personalizar la apariencia de los resultados. Además, brinda la posibilidad de integrarse fácilmente con otras tecnologías y herramientas, como base de datos y sistemas de información geográfica.

Nominatim vs Google Maps

Existen varias razones por las cuales se podría considerar utilizar Nominatim en lugar de Google Maps en un proyecto. Por supuesto se deben analizar los requerimientos del negocio que se establezcan en el desarrollo de cualquier proyecto, pero los siguientes elementos son relevantes a la hora de tomar una decisión.

El primer aspecto a considerar es la licencia de datos. Nominatim se basa en OpenStreetMap (OSM), como ya mencionamos. En otras palabras, los datos de OSM están disponibles bajo una licencia abierta (ODbL), lo que te brinda libertad para utilizar, compartir y adaptar los datos según tus necesidades. En contraparte, Google Maps utiliza sus propios datos, que están sujetos a las restricciones y términos de uso de Google.

Uno de los elementos analizados al utilizar una herramienta es su costo. Nominatim es una opción atractiva desde el punto de vista económico por ser de acceso gratuito y no tener costos asociados por el uso de los servicios de geocodificación y búsqueda geográfica. En cambio, Google Maps ofrece una versión gratuita limitada, pero tiene planes de precios escalonados para un mayor volumen de uso, lo que podría generar costos significativos en proyectos a gran escala.

Una característica ya abordada es la personalización y control que Nominatim ofrece. Esta herramienta brinda un mayor control sobre la configuración y personalización de la funcionalidad de geocodificación y búsqueda. Puedes definir y ajustar parámetros específicos como el área geográfica de búsqueda, el enfoque en ciertos tipos de lugares y adaptar los resultados según tus necesidades. Google Maps ofrece opciones de personalización, pero en menor medida y dentro de los límites establecidos por la plataforma.

Al utilizar Nominatim, contribuyes con mejorar los datos de OpenStreetMap y formar parte de una comunidad global de usuarios y desarrolladores que trabajan juntos para mantener y mejorar la calidad de los datos geográficos. Esto te permite beneficiarte de una fuente de datos en constante evolución y participar activamente en su mejora.

Nominatim es un software de código abierto que puedes instalar y ejecutar en tu propio servidor o infraestructura, lo que te da más flexibilidad en términos de alojamiento y adaptación a tus necesidades técnicas. En cambio, Google Maps es un servicio en la nube que requiere utilizar la infraestructura de Google para su funcionamiento.

Si bien Google Maps tiene sus propios beneficios, como una interfaz de usuario intuitiva y una amplia gama de funciones adicionales integradas, Nominatim se destaca por su enfoque de datos abiertos, personalización, control y flexibilidad técnica. La elección entre ambos depende de las necesidades y requisitos específicos de tu proyecto, así como de tus consideraciones legales, económicas y de privacidad.

Ahora que hemos explorado las características y ventajas de Nominatim, es momento de adentrarnos en el proceso de creación del entorno de Docker a través de la herramienta Docker Compose que incluirá este motor de búsqueda geográfico vinculado con el sistema de gestor de base de datos PostgreSQL.

Preparar el directorio de trabajo

Para crear tu entorno de Docker para PostgreSQL y Nominatim, debes comenzar con la creación de un archivo docker-compose.yml. Simplemente, es un archivo de texto que contiene todas las instrucciones necesarias para construir el entorno de Docker. Crea un directorio nuevo y navega hasta él en tu terminal. Este será tu directorio de trabajo para el tutorial.

mkdir tutorial-postgres-nominatim
cd tutorial-postgres-nominatim

Dentro del directorio de trabajo, crea un archivo llamado docker-compose.yml y ábrelo en un editor de texto.

touch docker-compose.yml

Escribir el contenido del docker-compose.yml

Agrega el siguiente contenido al archivo docker-compose.yml:

version: '3'


services:


  nominatim:

    image: mediagis/nominatim:4.2

    environment:

      - PBF_URL=https://download.geofabrik.de/north-america/mexico-latest.osm.pbf

      - REPLICATION_URL=http://download.geofabrik.de/north-america/mexico-updates/

      - IMPORT_WIKIPEDIA=false

      - NOMINATIM_PASSWORD=supersecret

    ports:

      - 8080:8080

    volumes:

      - nominatim-data:/var/lib/postgresql/14/main


volumes:

  nominatim-data:


En el fragmento de código anterior, hay varios aspectos que se deben resaltar. Lo primero es que se construye un servicio denominado nominatim a partir de una imagen etiquetada mediagis/nominatim, que ya contiene una precompilación de la integración de Nominatim con el sistema de base de datos PostgreSQL y además con la extensión de PostGIS habilitada. Esto significa que, al utilizar esta imagen, se omite el paso de crear un Dockerfile para instalar todas las dependencias necesarias, lo que simplifica el proceso de configuración y reduce el tiempo de implementación.

Otro elemento importante a tener en cuenta son las variables de entorno. En este ejemplo, se desea personalizar el área de búsqueda únicamente para México, por lo que se debe establecer la variable de entorno PBF_URL con la ruta donde se encuentra la fuente de datos OSM con la última actualización del país a importar dentro de Nominatim en la primera carga.

Por otra parte, la variable REPLICATION_URL tiene la responsabilidad de almacenar la ruta para obtener las futuras actualizaciones. Asimismo, la variable IMPORT_WIKIPEDIA se establece para ignorar el proceso de importación de los datos desde Wikipedia y, por último pero no menos importante, se establece la variable NOMINATIM_PASSWORD, que contiene la credencial para conectarse a la base de datos.

En general, el uso de variables de entorno es una práctica común en la configuración de contenedores Docker. Estas variables permiten personalizar el comportamiento de las aplicaciones y servicios ejecutados dentro de los contenedores, lo que aumenta la flexibilidad y la capacidad de adaptación de los mismos.

Ejecutar el contenedor

Luego de guardar todo el contenido del archivo docker-compose.yml,  asegúrate de estar dentro del directorio de trabajo y ejecuta el siguiente comando asociado con el entorno de Docker:

docker compose up --build

Este comando es muy útil para varios servicios que se encuentran dentro del docker-compose.yml, ya que permite tener cada servicio en un contenedor individual. En este caso, se ejecutará únicamente el servicio de Nominatim y se encontrará disponible una vez que se muestre el mensaje que aparece a continuación.


Acceder a Nominatim

Una vez que hayas iniciado el contenedor y se haya puesto en ejecución, podrás acceder a la herramienta de geocodificación Nominatim a través de tu navegador web.

Para hacerlo, simplemente introduce la siguiente dirección en tu navegador: http://localhost:8080/. Ten en cuenta que lo que encontrarás en esa ruta será una respuesta en formato JSON que contiene información detallada sobre la ubicación que estás buscando.

A partir de esta información, podrás obtener datos como la latitud, la longitud y la dirección exacta de cualquier lugar que desees buscar. Aquí dejo un comando para probar una búsqueda sencilla de un lugar de interés como el Palacio de Bellas Artes de México.

curl http://localhost:8080/search.php\?q\=Palacio%20de%20Bellas%20Artes\&polygon_geojson\=1\&format\=jsonv2 | jq

En resumen, la integración de Nominatim con Docker y PostgreSQL es una solución eficiente y versátil para la gestión de búsquedas geográficas y geolocalización en aplicaciones y proyectos. Al utilizar la imagen precompilada de MEDIAGIS, se simplifica el proceso de configuración y se reduce el tiempo de implementación, lo que permite enfocarse en el desarrollo de la aplicación en sí misma.

Además, el uso de variables de entorno permite personalizar el comportamiento de Nominatim de acuerdo con las necesidades específicas del proyecto. En general, esta solución ofrece una alternativa atractiva a otras opciones comerciales, como Google Maps, y brinda la flexibilidad y la capacidad de adaptación que se requiere en proyectos de desarrollo de software.

Además, la imagen de Docker de Nominatim proveída por MEDIAGIS es de código abierto, lo que significa que cualquier persona puede acceder al código fuente y contribuir a mejorarlo. Esto permite que la comunidad de desarrolladores pueda colaborar para solucionar problemas o agregar nuevas funcionalidades al proyecto, lo que beneficia a todos los usuarios de la herramienta.

Espero que esta guía introductoria haya sido de ayuda.

¡Comienza a explorar el mundo con Nominatim hoy mismo!

💡
Las opiniones y comentarios emitidos en este artículo son propiedad única de su autor y no necesariamente representan el punto de vista de Listopro.

Listopro Community da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.