Skip to content

Organic Maps ​

Organic Maps is an offline maps and navigation app. Protocol Launcher allows you to generate Organic Maps deep links.

Usage ​

There are two ways to use this library:

  • On-Demand import from subpaths enables tree-shaking and keeps bundles small.
  • Full Import from the root package is convenient but includes all app modules.

Pick On-Demand for production builds; Full Import is fine for quick scripts or demos.

Select Installation Method

On-Demand
Recommended. Optimized for production.
Full Import
Convenient. Good for quick scripts.

URL Methods ​

This module mirrors the Organic Maps links documented on the official API page: shared-point links, map?v=1, route?v=1, v2 dir and nav, search, handled geo: examples, Android intent launch URIs, and the crosshair position chooser.

The same page also lists compatibility examples for MAPS.ME, Google Maps, OpenStreetMap, 2GIS, and downloadable KML/KMZ/GPX files. Those are not Organic Maps URL helpers, so this module does not generate them.

Show Shared Point ​

Show an Organic Maps shared point by its short-code path, with an optional title.

On-Demand
ts
import { showSharedPoint } from 'protocol-launcher/organic-maps'

const url = showSharedPoint({
  code: 'o4B4pYZsRs',
  title: 'Zoo_Zürich',
})

Show Map ​

Show one or more points on the map with the documented map?v=1 link.

On-Demand
ts
import { showMap } from 'protocol-launcher/organic-maps'

const url = showMap({
  points: [
    { ll: '22.17319,-159.65687', title: 'Kalalau Camping' },
    { ll: '22.17168,-159.66096', title: 'Dream Beach' },
    { ll: '22.17182,-159.65776' },
  ],
})

Route ​

Build a v1 route with the documented route types: vehicle, pedestrian, bicycle, and transit.

On-Demand
ts
import { route } from 'protocol-launcher/organic-maps'

const url = route({
  start: { ll: '50.183933,8.942871', address: 'Start Point' },
  destination: { ll: '49.998912,8.278198', address: 'EndPoint' },
  type: 'vehicle',
})

Directions ​

Build a v2 multi-stop route with v2/dir.

On-Demand
ts
import { directions } from 'protocol-launcher/organic-maps'

const url = directions({
  origin: '52.5200,13.4050',
  originName: 'Warehouse Berlin',
  destination: '52.5163,13.3777',
  destinationName: 'Customer',
  waypoints: ['52.5304,13.3850', '52.5450,13.3920'],
  waypointNames: ['Pickup 1', 'Pickup 2'],
  mode: 'drive',
})

Start v2 navigation with v2/nav, waypoint callbacks, and a route completion callback.

On-Demand
ts
import { navigate } from 'protocol-launcher/organic-maps'

const url = navigate({
  origin: 'currentLocation',
  destination: '52.5163,13.3777',
  destinationName: 'Customer',
  waypoints: ['52.5304,13.3850', '52.5450,13.3920'],
  waypointCallbacks: ['delivery://stop/1', 'delivery://stop/2'],
  callback: 'delivery://route/complete',
  mode: 'drive',
})

Search in Organic Maps with optional center coordinates and locale.

On-Demand
ts
import { search } from 'protocol-launcher/organic-maps'

const url = search({
  cll: '47.3813,8.5889',
  locale: 'de',
  query: 'Mame',
})

Geo ​

Generate a geo: URI form handled by Organic Maps.

On-Demand
ts
import { geo } from 'protocol-launcher/organic-maps'

const url = geo({
  coordinates: '35.341714,33.32231',
  title: 'Custom Title',
})

Crosshair ​

Open the Organic Maps position chooser with the documented crosshair link.

On-Demand
ts
import { crosshair } from 'protocol-launcher/organic-maps'

const url = crosshair({
  cll: '47.3813,8.5889',
  appname: 'Google Maps',
})

Android Intent ​

Build one of the documented Android intent URIs for launching Organic Maps.

On-Demand
ts
import { androidIntent } from 'protocol-launcher/organic-maps'

const url = androidIntent({
  packageName: 'app.organicmaps',
})

Generated URLs ​

ts
showSharedPoint({ code: 'o4B4pYZsRs', title: 'Zoo_Zürich' })
// => 'om://o4B4pYZsRs/Zoo_Zürich'

showMap({
  points: [
    { ll: '22.17319,-159.65687', title: 'Kalalau Camping' },
    { ll: '22.17168,-159.66096', title: 'Dream Beach' },
    { ll: '22.17182,-159.65776' },
  ],
})
// => 'om://map?v=1&ll=22.17319,-159.65687&n=Kalalau%20Camping&ll=22.17168,-159.66096&n=Dream%20Beach&ll=22.17182,-159.65776'

route({
  start: { ll: '50.183933,8.942871', address: 'Start Point' },
  destination: { ll: '49.998912,8.278198', address: 'EndPoint' },
  type: 'vehicle',
})
// => 'om://route?v=1&sll=50.183933,8.942871&saddr=Start%20Point&dll=49.998912,8.278198&daddr=EndPoint&type=vehicle'

directions({
  origin: '52.5200,13.4050',
  originName: 'Warehouse Berlin',
  destination: '52.5163,13.3777',
  destinationName: 'Customer',
  waypoints: ['52.5304,13.3850', '52.5450,13.3920'],
  waypointNames: ['Pickup 1', 'Pickup 2'],
  mode: 'drive',
})
// => 'om://v2/dir?origin=52.5200,13.4050&origin_name=Warehouse%20Berlin&destination=52.5163,13.3777&destination_name=Customer&waypoints=52.5304,13.3850|52.5450,13.3920&waypoint_names=Pickup%201|Pickup%202&mode=drive'

navigate({
  origin: 'currentLocation',
  destination: '52.5163,13.3777',
  destinationName: 'Customer',
  waypoints: ['52.5304,13.3850', '52.5450,13.3920'],
  waypointCallbacks: ['delivery://stop/1', 'delivery://stop/2'],
  callback: 'delivery://route/complete',
  mode: 'drive',
})
// => 'om://v2/nav?origin=currentLocation&destination=52.5163,13.3777&destination_name=Customer&waypoints=52.5304,13.3850|52.5450,13.3920&waypoint_callbacks=delivery%3A%2F%2Fstop%2F1|delivery%3A%2F%2Fstop%2F2&callback=delivery%3A%2F%2Froute%2Fcomplete&mode=drive'

search({ cll: '47.3813,8.5889', locale: 'de', query: 'Mame' })
// => 'om://search?cll=47.3813,8.5889&locale=de&query=Mame'

geo({ coordinates: '35.341714,33.32231', title: 'Custom Title' })
// => 'geo:35.341714,33.32231(Custom%20Title)'

crosshair({ cll: '47.3813,8.5889', appname: 'Google Maps' })
// => 'om://crosshair?cll=47.3813,8.5889&appname=Google%20Maps'

androidIntent({ packageName: 'app.organicmaps' })
// => 'intent://#Intent;package=app.organicmaps;scheme=om;end;'

Official Documentation ​