# Intermodal Routing API

Routing intermodal directions between locations based on the ‘HERE Intermodal Routing’ API.

## Intermodal routes

In order to calculate route geometries (`LINESTRING`) between pairs of points using the ‘HERE Intermodal Routing API’ the function `intermodal_route()` is used. The function takes origin and destination locations as `sf` objects containing geometries of type `POINT` as input. Routes can be limited to a maximum number of allowed transfers (includes mode changes and public transit transfers), by specifying the `transfer` parameter.

    ## POIs for intermodal routes in Berlin (service is not yet available in Switzerland)
    poi_berlin <- data.frame(
      name = c("HERE Berlin", "Treptow", "Potsdam", "Tiergarten"),
      lng = c(13.384944, 13.461215, 13.058351, 13.336490),
      lat = c(52.531056, 52.493908, 52.403587, 52.514557)
    ) %>%
      st_as_sf(coords = c("lng", "lat")) %>%
      st_set_crs(4326)

    # Request routes
    intermodal_routes <- route(
      origin = poi_berlin[1:2, ],
      destination = poi_berlin[3:4, ]
    )

The `id` column corresponds to the row of the input locations (`origin` and `destination`) and the `rank` column enumerates the alternative routes. The maximum number of alternatives can be set by the `results` parameter. Each row in the returned `sf` object corresponds to a route section with a transport mode in a vehicle without a transfer.

id | rank | departure | origin | arrival | destination | type | mode | vehicle | provider | direction | distance | duration
--- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
1 | 1 | 2020-06-28 14:16:07 | ORIG | 2020-06-28 14:54:08 | DEST | taxi | taxi | NA | Taxi Berlin 202020 | NA | 37822 | 2281
1 | 2 | 2020-06-28 14:26:00 | ORIG | 2020-06-28 14:29:00 | U Naturkundemuseum | pedestrian | pedestrian | NA | NA | NA | 234 | 180
1 | 2 | 2020-06-28 14:29:00 | U Naturkundemuseum | 2020-06-28 14:32:00 | S+U Friedrichstr. Bhf | transit | subway | U6 | Berliner Verkehrsbetriebe | U Alt-Mariendorf | 1308 | 180
1 | 2 | 2020-06-28 14:37:00 | S+U Friedrichstr. Bhf | 2020-06-28 15:06:00 | S Potsdam Hauptbahnhof | transit | regionalTrain | RE1 | DB Regio AG | Brandenburg, Hauptbahnhof | 27437 | 1740
1 | 2 | 2020-06-28 15:12:00 | S Potsdam Hauptbahnhof | 2020-06-28 15:19:00 | Potsdam, Nauener Tor | transit | lightRail | Tram 96 | Verkehrsbetrieb Potsdam GmbH | Potsdam, Campus Jungfernsee | 1623 | 420
1 | 2 | 2020-06-28 15:19:00 | Potsdam, Nauener Tor | 2020-06-28 15:20:00 | DEST | pedestrian | pedestrian | NA | NA | NA | 77 | 60

Print the intermodal routes on an interactive leaflet map:

    mapview(intermodal_routes,
            zcol = "mode",
            lwd = intermodal_routes$duration/max(intermodal_routes$duration)*5,
            layer.name = "Intermodal route",
            map.types = c("Esri.WorldTopoMap"),
            homebutton = FALSE
    )

## API Reference

- Intermodal Routing API