` and copies data to the `data/test/gtfs` directory.
89 |
90 | - `gtfs:test` tests the file with OTP and if the test passes, data is copied to the `data/ready/gtfs` directory.
91 |
92 | - `router:buildGraph`
93 |
94 | - `router:copy` copies files needed for the build.
95 | - `buildOTPGraphTask(config.router)` builds a new graph with all the new data sets (and maybe seeded data sets if there were issues with new data).
96 |
97 | - `router:buildStreetOnlyGraph`
98 |
99 | - `router:copyStreetOnlyGraphData` copies files needed for the street only build.
100 | - `buildOTPStreetOnlyGraphTask(config.router)` builds a new street only graph with all the new data sets (and maybe seeded data sets if there were issues with new data).
101 |
102 | - `router:buildWithPrebuiltStreetGraph`
103 |
104 | - `router:copyForPrebuiltStreetGraphDataBuild` copies files needed for the build from prebuilt data.
105 | - `buildOTPGraphTask(config.router)` builds a new graph from prebuilt street only data with new gtfs data sets (and maybe seeded data sets if there were issues with new data).
106 |
107 | - `test.sh` runs the routing quality test bench defined in the `hsldevcom/OTPQA` repository. OTPQA test sets are associated with GTFS packages.
108 | If there are quality regressions, a comma separated list of failed GTFS feed identifiers is written to the local file `failed_feeds.txt`.
109 |
110 | - `router:store` stores the new data in storage (which can be a mounted storage volume).
111 |
112 | - `router:storeForPrebuiltStreetGraphDataBuild` stores the new data in storage (which can be a mounted storage volume). Also copies the `report` directory from the street only build to the output directory under the name `street-report`.
113 |
114 | - `deploy.sh` deploys a new opentripplanner-data-server image with the `DOCKER_TAG` env variable (default `v3`) postfixed with the router name, and
115 | pushes the image to Dockerhub.
116 | Normally, when the application is running as a container, the script `index.js` is run to execute all steps.
117 | The end result of the build is a data server image uploaded to dockerhub.
118 | Each data server image runs an http server listening to port `8080`. It serves a data bundle required for building a graph and a prebuilt graph. For example, in the HSL case: http://localhost:8080/router-hsl.zip and `graph-hsl-$OTPVERSION.zip`. The image
119 | does not include the data, the data needs to be mounted while running the container.
120 |
121 | - `deploy-otp.sh` tags an OTP image using the `OTP_TAG` env variable (default `v2`) postfixed with the router name and pushes the image to Dockerhub.
122 | This new OTP image will automatically use the graph and configuration from the storage location where the build's end result was stored at.
123 |
124 | - `storage:cleanup` keeps the 10 latest versions of the data in storage and removes the rest.
125 |
126 | - `storage:cleanupStreetOnlyGraphData` keeps the 10 latest versions of the street only build data in storage and removes the rest.
127 |
128 | #### Normal build
129 |
130 | 1. `seed`
131 | 2. `dem:update`
132 | 3. `osm:update`
133 | 4. `gtfs:update`
134 | - `gtfs:dl`
135 | - `gtfs:fit`
136 | - `gtfs:filter`
137 | - `gtfs:id`
138 | 5. `router:buildGraph`
139 | - `router:copy`
140 | - `buildOTPGraphTask(config.router)`
141 | 6. `test.sh`
142 | 7. `router:store`
143 | 8. `deploy.sh`
144 | 9. `deploy-otp.sh`
145 | 10. `storage:cleanup`
146 |
147 | #### Street only build
148 |
149 | 1. `seed`
150 | 2. `dem:update`
151 | 3. `osm:update`
152 | 4. `router:buildStreetOnlyGraph`
153 | - `router:copyStreetOnlyGraphData`
154 | - `buildOTPStreetOnlyGraphTask(config.router)`
155 | 5. `router:store`
156 | 6. `storage:cleanupStreetOnlyGraphData`
157 |
158 | #### Build from prebuilt street data
159 |
160 | 1. `seed`
161 | 2. `gtfs:update`
162 | - `gtfs:dl`
163 | - `gtfs:fit`
164 | - `gtfs:filter`
165 | - `gtfs:id`
166 | 3. `router:buildWithPrebuiltStreetGraph`
167 | - `router:copyForPrebuiltStreetGraphDataBuild`
168 | - `buildOTPGraphTask(config.router)`
169 | 4. `test.sh`
170 | 5. `router:storeForPrebuiltStreetGraphDataBuild`
171 | 6. `deploy.sh`
172 | 7. `deploy-otp.sh`
173 | 8. `storage:cleanup`
174 |
175 | ### otp-data-tools
176 |
177 | Contains tools, such as the OneBusAway gtfs filter, for gtfs manipulation.
178 | It uses the [opentransitsoftwarefoundation/onebusaway-gtfs-transformer-cli](https://registry.hub.docker.com/r/opentransitsoftwarefoundation/onebusaway-gtfs-transformer-cli) as the base image.
179 | These tools are packaged inside a docker container and are used during the data build process.
180 |
181 | #### OSM preprocessing
182 |
183 | OSM preprocessing is done if a bash script is defined for a specific config and a specific OSM file.
184 | See [hsl.sh](hsl/osm-preprocessing/hsl.sh) for an example.
185 |
186 | When creating OSM preprocessing instructions you should:
187 | 1. Name the bash file as follows: `.sh`. Valid file names can be e.g. `hsl.sh` or `southFinland.sh`.
188 | 2. Place the file in the `osm-preprocessing` directory of the config you want to use.
189 | 3. Make sure that the name of the output file is the same as the input file. The file has to be named `.pbf`, e.g. `hsl.pbf` or `southFinland.pbf`.
190 | 4. Make sure that you do not reuse input and output filenames in commands:
191 | - INCORRECT `osmfilter hsl.o5m -o=hsl.o5m ...`
192 | - CORRECT `osmfilter hsl.o5m -o=hsl2.o5m ...`
193 | 5. Test the script by running it locally and verifying that the output makes sense.
194 |
--------------------------------------------------------------------------------
/waltti/router-config.json:
--------------------------------------------------------------------------------
1 | {
2 | "routingDefaults": {
3 | "transferSlack": "1m30s",
4 | "waitReluctance": 0.95,
5 | "elevatorBoardTime": 60,
6 | "bicycle": {
7 | "boardCost": 120,
8 | "reluctance": 1.7,
9 | "optimization": "safest-streets"
10 | },
11 | "car": {
12 | "reluctance": 10.0
13 | },
14 | "walk": {
15 | "speed": 1.3,
16 | "reluctance": 1.75,
17 | "stairsReluctance": 1.2,
18 | "stairsTimeFactor": 2,
19 | "escalator": {
20 | "speed": 0.65
21 | },
22 | "boardCost": 120
23 | },
24 | "accessEgress": {
25 | "maxDuration": "1h"
26 | },
27 | "maxDirectStreetDuration": "2h",
28 | "maxDirectStreetDurationForMode": {
29 | "walk": "90m"
30 | },
31 | "maxJourneyDuration": "12h",
32 | "streetRoutingTimeout": "8s",
33 | "wheelchairAccessibility": {
34 | "stop": {
35 | "onlyConsiderAccessible": false,
36 | "unknownCost": 0,
37 | "inaccessibleCost": 100000
38 | },
39 | "maxSlope": 0.125
40 | },
41 | "itineraryFilters": {
42 | "transitGeneralizedCostLimit": {
43 | "costLimitFunction": "600 + 1.5x"
44 | },
45 | "nonTransitGeneralizedCostLimit": "400 + 1.5x"
46 | },
47 | "unpreferredCost": "1 + 0.4x",
48 | "unpreferred": {
49 | "routes": ["Lappeenranta:100", "Lappeenranta:101", "Lappeenranta:110"]
50 | }
51 | },
52 | "gtfsApi": {
53 | "tracingTags": ["digitransit-subscription-id"]
54 | },
55 | "transit": {
56 | "pagingSearchWindowAdjustments": ["8h", "4h", "4h", "4h", "4h"],
57 | "dynamicSearchWindow": {
58 | "minWindow": "1h"
59 | },
60 | "maxNumberOfTransfers": 12,
61 | "transferCacheRequests": [
62 | {
63 | "modes": "WALK",
64 | "walk": {
65 | "speed": 1.2,
66 | "reluctance": 1.8
67 | }
68 | },
69 | {
70 | "modes": "WALK",
71 | "walk": {
72 | "speed": 1.2,
73 | "reluctance": 1.8
74 | },
75 | "wheelchairAccessibility": {
76 | "enabled": true
77 | }
78 | },
79 | {
80 | "modes": "WALK",
81 | "walk": {
82 | "speed": 1.67,
83 | "reluctance": 1.8
84 | }
85 | },
86 | {
87 | "modes": "BICYCLE",
88 | "walk": {
89 | "speed": 1.2,
90 | "reluctance": 1.8
91 | },
92 | "bicycle": {
93 | "speed": 5.55,
94 | "rental": {
95 | "useAvailabilityInformation": true
96 | }
97 | }
98 | },
99 | {
100 | "modes": "BICYCLE",
101 | "walk": {
102 | "speed": 1.67,
103 | "reluctance": 1.8
104 | },
105 | "bicycle": {
106 | "speed": 5.55,
107 | "rental": {
108 | "useAvailabilityInformation": true
109 | }
110 | }
111 | }
112 | ]
113 | },
114 | "vectorTiles": {
115 | "attribution": "Digitransit data is licensed under CC BY 4.0.",
116 | "layers": [
117 | {
118 | "name": "stops",
119 | "type": "Stop",
120 | "mapper": "Digitransit",
121 | "maxZoom": 20,
122 | "minZoom": 5,
123 | "cacheMaxSeconds": 43200
124 | },
125 | {
126 | "name": "realtimeStops",
127 | "type": "Stop",
128 | "mapper": "DigitransitRealtime",
129 | "maxZoom": 20,
130 | "minZoom": 5,
131 | "cacheMaxSeconds": 60
132 | },
133 | {
134 | "name": "stations",
135 | "type": "Station",
136 | "mapper": "Digitransit",
137 | "maxZoom": 20,
138 | "minZoom": 5,
139 | "cacheMaxSeconds": 43200
140 | },
141 | {
142 | "name": "rentalStations",
143 | "type": "VehicleRentalStation",
144 | "mapper": "Digitransit",
145 | "maxZoom": 20,
146 | "minZoom": 5,
147 | "cacheMaxSeconds": 43200,
148 | "expansionFactor": 0.25
149 | },
150 | {
151 | "name": "realtimeRentalStations",
152 | "type": "VehicleRentalStation",
153 | "mapper": "DigitransitRealtime",
154 | "maxZoom": 20,
155 | "minZoom": 5,
156 | "cacheMaxSeconds": 45,
157 | "expansionFactor": 0.25
158 | },
159 | {
160 | "name": "vehicleParking",
161 | "type": "VehicleParking",
162 | "mapper": "Digitransit",
163 | "maxZoom": 20,
164 | "minZoom": 5,
165 | "cacheMaxSeconds": 43200,
166 | "expansionFactor": 0.25
167 | },
168 | {
169 | "name": "vehicleParkingGroups",
170 | "type": "VehicleParkingGroup",
171 | "mapper": "Digitransit",
172 | "maxZoom": 20,
173 | "minZoom": 5,
174 | "cacheMaxSeconds": 43200,
175 | "expansionFactor": 0.25
176 | }
177 | ]
178 | },
179 | "updaters": [
180 | {
181 | "id": "digitraffic-trip-updates",
182 | "type": "stop-time-updater",
183 | "frequency": "60s",
184 | "url": "https://rata.digitraffic.fi/api/v1/trains/gtfs-rt-updates",
185 | "feedId": "digitraffic",
186 | "fuzzyTripMatching": false,
187 | "backwardsDelayPropagationType": "ALWAYS",
188 | "headers": {
189 | "digitraffic-user": "Digitransit/OTP"
190 | }
191 | },
192 | {
193 | "id": "foli-trip-updates",
194 | "type": "stop-time-updater",
195 | "frequency": "60s",
196 | "url": "http://siri2gtfsrt:8080/FOLI",
197 | "feedId": "FOLI",
198 | "fuzzyTripMatching": true,
199 | "backwardsDelayPropagationType": "ALWAYS"
200 | },
201 | {
202 | "id": "foli-alerts",
203 | "type": "real-time-alerts",
204 | "frequency": "30s",
205 | "url": "http://digitransit-proxy:8080/out/data.foli.fi/gtfs-rt/reittiopas",
206 | "feedId": "FOLI",
207 | "fuzzyTripMatching": false
208 | },
209 | {
210 | "id": "oulu-trip-updates",
211 | "type": "stop-time-updater",
212 | "frequency": "60s",
213 | "url": "http://digitransit-proxy:8080/out/oulu.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
214 | "feedId": "OULU",
215 | "fuzzyTripMatching": false,
216 | "backwardsDelayPropagationType": "ALWAYS"
217 | },
218 | {
219 | "id": "oulu-alerts",
220 | "type": "real-time-alerts",
221 | "frequency": "30s",
222 | "url": "http://digitransit-proxy:8080/out/oulu.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
223 | "feedId": "OULU",
224 | "fuzzyTripMatching": false
225 | },
226 | {
227 | "id": "kuopio-trip-updates",
228 | "type": "stop-time-updater",
229 | "frequency": "60s",
230 | "url": "http://digitransit-proxy:8080/out/vilkku.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
231 | "feedId": "Kuopio",
232 | "fuzzyTripMatching": false,
233 | "backwardsDelayPropagationType": "ALWAYS"
234 | },
235 | {
236 | "id": "joensuu-trip-updates",
237 | "type": "stop-time-updater",
238 | "frequency": "60s",
239 | "url": "http://digitransit-proxy:8080/out/jojo.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
240 | "feedId": "Joensuu",
241 | "fuzzyTripMatching": false,
242 | "backwardsDelayPropagationType": "ALWAYS"
243 | },
244 | {
245 | "id": "joensuu-alerts",
246 | "type": "real-time-alerts",
247 | "frequency": "30s",
248 | "url": "http://digitransit-proxy:8080/out/jojo.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
249 | "feedId": "Joensuu",
250 | "fuzzyTripMatching": false
251 | },
252 | {
253 | "id": "lappeenranta-trip-updates",
254 | "type": "stop-time-updater",
255 | "frequency": "60s",
256 | "url": "http://digitransit-proxy:8080/out/lappeenranta.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
257 | "feedId": "Lappeenranta",
258 | "fuzzyTripMatching": false,
259 | "backwardsDelayPropagationType": "ALWAYS"
260 | },
261 | {
262 | "id": "lappeenranta-alerts",
263 | "type": "real-time-alerts",
264 | "frequency": "30s",
265 | "url": "http://digitransit-proxy:8080/out/lappeenranta.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
266 | "feedId": "Lappeenranta",
267 | "fuzzyTripMatching": false
268 | },
269 | {
270 | "id": "tampere-trip-updates",
271 | "type": "stop-time-updater",
272 | "frequency": "60s",
273 | "url": "https://gtfsrt.blob.core.windows.net/tampere/tripupdate",
274 | "feedId": "tampere",
275 | "fuzzyTripMatching": false,
276 | "backwardsDelayPropagationType": "ALWAYS"
277 | },
278 | {
279 | "id": "tampere-alerts",
280 | "type": "real-time-alerts",
281 | "frequency": "30s",
282 | "url": "http://digitransit-proxy:8080/out/tre.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
283 | "feedId": "tampere",
284 | "fuzzyTripMatching": false
285 | },
286 | {
287 | "id": "linkki-trip-updates",
288 | "type": "stop-time-updater",
289 | "frequency": "60s",
290 | "url": "http://digitransit-proxy:8080/out/linkki.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
291 | "feedId": "LINKKI",
292 | "fuzzyTripMatching": false,
293 | "backwardsDelayPropagationType": "ALWAYS"
294 | },
295 | {
296 | "id": "linkki-alerts",
297 | "type": "real-time-alerts",
298 | "frequency": "30s",
299 | "url": "http://digitransit-proxy:8080/out/linkki.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
300 | "feedId": "LINKKI",
301 | "fuzzyTripMatching": false
302 | },
303 | {
304 | "id": "lahti-alerts",
305 | "type": "real-time-alerts",
306 | "frequency": "30s",
307 | "url": "http://digitransit-proxy:8080/out/lsl.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
308 | "feedId": "Lahti",
309 | "fuzzyTripMatching": false
310 | },
311 | {
312 | "id": "lahti-trip-updates",
313 | "type": "stop-time-updater",
314 | "frequency": "60s",
315 | "url": "http://digitransit-proxy:8080/out/lsl.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
316 | "feedId": "Lahti",
317 | "fuzzyTripMatching": false,
318 | "backwardsDelayPropagationType": "ALWAYS"
319 | },
320 | {
321 | "id": "kuopio-alerts",
322 | "type": "real-time-alerts",
323 | "frequency": "30s",
324 | "url": "http://digitransit-proxy:8080/out/vilkku.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
325 | "feedId": "Kuopio",
326 | "fuzzyTripMatching": false
327 | },
328 | {
329 | "id": "hameenlinna-trip-updates",
330 | "type": "stop-time-updater",
331 | "frequency": "60s",
332 | "url": "http://digitransit-proxy:8080/out/hameenlinna.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
333 | "feedId": "Hameenlinna",
334 | "fuzzyTripMatching": false,
335 | "backwardsDelayPropagationType": "ALWAYS"
336 | },
337 | {
338 | "id": "hameenlinna-alerts",
339 | "type": "real-time-alerts",
340 | "frequency": "30s",
341 | "url": "http://digitransit-proxy:8080/out/hameenlinna.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
342 | "feedId": "Hameenlinna",
343 | "fuzzyTripMatching": false
344 | },
345 | {
346 | "id": "mikkeli-trip-updates",
347 | "type": "stop-time-updater",
348 | "frequency": "60s",
349 | "url": "http://digitransit-proxy:8080/out/mikkeli.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
350 | "feedId": "Mikkeli",
351 | "fuzzyTripMatching": false,
352 | "backwardsDelayPropagationType": "ALWAYS"
353 | },
354 | {
355 | "id": "mikkeli-alerts",
356 | "type": "real-time-alerts",
357 | "frequency": "30s",
358 | "url": "http://digitransit-proxy:8080/out/mikkeli.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
359 | "feedId": "Mikkeli",
360 | "fuzzyTripMatching": false
361 | },
362 | {
363 | "id": "vaasa-trip-updates",
364 | "type": "stop-time-updater",
365 | "frequency": "60s",
366 | "url": "http://digitransit-proxy:8080/out/lifti.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
367 | "feedId": "Vaasa",
368 | "fuzzyTripMatching": false,
369 | "backwardsDelayPropagationType": "ALWAYS"
370 | },
371 | {
372 | "id": "vaasa-alerts",
373 | "type": "real-time-alerts",
374 | "frequency": "30s",
375 | "url": "http://digitransit-proxy:8080/out/lifti.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
376 | "feedId": "Vaasa",
377 | "fuzzyTripMatching": false
378 | },
379 | {
380 | "id": "kouvola-trip-updates",
381 | "type": "stop-time-updater",
382 | "frequency": "60s",
383 | "url": "http://digitransit-proxy:8080/out/koutsi.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
384 | "feedId": "Kouvola",
385 | "fuzzyTripMatching": false,
386 | "backwardsDelayPropagationType": "ALWAYS"
387 | },
388 | {
389 | "id": "kouvola-alerts",
390 | "type": "real-time-alerts",
391 | "frequency": "30s",
392 | "url": "http://digitransit-proxy:8080/out/koutsi.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
393 | "feedId": "Kouvola",
394 | "fuzzyTripMatching": false
395 | },
396 | {
397 | "id": "kotka-trip-updates",
398 | "type": "stop-time-updater",
399 | "frequency": "60s",
400 | "url": "http://digitransit-proxy:8080/out/jonnejaminne.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
401 | "feedId": "Kotka",
402 | "fuzzyTripMatching": false,
403 | "backwardsDelayPropagationType": "ALWAYS"
404 | },
405 | {
406 | "id": "kotka-alerts",
407 | "type": "real-time-alerts",
408 | "frequency": "30s",
409 | "url": "http://digitransit-proxy:8080/out/jonnejaminne.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
410 | "feedId": "Kotka",
411 | "fuzzyTripMatching": false
412 | },
413 | {
414 | "id": "rovaniemi-trip-updates",
415 | "type": "stop-time-updater",
416 | "frequency": "60s",
417 | "url": "http://digitransit-proxy:8080/out/linkkari.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
418 | "feedId": "Rovaniemi",
419 | "fuzzyTripMatching": false,
420 | "backwardsDelayPropagationType": "ALWAYS"
421 | },
422 | {
423 | "id": "rovaniemi-alerts",
424 | "type": "real-time-alerts",
425 | "frequency": "30s",
426 | "url": "http://digitransit-proxy:8080/out/linkkari.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
427 | "feedId": "Rovaniemi",
428 | "fuzzyTripMatching": false
429 | },
430 | {
431 | "id": "pori-trip-updates",
432 | "type": "stop-time-updater",
433 | "frequency": "60s",
434 | "url": "http://digitransit-proxy:8080/out/pjl.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
435 | "feedId": "Pori",
436 | "fuzzyTripMatching": false,
437 | "backwardsDelayPropagationType": "ALWAYS"
438 | },
439 | {
440 | "id": "pori-alerts",
441 | "type": "real-time-alerts",
442 | "frequency": "30s",
443 | "url": "http://digitransit-proxy:8080/out/pjl.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
444 | "feedId": "Pori",
445 | "fuzzyTripMatching": false
446 | },
447 | {
448 | "id": "lappeenranta-bike-rental",
449 | "type": "vehicle-rental",
450 | "sourceType": "gbfs",
451 | "frequency": "30s",
452 | "url": "http://digitransit-proxy:8080/out/stables.donkey.bike/api/public/gbfs/2/donkey_lappeenranta/gbfs.json",
453 | "overloadingAllowed": true,
454 | "rentalPickupTypes": ["station"]
455 | },
456 | {
457 | "id": "kotka-bike-rental",
458 | "type": "vehicle-rental",
459 | "sourceType": "gbfs",
460 | "frequency": "30s",
461 | "url": "http://digitransit-proxy:8080/out/stables.donkey.bike/api/public/gbfs/2/donkey_kotka/gbfs.json",
462 | "overloadingAllowed": true,
463 | "rentalPickupTypes": ["station"]
464 | },
465 | {
466 | "id": "kouvola-bike-rental",
467 | "type": "vehicle-rental",
468 | "sourceType": "gbfs",
469 | "frequency": "30s",
470 | "url": "http://digitransit-proxy:8080/out/stables.donkey.bike/api/public/gbfs/2/donkey_kouvola/gbfs.json",
471 | "overloadingAllowed": true
472 | },
473 | {
474 | "id": "turku-bike-rental",
475 | "type": "vehicle-rental",
476 | "sourceType": "gbfs",
477 | "frequency": "30s",
478 | "url": "http://digitransit-proxy:8080/out/stables.donkey.bike/api/public/gbfs/2/donkey_turku/gbfs.json",
479 | "overloadingAllowed": true
480 | },
481 | {
482 | "id": "vilkku-bike-rental",
483 | "network": "freebike_kuopio",
484 | "type": "vehicle-rental",
485 | "sourceType": "gbfs",
486 | "frequency": "30s",
487 | "url": "http://digitransit-proxy:8080/out/tkhskuopiostrg.blob.core.windows.net/gbfs/gbfs.json",
488 | "overloadingAllowed": true
489 | },
490 | {
491 | "id": "mankeli-bike-rental",
492 | "network": "freebike_lahti",
493 | "type": "vehicle-rental",
494 | "sourceType": "gbfs",
495 | "frequency": "60s",
496 | "url": "http://digitransit-proxy:8080/out/tkhslahtistorage.blob.core.windows.net/gbfs/gbfs.json",
497 | "overloadingAllowed": true,
498 | "rentalPickupTypes": ["station"]
499 | },
500 | {
501 | "id": "liipi",
502 | "type": "vehicle-parking",
503 | "sourceType": "liipi",
504 | "feedId": "liipi",
505 | "timeZone": "Europe/Helsinki",
506 | "facilitiesFrequencySec": 3600,
507 | "facilitiesUrl": "https://parking.fintraffic.fi/api/v1/facilities.json?limit=-1",
508 | "utilizationsFrequencySec": 600,
509 | "utilizationsUrl": "https://parking.fintraffic.fi/api/v1/utilizations.json?limit=-1",
510 | "hubsUrl": "https://parking.fintraffic.fi/api/v1/hubs.json?limit=-1"
511 | },
512 | {
513 | "id": "raasepori-alerts",
514 | "type": "real-time-alerts",
515 | "frequency": "30s",
516 | "url": "http://digitransit-proxy:8080/out/bosse.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
517 | "feedId": "Raasepori",
518 | "fuzzyTripMatching": false
519 | },
520 | {
521 | "id": "tampere-bike-rental",
522 | "network": "inurba_tampere",
523 | "type": "vehicle-rental",
524 | "sourceType": "gbfs",
525 | "frequency": "30s",
526 | "url": "https://gbfs.urbansharing.com/tampere.onurbansharing.com/gbfs.json",
527 | "overloadingAllowed": true
528 | },
529 | {
530 | "id": "salo-trip-updates",
531 | "type": "stop-time-updater",
532 | "frequency": "60s",
533 | "url": "http://digitransit-proxy:8080/out/paikku.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
534 | "feedId": "Salo",
535 | "fuzzyTripMatching": false,
536 | "backwardsDelayPropagationType": "ALWAYS"
537 | },
538 | {
539 | "id": "salo-alerts",
540 | "type": "real-time-alerts",
541 | "frequency": "30s",
542 | "url": "http://digitransit-proxy:8080/out/paikku.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
543 | "feedId": "Salo",
544 | "fuzzyTripMatching": false
545 | },
546 | {
547 | "id": "kajaani-trip-updates",
548 | "type": "stop-time-updater",
549 | "frequency": "60s",
550 | "url": "http://digitransit-proxy:8080/out/kajaani.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
551 | "feedId": "Kajaani",
552 | "fuzzyTripMatching": false,
553 | "backwardsDelayPropagationType": "ALWAYS"
554 | },
555 | {
556 | "id": "kajaani-alerts",
557 | "type": "real-time-alerts",
558 | "frequency": "30s",
559 | "url": "http://digitransit-proxy:8080/out/kajaani.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
560 | "feedId": "Kajaani",
561 | "fuzzyTripMatching": false
562 | }
563 | ]
564 | }
565 |
--------------------------------------------------------------------------------
/finland/router-config.json:
--------------------------------------------------------------------------------
1 | {
2 | "routingDefaults": {
3 | "transferSlack": "1m30s",
4 | "waitReluctance": 0.99,
5 | "elevatorBoardTime": 60,
6 | "bicycle": {
7 | "boardCost": 120,
8 | "reluctance": 1.7,
9 | "optimization": "safest-streets"
10 | },
11 | "car": {
12 | "reluctance": 10.0,
13 | "boardCost": 600
14 | },
15 | "walk": {
16 | "speed": 1.3,
17 | "reluctance": 1.75,
18 | "stairsReluctance": 1.2,
19 | "stairsTimeFactor": 2,
20 | "escalator": {
21 | "speed": 0.65
22 | },
23 | "boardCost": 120
24 | },
25 | "accessEgress": {
26 | "maxDuration": "1h",
27 | "maxDurationForMode": {
28 | "CAR_TO_PARK": "2h",
29 | "BIKE": "2h",
30 | "CAR": "3h"
31 | },
32 | "maxStopCountForMode": {
33 | "BIKE": 0,
34 | "CAR": 0
35 | }
36 | },
37 | "maxDirectStreetDuration": "100h",
38 | "maxDirectStreetDurationForMode": {
39 | "walk": "90m"
40 | },
41 | "maxJourneyDuration": "24h",
42 | "streetRoutingTimeout": "9s",
43 | "wheelchairAccessibility": {
44 | "stop": {
45 | "onlyConsiderAccessible": false,
46 | "unknownCost": 0,
47 | "inaccessibleCost": 100000
48 | },
49 | "maxSlope": 0.125
50 | },
51 | "itineraryFilters": {
52 | "transitGeneralizedCostLimit": {
53 | "costLimitFunction": "600 + 1.5x"
54 | },
55 | "nonTransitGeneralizedCostLimit": "400 + 1.5x"
56 | },
57 | "boardSlackForMode": {
58 | "AIRPLANE": "2700s"
59 | },
60 | "alightSlackForMode": {
61 | "AIRPLANE": "1200s"
62 | }
63 | },
64 | "gtfsApi": {
65 | "tracingTags": ["digitransit-subscription-id"]
66 | },
67 | "flex": {
68 | "maxTransferDuration": "1m",
69 | "maxFlexTripDuration": "3h",
70 | "maxAccessWalkDuration": "5m",
71 | "maxEgressWalkDuration": "5m"
72 | },
73 | "transit": {
74 | "pagingSearchWindowAdjustments": ["8h", "4h", "4h", "4h", "4h"],
75 | "dynamicSearchWindow": {
76 | "minWindow": "3h"
77 | },
78 | "transferCacheRequests": [
79 | {
80 | "modes": "WALK",
81 | "walk": {
82 | "speed": 1.2,
83 | "reluctance": 1.8
84 | }
85 | },
86 | {
87 | "modes": "WALK",
88 | "walk": {
89 | "speed": 1.2,
90 | "reluctance": 1.8
91 | },
92 | "wheelchairAccessibility": {
93 | "enabled": true
94 | }
95 | },
96 | {
97 | "modes": "WALK",
98 | "walk": {
99 | "speed": 1.67,
100 | "reluctance": 1.8
101 | }
102 | },
103 | {
104 | "modes": "BICYCLE",
105 | "walk": {
106 | "speed": 1.2,
107 | "reluctance": 1.8
108 | },
109 | "bicycle": {
110 | "speed": 5.55,
111 | "rental": {
112 | "useAvailabilityInformation": true
113 | }
114 | }
115 | },
116 | {
117 | "modes": "BICYCLE",
118 | "walk": {
119 | "speed": 1.67,
120 | "reluctance": 1.8
121 | },
122 | "bicycle": {
123 | "speed": 5.55,
124 | "rental": {
125 | "useAvailabilityInformation": true
126 | }
127 | }
128 | },
129 | {
130 | "modes": "CAR",
131 | "walk": {
132 | "speed": 1.3,
133 | "reluctance": 1.75
134 | }
135 | }
136 | ]
137 | },
138 | "vectorTiles": {
139 | "attribution": "Digitransit data is licensed under CC BY 4.0.",
140 | "layers": [
141 | {
142 | "name": "stops",
143 | "type": "Stop",
144 | "mapper": "Digitransit",
145 | "maxZoom": 20,
146 | "minZoom": 5,
147 | "cacheMaxSeconds": 43200
148 | },
149 | {
150 | "name": "realtimeStops",
151 | "type": "Stop",
152 | "mapper": "DigitransitRealtime",
153 | "maxZoom": 20,
154 | "minZoom": 5,
155 | "cacheMaxSeconds": 60
156 | },
157 | {
158 | "name": "stations",
159 | "type": "Station",
160 | "mapper": "Digitransit",
161 | "maxZoom": 20,
162 | "minZoom": 5,
163 | "cacheMaxSeconds": 43200
164 | },
165 | {
166 | "name": "rentalStations",
167 | "type": "VehicleRentalStation",
168 | "mapper": "Digitransit",
169 | "maxZoom": 20,
170 | "minZoom": 5,
171 | "cacheMaxSeconds": 43200,
172 | "expansionFactor": 0.25
173 | },
174 | {
175 | "name": "realtimeRentalStations",
176 | "type": "VehicleRentalStation",
177 | "mapper": "DigitransitRealtime",
178 | "maxZoom": 20,
179 | "minZoom": 5,
180 | "cacheMaxSeconds": 45,
181 | "expansionFactor": 0.25
182 | },
183 | {
184 | "name": "realtimeRentalVehicles",
185 | "type": "VehicleRentalVehicle",
186 | "mapper": "DigitransitRealtime",
187 | "maxZoom": 20,
188 | "minZoom": 5,
189 | "cacheMaxSeconds": 45,
190 | "expansionFactor": 0.25
191 | },
192 | {
193 | "name": "vehicleParking",
194 | "type": "VehicleParking",
195 | "mapper": "Digitransit",
196 | "maxZoom": 20,
197 | "minZoom": 5,
198 | "cacheMaxSeconds": 43200,
199 | "expansionFactor": 0.25
200 | },
201 | {
202 | "name": "vehicleParkingGroups",
203 | "type": "VehicleParkingGroup",
204 | "mapper": "Digitransit",
205 | "maxZoom": 20,
206 | "minZoom": 5,
207 | "cacheMaxSeconds": 43200,
208 | "expansionFactor": 0.25
209 | }
210 | ]
211 | },
212 | "updaters": [
213 | {
214 | "id": "hsl-trip-updates",
215 | "type": "mqtt-gtfs-rt-updater",
216 | "url": "tcp://pred.rt.hsl.fi",
217 | "topic": "gtfsrt/v2/fi/hsl/tu",
218 | "feedId": "HSL",
219 | "fuzzyTripMatching": true,
220 | "backwardsDelayPropagationType": "ALWAYS"
221 | },
222 | {
223 | "id": "hsl-alerts",
224 | "type": "real-time-alerts",
225 | "frequency": "30s",
226 | "url": "https://realtime.hsl.fi/realtime/service-alerts/v2/hsl",
227 | "feedId": "HSL",
228 | "fuzzyTripMatching": true
229 | },
230 | {
231 | "type": "vehicle-positions",
232 | "url": "https://realtime.hsl.fi/realtime/vehicle-positions/v2/hsl",
233 | "feedId": "HSL",
234 | "frequency": "30s",
235 | "fuzzyTripMatching": true,
236 | "features": ["stop-position", "occupancy"]
237 | },
238 | {
239 | "id": "digitraffic-trip-updates",
240 | "type": "stop-time-updater",
241 | "frequency": "60s",
242 | "url": "https://rata.digitraffic.fi/api/v1/trains/gtfs-rt-updates",
243 | "feedId": "digitraffic",
244 | "fuzzyTripMatching": false,
245 | "backwardsDelayPropagationType": "ALWAYS",
246 | "headers": {
247 | "digitraffic-user": "Digitransit/OTP"
248 | }
249 | },
250 | {
251 | "id": "oulu-trip-updates",
252 | "type": "stop-time-updater",
253 | "frequency": "60s",
254 | "url": "http://digitransit-proxy:8080/out/oulu.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
255 | "feedId": "OULU",
256 | "fuzzyTripMatching": false,
257 | "backwardsDelayPropagationType": "ALWAYS"
258 | },
259 | {
260 | "id": "oulu-alerts",
261 | "type": "real-time-alerts",
262 | "frequency": "30s",
263 | "url": "http://digitransit-proxy:8080/out/oulu.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
264 | "feedId": "OULU",
265 | "fuzzyTripMatching": false
266 | },
267 | {
268 | "id": "tampere-trip-updates",
269 | "type": "stop-time-updater",
270 | "frequency": "60s",
271 | "url": "https://gtfsrt.blob.core.windows.net/tampere/tripupdate",
272 | "feedId": "tampere",
273 | "fuzzyTripMatching": false,
274 | "backwardsDelayPropagationType": "ALWAYS"
275 | },
276 | {
277 | "id": "tampere-alerts",
278 | "type": "real-time-alerts",
279 | "frequency": "30s",
280 | "url": "http://digitransit-proxy:8080/out/tre.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
281 | "feedId": "tampere",
282 | "fuzzyTripMatching": false
283 | },
284 | {
285 | "id": "linkki-trip-updates",
286 | "type": "stop-time-updater",
287 | "frequency": "60s",
288 | "url": "http://digitransit-proxy:8080/out/linkki.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
289 | "feedId": "LINKKI",
290 | "fuzzyTripMatching": false,
291 | "backwardsDelayPropagationType": "ALWAYS"
292 | },
293 | {
294 | "id": "linkki-alerts",
295 | "type": "real-time-alerts",
296 | "frequency": "30s",
297 | "url": "http://digitransit-proxy:8080/out/linkki.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
298 | "feedId": "LINKKI",
299 | "fuzzyTripMatching": false
300 | },
301 | {
302 | "id": "foli-trip-updates",
303 | "type": "stop-time-updater",
304 | "frequency": "60s",
305 | "url": "http://siri2gtfsrt:8080/FOLI",
306 | "feedId": "FOLI",
307 | "fuzzyTripMatching": true,
308 | "backwardsDelayPropagationType": "ALWAYS"
309 | },
310 | {
311 | "id": "foli-alerts",
312 | "type": "real-time-alerts",
313 | "frequency": "30s",
314 | "url": "http://digitransit-proxy:8080/out/data.foli.fi/gtfs-rt/reittiopas",
315 | "feedId": "FOLI",
316 | "fuzzyTripMatching": false
317 | },
318 | {
319 | "id": "kuopio-trip-updates",
320 | "type": "stop-time-updater",
321 | "frequency": "60s",
322 | "url": "http://digitransit-proxy:8080/out/vilkku.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
323 | "feedId": "Kuopio",
324 | "fuzzyTripMatching": false,
325 | "backwardsDelayPropagationType": "ALWAYS"
326 | },
327 | {
328 | "id": "joensuu-trip-updates",
329 | "type": "stop-time-updater",
330 | "frequency": "60s",
331 | "url": "http://digitransit-proxy:8080/out/jojo.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
332 | "feedId": "Joensuu",
333 | "fuzzyTripMatching": false,
334 | "backwardsDelayPropagationType": "ALWAYS"
335 | },
336 | {
337 | "id": "joensuu-alerts",
338 | "type": "real-time-alerts",
339 | "frequency": "30s",
340 | "url": "http://digitransit-proxy:8080/out/jojo.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
341 | "feedId": "Joensuu",
342 | "fuzzyTripMatching": false
343 | },
344 | {
345 | "id": "lappeenranta-trip-updates",
346 | "type": "stop-time-updater",
347 | "frequency": "60s",
348 | "url": "http://digitransit-proxy:8080/out/lappeenranta.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
349 | "feedId": "Lappeenranta",
350 | "fuzzyTripMatching": false,
351 | "backwardsDelayPropagationType": "ALWAYS"
352 | },
353 | {
354 | "id": "lappeenranta-alerts",
355 | "type": "real-time-alerts",
356 | "frequency": "30s",
357 | "url": "http://digitransit-proxy:8080/out/lappeenranta.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
358 | "feedId": "Lappeenranta",
359 | "fuzzyTripMatching": false
360 | },
361 | {
362 | "id": "lahti-alerts",
363 | "type": "real-time-alerts",
364 | "frequency": "30s",
365 | "url": "http://digitransit-proxy:8080/out/lsl.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
366 | "feedId": "Lahti",
367 | "fuzzyTripMatching": false
368 | },
369 | {
370 | "id": "lahti-trip-updates",
371 | "type": "stop-time-updater",
372 | "frequency": "60s",
373 | "url": "http://digitransit-proxy:8080/out/lsl.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
374 | "feedId": "Lahti",
375 | "fuzzyTripMatching": false,
376 | "backwardsDelayPropagationType": "ALWAYS"
377 | },
378 | {
379 | "id": "kuopio-alerts",
380 | "type": "real-time-alerts",
381 | "frequency": "30s",
382 | "url": "http://digitransit-proxy:8080/out/vilkku.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
383 | "feedId": "Kuopio",
384 | "fuzzyTripMatching": false
385 | },
386 | {
387 | "id": "hameenlinna-trip-updates",
388 | "type": "stop-time-updater",
389 | "frequency": "60s",
390 | "url": "http://digitransit-proxy:8080/out/hameenlinna.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
391 | "feedId": "Hameenlinna",
392 | "fuzzyTripMatching": false,
393 | "backwardsDelayPropagationType": "ALWAYS"
394 | },
395 | {
396 | "id": "hameenlinna-alerts",
397 | "type": "real-time-alerts",
398 | "frequency": "30s",
399 | "url": "http://digitransit-proxy:8080/out/hameenlinna.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
400 | "feedId": "Hameenlinna",
401 | "fuzzyTripMatching": false
402 | },
403 | {
404 | "id": "mikkeli-trip-updates",
405 | "type": "stop-time-updater",
406 | "frequency": "60s",
407 | "url": "http://digitransit-proxy:8080/out/mikkeli.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
408 | "feedId": "Mikkeli",
409 | "fuzzyTripMatching": false,
410 | "backwardsDelayPropagationType": "ALWAYS"
411 | },
412 | {
413 | "id": "mikkeli-alerts",
414 | "type": "real-time-alerts",
415 | "frequency": "30s",
416 | "url": "http://digitransit-proxy:8080/out/mikkeli.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
417 | "feedId": "Mikkeli",
418 | "fuzzyTripMatching": false
419 | },
420 | {
421 | "id": "vaasa-trip-updates",
422 | "type": "stop-time-updater",
423 | "frequency": "60s",
424 | "url": "http://digitransit-proxy:8080/out/lifti.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
425 | "feedId": "Vaasa",
426 | "fuzzyTripMatching": false,
427 | "backwardsDelayPropagationType": "ALWAYS"
428 | },
429 | {
430 | "id": "vaasa-alerts",
431 | "type": "real-time-alerts",
432 | "frequency": "30s",
433 | "url": "http://digitransit-proxy:8080/out/lifti.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
434 | "feedId": "Vaasa",
435 | "fuzzyTripMatching": false
436 | },
437 | {
438 | "id": "kouvola-trip-updates",
439 | "type": "stop-time-updater",
440 | "frequency": "60s",
441 | "url": "http://digitransit-proxy:8080/out/koutsi.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
442 | "feedId": "Kouvola",
443 | "fuzzyTripMatching": false,
444 | "backwardsDelayPropagationType": "ALWAYS"
445 | },
446 | {
447 | "id": "kouvola-alerts",
448 | "type": "real-time-alerts",
449 | "frequency": "30s",
450 | "url": "http://digitransit-proxy:8080/out/koutsi.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
451 | "feedId": "Kouvola",
452 | "fuzzyTripMatching": false
453 | },
454 | {
455 | "id": "kotka-trip-updates",
456 | "type": "stop-time-updater",
457 | "frequency": "60s",
458 | "url": "http://digitransit-proxy:8080/out/jonnejaminne.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
459 | "feedId": "Kotka",
460 | "fuzzyTripMatching": false,
461 | "backwardsDelayPropagationType": "ALWAYS"
462 | },
463 | {
464 | "id": "kotka-alerts",
465 | "type": "real-time-alerts",
466 | "frequency": "30s",
467 | "url": "http://digitransit-proxy:8080/out/jonnejaminne.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
468 | "feedId": "Kotka",
469 | "fuzzyTripMatching": false
470 | },
471 | {
472 | "id": "rovaniemi-trip-updates",
473 | "type": "stop-time-updater",
474 | "frequency": "60s",
475 | "url": "http://digitransit-proxy:8080/out/linkkari.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
476 | "feedId": "Rovaniemi",
477 | "fuzzyTripMatching": false,
478 | "backwardsDelayPropagationType": "ALWAYS"
479 | },
480 | {
481 | "id": "rovaniemi-alerts",
482 | "type": "real-time-alerts",
483 | "frequency": "30s",
484 | "url": "http://digitransit-proxy:8080/out/linkkari.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
485 | "feedId": "Rovaniemi",
486 | "fuzzyTripMatching": false
487 | },
488 | {
489 | "id": "kajaani-trip-updates",
490 | "type": "stop-time-updater",
491 | "frequency": "60s",
492 | "url": "http://digitransit-proxy:8080/out/kajaani.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
493 | "feedId": "Kajaani",
494 | "fuzzyTripMatching": false,
495 | "backwardsDelayPropagationType": "ALWAYS"
496 | },
497 | {
498 | "id": "kajaani-alerts",
499 | "type": "real-time-alerts",
500 | "frequency": "30s",
501 | "url": "http://digitransit-proxy:8080/out/kajaani.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
502 | "feedId": "Kajaani",
503 | "fuzzyTripMatching": false
504 | },
505 | {
506 | "id": "rauma-trip-updates",
507 | "type": "stop-time-updater",
508 | "frequency": "60s",
509 | "url": "http://digitransit-proxy:8080/out/rauma.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
510 | "feedId": "Rauma",
511 | "fuzzyTripMatching": false,
512 | "backwardsDelayPropagationType": "ALWAYS"
513 | },
514 | {
515 | "id": "rauma-alerts",
516 | "type": "real-time-alerts",
517 | "frequency": "30s",
518 | "url": "http://digitransit-proxy:8080/out/rauma.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
519 | "feedId": "Rauma",
520 | "fuzzyTripMatching": false
521 | },
522 | {
523 | "id": "pori-trip-updates",
524 | "type": "stop-time-updater",
525 | "frequency": "60s",
526 | "url": "http://digitransit-proxy:8080/out/pjl.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
527 | "feedId": "Pori",
528 | "fuzzyTripMatching": false,
529 | "backwardsDelayPropagationType": "ALWAYS"
530 | },
531 | {
532 | "id": "pori-alerts",
533 | "type": "real-time-alerts",
534 | "frequency": "30s",
535 | "url": "http://digitransit-proxy:8080/out/pjl.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
536 | "feedId": "Pori",
537 | "fuzzyTripMatching": false
538 | },
539 | {
540 | "id": "salo-trip-updates",
541 | "type": "stop-time-updater",
542 | "frequency": "60s",
543 | "url": "http://digitransit-proxy:8080/out/paikku.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
544 | "feedId": "Salo",
545 | "fuzzyTripMatching": false,
546 | "backwardsDelayPropagationType": "ALWAYS"
547 | },
548 | {
549 | "id": "salo-alerts",
550 | "type": "real-time-alerts",
551 | "frequency": "30s",
552 | "url": "http://digitransit-proxy:8080/out/paikku.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
553 | "feedId": "Salo",
554 | "fuzzyTripMatching": false
555 | },
556 | {
557 | "id": "lappeenranta-bike-rental",
558 | "type": "vehicle-rental",
559 | "sourceType": "gbfs",
560 | "frequency": "30s",
561 | "url": "http://digitransit-proxy:8080/out/stables.donkey.bike/api/public/gbfs/2/donkey_lappeenranta/gbfs.json",
562 | "overloadingAllowed": true,
563 | "rentalPickupTypes": ["station"]
564 | },
565 | {
566 | "id": "kotka-bike-rental",
567 | "type": "vehicle-rental",
568 | "sourceType": "gbfs",
569 | "frequency": "30s",
570 | "url": "http://digitransit-proxy:8080/out/stables.donkey.bike/api/public/gbfs/2/donkey_kotka/gbfs.json",
571 | "overloadingAllowed": true,
572 | "rentalPickupTypes": ["station"]
573 | },
574 | {
575 | "id": "kouvola-bike-rental",
576 | "type": "vehicle-rental",
577 | "sourceType": "gbfs",
578 | "frequency": "30s",
579 | "url": "http://digitransit-proxy:8080/out/stables.donkey.bike/api/public/gbfs/2/donkey_kouvola/gbfs.json",
580 | "overloadingAllowed": true
581 | },
582 | {
583 | "id": "lahti-bike-rental",
584 | "type": "vehicle-rental",
585 | "sourceType": "gbfs",
586 | "frequency": "60s",
587 | "network": "freebike_lahti",
588 | "url": "http://digitransit-proxy:8080/out/tkhslahtistorage.blob.core.windows.net/gbfs/gbfs.json",
589 | "overloadingAllowed": true,
590 | "rentalPickupTypes": ["station"]
591 | },
592 | {
593 | "id": "vantaa-bike-rental",
594 | "type": "vehicle-rental",
595 | "sourceType": "gbfs",
596 | "frequency": "30s",
597 | "network": "vantaa",
598 | "url": "http://digitransit-proxy:8080/out/vantaa-api.giravolta.io/api-opendata/gbfs/2_3/gbfs",
599 | "overloadingAllowed": true,
600 | "rentalPickupTypes": ["station"]
601 | },
602 | {
603 | "id": "hsl-bike-rental",
604 | "type": "vehicle-rental",
605 | "sourceType": "smoove",
606 | "frequency": "30s",
607 | "network": "smoove",
608 | "url": "http://digitransit-proxy:8080/out/helsinki-fi.smoove.pro/api-public/stations",
609 | "overloadingAllowed": true
610 | },
611 | {
612 | "id": "turku-bike-rental",
613 | "type": "vehicle-rental",
614 | "sourceType": "gbfs",
615 | "frequency": "30s",
616 | "url": "http://digitransit-proxy:8080/out/stables.donkey.bike/api/public/gbfs/2/donkey_turku/gbfs.json",
617 | "overloadingAllowed": true
618 | },
619 | {
620 | "id": "vilkku-bike-rental",
621 | "network": "freebike_kuopio",
622 | "type": "vehicle-rental",
623 | "sourceType": "gbfs",
624 | "frequency": "30s",
625 | "url": "http://digitransit-proxy:8080/out/tkhskuopiostrg.blob.core.windows.net/gbfs/gbfs.json",
626 | "overloadingAllowed": true
627 | },
628 | {
629 | "id": "tampere-bike-rental",
630 | "network": "inurba_tampere",
631 | "type": "vehicle-rental",
632 | "sourceType": "gbfs",
633 | "frequency": "30s",
634 | "url": "https://gbfs.urbansharing.com/tampere.onurbansharing.com/gbfs.json",
635 | "overloadingAllowed": true
636 | },
637 | {
638 | "id": "liipi",
639 | "type": "vehicle-parking",
640 | "sourceType": "liipi",
641 | "feedId": "liipi",
642 | "timeZone": "Europe/Helsinki",
643 | "facilitiesFrequencySec": 3600,
644 | "facilitiesUrl": "https://parking.fintraffic.fi/api/v1/facilities.json?limit=-1",
645 | "utilizationsFrequencySec": 600,
646 | "utilizationsUrl": "https://parking.fintraffic.fi/api/v1/utilizations.json?limit=-1",
647 | "hubsUrl": "https://parking.fintraffic.fi/api/v1/hubs.json?limit=-1"
648 | },
649 | {
650 | "id": "raasepori-alerts",
651 | "type": "real-time-alerts",
652 | "frequency": "30s",
653 | "url": "http://digitransit-proxy:8080/out/bosse.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
654 | "feedId": "Raasepori",
655 | "fuzzyTripMatching": false
656 | },
657 | {
658 | "id": "varely-trip-updates",
659 | "type": "stop-time-updater",
660 | "frequency": "60s",
661 | "url": "http://digitransit-proxy:8080/out/varely.mattersoft.fi/api/gtfsrealtime/v1.0/feed/tripupdate",
662 | "feedId": "VARELY",
663 | "fuzzyTripMatching": false,
664 | "backwardsDelayPropagationType": "ALWAYS"
665 | },
666 | {
667 | "id": "varely-alerts",
668 | "type": "real-time-alerts",
669 | "frequency": "30s",
670 | "url": "http://digitransit-proxy:8080/out/varely.mattersoft.fi/api/gtfsrealtime/v1.0/feed/servicealert",
671 | "feedId": "VARELY",
672 | "fuzzyTripMatching": false
673 | }
674 | ]
675 | }
676 |
--------------------------------------------------------------------------------