Git Product home page Git Product logo

osm's Introduction

osm.el - OpenStreetMap viewer for Emacs

GNU Emacs GNU ELPA GNU-devel ELPA MELPA MELPA Stable

The map data is © OpenStreetMap contributors, licensed under the ODbL The map rendering is © OpenTopoMap, licensed under the CC-BY-SA.

Osm.el is a tile-based map viewer, with a responsive movable and zoomable display. The map can be controlled with the keyboard or with the mouse. The viewer fetches the map tiles in parallel from tile servers via the curl program. The package comes with a list of multiple preconfigured tile servers. You can bookmark your favorite locations using regular Emacs bookmarks or create links from Org files to locations. Furthermore the package provides commands to search for locations by name and to open and display GPX tracks.

Features

  • Responsive, zoomable and movable map display
  • Display of tracks and POIs from GPX file
  • Parallel fetching of tiles with curl
  • Moving in large and small steps
  • Mouse support (dragging, clicking, menu)
  • Map scale indicator
  • Go to coordinate
  • Search for location by name
  • Org link, Geo url and Elisp link support
  • Bookmarked positions with pins
  • Multiple preconfigured tile servers

Configuration

The package is available on GNU ELPA and can be installed with package-install. Note that Osm.el requires Emacs 27 and depends on the external curl program. Emacs must be built with libxml, libjansson, librsvg, libjpeg and libpng support. The following is an example configuration which relies on use-package. Please take a look at the wiki for additional configuration.

(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
  ;; Take a look at the customization group `osm' for more options.
  (osm-server 'default) ;; Configure the tile server
  (osm-copyright t)     ;; Display the copyright information

  :init
  ;; Load Org link support
  (with-eval-after-load 'org
    (require 'osm-ol)))

Bookmarks, Org links, Geo urls and Elisp links

There exist multiple methods to store the current location.

  • b: Create a bookmark of the current location.
  • l: Store an Org link to the current location. The link can the be inserted into an Org buffer with C-c C-l.
  • u: Save the geo url of the current location in the kill ring. The url can be inserted in another buffer via C-y.
  • C-u u: Save an Elisp link to the current location in the kill ring.

Bookmarks and Org links can be created at point with the mouse, see osm-bookmark-set-click and osm-org-link-click.

Org link examples

Click on a link or press RET to jump to the location. These links work in Org buffers in Emacs. Furthermore you can open Org links in arbitrary buffers with org-open-at-point-global. I recommend binding the command to a convenient key, e.g., C-c o. The format of the links complies with the geo URI scheme defined by RFC 5870.

[[geo:41.869560826994544,12.45849609375;z=6;s=opentopomap][Italia, 41.87° 12.46° OpenTopoMap]]
[[geo:51.48950698022105,-0.144195556640625;z=11][London, England, 51.49° -0.14°]]
[[geo:55.686875255964424,12.569732666015625;z=12;s=cyclosm][København, Danmark, 55.69° 12.57° CyclOSM]]
[[geo:40.72956780913898,-73.97918701171875;z=12;s=stamen-watercolor][New York, United States, 40.73° -73.98° Stamen Watercolor]]
[[geo:27.961656050984658,86.89224243164062;z=13;s=opentopomap][Mount Everest, 27.96° 86.89° OpenTopoMap]]
<geo:Tour Eiffel, Av. Gustave Eiffel, Paris> (Address link)

Elisp link examples

Place the point behind the closing parenthesis and press C-x C-e to jump to the location. The Elisp links can be used in arbitrary text files. Since they are Elisp s-expressions they can be easily manipulated programatically.

(osm 41.869561 12.458496 6 'opentopomap "Lazio, Italia")
(osm 51.489507 -0.144196 11 "London, Greater London, England, SW1A 2DX, United Kingdom")
(osm 55.686875 12.569733 12 'cyclosm "København, Københavns Kommune, Region Hovedstaden, 1357, Danmark")
(osm 40.729568 -73.979187 12 'stamen-watercolor "New York County, New York, United States")
(osm 27.961656 86.892242 13 'opentopomap "Khumjung, Khumbupasanglahmu, सोलुखुम्बु, Province #1, Nepal")
(osm "Tour Eiffel, Av. Gustave Eiffel, Paris") ;; Address link

Commands and Key Bindings

Top-level commands:

  • osm-home: Open new map at home coordinates
  • osm-search: Search and jump to location
  • osm-goto: Go to coordinates
  • osm-server: Select server
  • osm-bookmark-jump: Jump to bookmark
  • osm-gpx-show: Show GPX file in map viewer

Key bindings in osm-mode buffer:

  • <arrow>: Small step scrolling
  • C-<arrow>, M-<arrow>: Large step scrolling
  • +, SPC: osm-zoom-in - Zoom in
  • -, S-SPC: osm-zoom-out - Zoom out
  • <mouse-1>: osm-transient-click - Place transient pin at point
  • <mouse-2>: osm-org-link-click - Store point as Org link
  • <mouse-3>: osm-bookmark-set-click - Store point as bookmark
  • <osm-bookmark mouse-*>: osm-bookmark-delete-click - Click on bookmark at point to delete
  • <down-mouse-*>: osm-mouse-drag - Drag the map with the mouse
  • d, DEL: osm-bookmark-delete - Delete selected bookmark
  • t: osm-goto - Go to location
  • c: osm-center - Center to currently marked pin
  • h: osm-home - Go to home location
  • s: osm-search - Search for location
  • v: osm-server - Select tile server
  • x: osm-gpx-show - Show tracks and POIs from GPX file
  • X: osm-gpx-hide - Hide overlays from GPX file
  • l: org-store-link - Store Org link
  • u: osm-save-url - Save geo url in the kill ring
  • b: osm-bookmark-set - Set bookmark
  • n: osm-bookmark-rename - Rename selected bookmark
  • j: osm-bookmark-jump - Jump to bookmark
  • q: quit-window - Close buffer and window
  • o: clone-buffer - Clone buffer

Related projects

There have been other attempts at map viewers in Emacs before.

Contributions

Since this package is part of GNU ELPA contributions require a copyright assignment to the FSF.

osm's People

Contributors

minad avatar pabl0 avatar nagy avatar danieldegroot2 avatar fw623 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.