OpenStreetMap dentro de Emacs
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í:

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
osm
: éste es obligatorio para determinar el tipo de enlace que se está utilizando. En este caso, OpenStreetMap.tipo-mapa
: este campo hace que se utilice uno de los múltiples tipos de mapas que se permiten en OSM. Si lo omitimos, utilizará el mapa por defecto de OSM, el Mapnik, pero podemos utilizar también otros valores:opentopomap
: mapa topográfico.cyclosm
: mapa específico para ciclistas.openriverboatmap
humanitarian
stamen
: Los Stamen son mapas más artísticos, destacando el watercolor, pero hay varios más donde poder elegir.Posición en el mapa: El tercer campo es un campo compuesto por tres valores separados por comas:
Latitud, Longitud y Nivel: A nivel más alto, más detalles. Se pasa desde el nivel 1 ó 2, que serían la representación del mapa mundial, hasta el 19 que sería la representación más detallada.1
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:
- <osm:Monumento a Velázquez, Paseo del Prado, Madrid>
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:
<osm: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:

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:

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.
Comentarios