Notxor tiene un blog

Defenestrando la vida

OpenStreetMap dentro de Emacs

2022-03-27

Una de las cosas que me gustan es la capacidad que tenemos los seres humanos para representar cosas más o menos concretas en otras más o menos abstractas. Los mapas son una expresión de esta capacidad y se convierten en algo fascinante. Los miras y te imaginas cómo puede ser el terreno que representan. Hoy traigo un tema que relaciona dos de las cosas que me más me gustan: los mapas y Emacs en una sola entrega.

Si documentas todo con org-mode y tienes necesidad también de guardar información que localice los eventos en un mapa, la combinación de Emacs y OpenStreetMap puede ser una solución bastante efectiva. Por ejemplo, si quieres anotar dónde se encuentra el monumento al Tío Jorge en Zaragoza puedes dar muchas explicaciones o escribir en un fichero algo como:

[[osm:openstreetmap:41.66523,-0.87661,17][Monumento al Tío Jorge en el parque que lleva su nombre.]]

Monumento al Tío Jorge en el parque que lleva su nombre. ← El enlace funciona en el entorno de Emacs, pero como se puede comprobar, no ocurre lo mismo con el html generado a partir de él. Es decir, al pinchar en el enlace anterior, dentro de Emacs, la ventana se convierte en algo así:

Captura_osm-estatua-tio-jorge.png

Como se puede apreciar a la izquierda se encuentra el mismo buffer donde estoy escribiendo este artículo y a la derecha un mapa, perfectamente centrado en el punto que hemos determinado en el enlace. ¿Cómo se genera el enlace? Sencillo: la estructura del mismo tiene un formato de campos separados por símbolos ::

osm:tipo-mapa:localización

También se puede establecer una dirección de una manera más sencilla, como por ejemplo, remarcar algún punto importante, ya situado en el mapa:

En este caso, el link utiliza los delimitadores < y > y también va precedido por osm, sin embargo aquí se detalla el nombre del lugar señalado, la calle y la ciudad. Utiliza el habitual mapa Mapnik de OSM en el nivel más detallado (19). Si hay varios destinos que coinciden en nombre, nos mostrará una lista donde podremos seleccionar el que queramos. Por ejemplo:

Museo del Prado, Paseo del Prado, Madrid

Como se puede apreciar, tampoco se traducen los enlaces a algo que pueda abrir el navegador cuando se convierte a html. Además, puesto que en el mapa se encuentran varias etiquetas como «Museo del Prado» y varias direcciones etiquetadas como «museo» en el «Paseo del Prado», nos muestra una lista de museos, el Thyssen-Bornemisza, el Museo Naval, el Museo del Prado, el Museo del Jamón2, nos muestra todas las alternativas:

Captura_osm-por-direccion.png

Bookmarks

Por si nos faltaba algo, también podemos almacenar nuestras direcciones más habituales en un archivo que se llama bookmarks y que se guardará en nuestro directorio .emacs.d.

El fichero tiene el siguiente aspecto:

;;;; Emacs Bookmark Format Version 1 ;;;; -*- coding: utf-8-emacs -*-
;;; This format is meant to be slightly human-readable;
;;; nevertheless, you probably don't want to edit it.
;;; -*- End Of Bookmark File Format Version Stamp -*-
(("osm: Monumento a Velázquez, Paseo del Prado, Jerónimos, Retiro, Madrid, Área metropolitana de Madrid y Corredor del Henares, Comunidad de Madrid, 28014, España, 40.41° -3.69° Z19 Mapnik"
 (coordinates 40.413726999999994 -3.692691849999999 19)
 (server . default)
 (handler . osm-bookmark-jump))
("osm: Paseo Escopeteros del Rabal, Arrabal, Zaragoza, Aragón, 50015, España, 41.67° -0.88° Z17 Mapnik"
 (coordinates 41.66523 -0.87661 17)
 (server . default)
 (handler . osm-bookmark-jump))
)

Los lugares marcados aparecerán en la visualización del mapa:

Captura_osm-bookmarks.png

También podemos señalar puntos mediante código elisp. Por ejemplo:

(osm "Palacio de la Aljafería, Zaragoza")
(osm 42.325587 -0.612531 15 opentopomap "Castillo de Loarre")

En el primer caso se señala un punto destacado del mapa mediante una cadena de dirección que se buscará en el mismo. En la segunda forma se establecen unas coordenadas de latitud y longitud, un nivel de mapa y también el servidor que queremos utilizar del mismo dándole un nombre.

Instalar y configurar el paquete

Si creéis que este paquete os puede ser útil, sólo tenéis que instalarlo y probarlo. La instalación, como siempre es un simple comando:

M-x package-install RET osm

Por no dar muchas vueltas y alargar innecesariamente esta entrada del blog, la configuración que tengo en mi init.el es la siguiente:

(use-package osm
  :bind (("C-c m h" . osm-home)
         ("C-c m s" . osm-search)
         ("C-c m v" . osm-server)
         ("C-c m t" . osm-goto)
         ("C-c m x" . osm-gpx-show)
         ("C-c m j" . osm-bookmark-jump))
  :custom
  (osm-server 'default)
  (osm-copyright t)
  :init
  (with-eval-after-load 'org
    (require 'osm-ol)))

Esta configuración está copiada directamente de la página de hithub del paquete.

Una vez abierto un buffer osm-mode, dentro de él nos podemos mover con el teclado y con el ratón:

ratón tecla acción
rueda ↓ + Ampliar mapa
rueda ↑ - Reducir mapa
pinchar + desplazar flechas Mover el mapa
  c Centrar mapa
  v Cambiar servidor
  s Buscar sitio
  t Ir coordenadas

En el buffer gráfico aparecen un menú de acciones y un widget que permite cambiar el tipo de mapa empleado. Aunque todas las funciones se pueden realizar con su correspondiente tecla asociada y/o se pueden mapear a la combinación de teclas que sean más cómodas para el usuario.

Conclusiones

La parte de visualizar trazas GPX no la he probado, pero también se puede. Después de probarlo unos días, creo que me será de utilidad, teniendo en cuenta además, la capacidad de poder localizar los lugares también desde código elisp. El que permita utilizar código abre la posibilidad de interactuar más flexiblemente con el mapa. O el poder meter en un archivo org-mode un enlace a los lugares a los que se haga referencia.

Footnotes:

1

En algunos tipos de mapas no están todas las representaciones y es posible que falten las últimas.

2

Este es mejor visitarlo antes para coger fuerzas antes de visitar los demás.

Categoría: mapas emacs

Comentarios

Debido a algunos ataques mailintencionados a través de la herramienta de comentarios, he decidido no proporcionar dicha opción en el Blog. Si alguien quiere comentar algo, me puede encontrar en Mastodon y en Diaspora con el nick de Notxor.

También se ha abierto un grupo en Telegram, para usuarios de esa red.

Disculpen las molestias.