forked from opentripplanner/OpenTripPlanner
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'upstream/dev-2.x' into geocoder-agency
- Loading branch information
Showing
116 changed files
with
2,325 additions
and
1,685 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -16,7 +16,7 @@ jobs: | |
steps: | ||
|
||
- name: Checkout | ||
uses: actions/checkout@v3.1.0 | ||
uses: actions/checkout@v4 | ||
with: | ||
token: ${{ secrets.CHANGELOG_TOKEN }} | ||
|
||
|
@@ -62,7 +62,7 @@ jobs: | |
git config --global user.email '[email protected]' | ||
- name: Checkout | ||
uses: actions/checkout@v3.1.0 | ||
uses: actions/checkout@v4 | ||
with: | ||
token: ${{ secrets.CHANGELOG_TOKEN }} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,194 @@ | ||
# Mapbox Vector Tiles API | ||
|
||
## Contact Info | ||
|
||
- HSL, Finland | ||
- Arcadis, US | ||
|
||
## Documentation | ||
|
||
This API produces [Mapbox vector tiles](https://docs.mapbox.com/vector-tiles/reference/), which are | ||
used by [Digitransit-ui](https://github.com/HSLdevcom/digitransit-ui) and | ||
[`otp-react-redux`](https://github.com/opentripplanner/otp-react-redux) to show information about | ||
public transit entities on the map. | ||
|
||
The tiles can be fetched from `/otp/routers/{routerId}/vectorTiles/{layers}/{z}/{x}/{y}.pbf`, | ||
where `layers` is a comma separated list of layer names from the configuration. | ||
|
||
Maplibre/Mapbox GL JS also requires a tilejson.json endpoint which is available at | ||
`/otp/routers/{routerId}/vectorTiles/{layers}/tilejson.json`. | ||
|
||
Translatable fields in the tiles are translated based on the `accept-language` header in requests. | ||
Currently, only the language with the highest priority from the header is used. | ||
|
||
### Configuration | ||
|
||
To enable this you need to add the feature `otp-config.json`. | ||
|
||
```json | ||
// otp-config.json | ||
{ | ||
"otpFeatures": { | ||
"SandboxAPIMapboxVectorTilesApi": true | ||
} | ||
} | ||
``` | ||
|
||
The feature must be configured in `router-config.json` as follows | ||
|
||
```JSON | ||
{ | ||
"vectorTiles": { | ||
"basePath": "/only/configure/if/required", | ||
"layers": [ | ||
{ | ||
"name": "stops", | ||
"type": "Stop", | ||
"mapper": "Digitransit", | ||
"maxZoom": 20, | ||
"minZoom": 14, | ||
"cacheMaxSeconds": 600 | ||
}, | ||
{ | ||
"name": "stations", | ||
"type": "Station", | ||
"mapper": "Digitransit", | ||
"maxZoom": 20, | ||
"minZoom": 12, | ||
"cacheMaxSeconds": 600 | ||
}, | ||
// all rental places: stations and free-floating vehicles | ||
{ | ||
"name": "citybikes", | ||
"type": "VehicleRental", | ||
"mapper": "Digitransit", | ||
"maxZoom": 20, | ||
"minZoom": 14, | ||
"cacheMaxSeconds": 60, | ||
"expansionFactor": 0.25 | ||
}, | ||
// just free-floating vehicles | ||
{ | ||
"name": "rentalVehicles", | ||
"type": "VehicleRentalVehicle", | ||
"mapper": "DigitransitRealtime", | ||
"maxZoom": 20, | ||
"minZoom": 14, | ||
"cacheMaxSeconds": 60 | ||
}, | ||
// just rental stations | ||
{ | ||
"name": "rentalStations", | ||
"type": "VehicleRentalStation", | ||
"mapper": "Digitransit", | ||
"maxZoom": 20, | ||
"minZoom": 14, | ||
"cacheMaxSeconds": 600 | ||
}, | ||
// Contains just stations and real-time information for them | ||
{ | ||
"name": "realtimeRentalStations", | ||
"type": "VehicleRentalStation", | ||
"mapper": "DigitransitRealtime", | ||
"maxZoom": 20, | ||
"minZoom": 14, | ||
"cacheMaxSeconds": 60 | ||
}, | ||
// This exists for backwards compatibility. At some point, we might want | ||
// to add a new real-time parking mapper with better translation support | ||
// and less unnecessary fields. | ||
{ | ||
"name": "stadtnaviVehicleParking", | ||
"type": "VehicleParking", | ||
"mapper": "Stadtnavi", | ||
"maxZoom": 20, | ||
"minZoom": 14, | ||
"cacheMaxSeconds": 60, | ||
"expansionFactor": 0.25 | ||
}, | ||
// no real-time, translatable fields are translated based on accept-language header | ||
// and contains less fields than the Stadtnavi mapper | ||
{ | ||
"name": "vehicleParking", | ||
"type": "VehicleParking", | ||
"mapper": "Digitransit", | ||
"maxZoom": 20, | ||
"minZoom": 14, | ||
"cacheMaxSeconds": 600, | ||
"expansionFactor": 0.25 | ||
}, | ||
{ | ||
"name": "vehicleParkingGroups", | ||
"type": "VehicleParkingGroup", | ||
"mapper": "Digitransit", | ||
"maxZoom": 17, | ||
"minZoom": 14, | ||
"cacheMaxSeconds": 600, | ||
"expansionFactor": 0.25 | ||
} | ||
] | ||
} | ||
} | ||
``` | ||
|
||
For each layer, the configuration includes: | ||
|
||
- `name` which is used in the url to fetch tiles, and as the layer name in the vector tiles. | ||
- `type` which tells the type of the layer. Currently supported: | ||
- `Stop` | ||
- `Station` | ||
- `VehicleRental`: all rental places: stations and free-floating vehicles | ||
- `VehicleRentalVehicle`: free-floating rental vehicles | ||
- `VehicleRentalStation`: rental stations | ||
- `VehicleParking` | ||
- `VehicleParkingGroup` | ||
|
||
<!-- INSERT: parameters --> | ||
|
||
### Extending | ||
|
||
If more generic layers are created for this API, the code should be moved out from the sandbox, into | ||
the core, perhaps potentially leaving specific property mappers in place. | ||
|
||
#### Creating a new layer | ||
|
||
In order to create a new type of layer, you need to create a new class extending `LayerBuilder<T>`. | ||
You need to implement two methods, `List<Geometry> getGeometries(Envelope query)`, which returns a | ||
list of geometries, with an object of type `T` as their userData in the geometry, | ||
and `double getExpansionFactor()`, which describes how much information outside the tile bounds | ||
should be included. This layer then needs to be added into `VectorTilesResource.layers`, with a | ||
new `LayerType` enum as the key, and the class constructor as the value. | ||
|
||
A new mapper needs to be added every time a new layer is added. See below for information. | ||
|
||
#### Creating a new mapper | ||
|
||
The mapping contains information of what data to include in the vector tiles. The mappers are | ||
defined per layer. | ||
|
||
In order to create a new mapper for a layer, you need to create a new class | ||
extending `PropertyMapper<T>`. In that class, you need to implement the | ||
method `Collection<KeyValue<String, Object>> map(T input)`. The type T is dependent on the layer for which | ||
you implement the mapper for. It needs to return a list of attributes, as key-value pairs which will | ||
be written into the vector tile. | ||
|
||
The mapper needs to be added to the `mappers` map in the layer, with a new `MapperType` enum as the | ||
key, and a function to create the mapper, with a `Graph` object as a parameter, as the value. | ||
|
||
## Changelog | ||
|
||
- 2020-07-09: Initial version of Mapbox vector tiles API | ||
- 2021-05-12: Make expansion factor configurable | ||
- 2021-09-07: Rename `BikeRental` to `VehicleRental` | ||
- 2021-10-13: Correctly serialize the vehicle rental name [#3648](https://github.com/opentripplanner/OpenTripPlanner/pull/3648) | ||
- 2022-01-03: Add support for VehicleParking entities | ||
- 2022-04-27: Read the headsign for frequency-only patterns correctly [#4122](https://github.com/opentripplanner/OpenTripPlanner/pull/4122) | ||
- 2022-08-23: Remove patterns and add route gtfsTypes to stop layer [#4404](https://github.com/opentripplanner/OpenTripPlanner/pull/4404) | ||
- 2022-10-11: Added layer for VehicleParkingGroups [#4510](https://github.com/opentripplanner/OpenTripPlanner/pull/4510) | ||
- 2022-10-14: Add separate layers for vehicle rental place types [#4516](https://github.com/opentripplanner/OpenTripPlanner/pull/4516) | ||
- 2022-10-19 [#4529](https://github.com/opentripplanner/OpenTripPlanner/pull/4529): | ||
* Translatable fields are now translated based on accept-language header | ||
* Added DigitransitRealtime for vehicle rental stations | ||
* Changed old vehicle parking mapper to be Stadtnavi | ||
* Added a new Digitransit vehicle parking mapper with no real-time information and less fields | ||
- 2024-01-22: Make `basePath` configurable [#5627](https://github.com/opentripplanner/OpenTripPlanner/pull/5627) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.