@golemio/pid 3.13.1 → 3.13.2-dev.1803100353
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/helpers/RedisJsonParser.d.ts +21 -0
- package/dist/helpers/RedisJsonParser.js +57 -0
- package/dist/helpers/RedisJsonParser.js.map +1 -0
- package/dist/input-gateway/vehicle-positions/VehiclePositionsController.js +0 -1
- package/dist/input-gateway/vehicle-positions/VehiclePositionsController.js.map +1 -1
- package/dist/integration-engine/jis/ioc/Di.js +2 -0
- package/dist/integration-engine/jis/ioc/Di.js.map +1 -1
- package/dist/integration-engine/jis/ioc/JISContainerToken.d.ts +1 -0
- package/dist/integration-engine/jis/ioc/JISContainerToken.js +1 -0
- package/dist/integration-engine/jis/ioc/JISContainerToken.js.map +1 -1
- package/dist/integration-engine/jis/repositories/JISEventsRepository.d.ts +9 -1
- package/dist/integration-engine/jis/repositories/JISEventsRepository.js +33 -2
- package/dist/integration-engine/jis/repositories/JISEventsRepository.js.map +1 -1
- package/dist/integration-engine/jis/transformations/JISEventsGtfsRtTransformation.d.ts +14 -0
- package/dist/integration-engine/jis/transformations/JISEventsGtfsRtTransformation.js +63 -0
- package/dist/integration-engine/jis/transformations/JISEventsGtfsRtTransformation.js.map +1 -0
- package/dist/integration-engine/ropid-gtfs/data-access/RopidGTFSRoutesRepository.d.ts +12 -0
- package/dist/integration-engine/ropid-gtfs/data-access/RopidGTFSRoutesRepository.js +39 -0
- package/dist/integration-engine/ropid-gtfs/data-access/RopidGTFSRoutesRepository.js.map +1 -0
- package/dist/integration-engine/ropid-gtfs/data-access/cache/DelayComputationRedisRepository.d.ts +2 -0
- package/dist/integration-engine/ropid-gtfs/data-access/cache/DelayComputationRedisRepository.js +48 -1
- package/dist/integration-engine/ropid-gtfs/data-access/cache/DelayComputationRedisRepository.js.map +1 -1
- package/dist/integration-engine/ropid-gtfs/ioc/Di.js +15 -13
- package/dist/integration-engine/ropid-gtfs/ioc/Di.js.map +1 -1
- package/dist/integration-engine/ropid-gtfs/ioc/RopidGtfsContainerToken.d.ts +1 -0
- package/dist/integration-engine/ropid-gtfs/ioc/RopidGtfsContainerToken.js +1 -0
- package/dist/integration-engine/ropid-gtfs/ioc/RopidGtfsContainerToken.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/ioc/Di.js +1 -1
- package/dist/integration-engine/vehicle-positions/ioc/Di.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/AlertsGenerator.d.ts +7 -1
- package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/AlertsGenerator.js +14 -4
- package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/AlertsGenerator.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/tasks/GenerateFilesTask.js +10 -6
- package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/tasks/GenerateFilesTask.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/interfaces/VPInterfaces.d.ts +3 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/ProcessRegionalBusPositionsTask.js +2 -3
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/ProcessRegionalBusPositionsTask.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/PropagateTrainDelayTask.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/UpdateDelayTask.js +2 -3
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/UpdateDelayTask.js.map +1 -1
- package/dist/output-gateway/public/data-access/redis/DelayComputationRepository.d.ts +1 -1
- package/dist/output-gateway/public/data-access/redis/DelayComputationRepository.js +10 -14
- package/dist/output-gateway/public/data-access/redis/DelayComputationRepository.js.map +1 -1
- package/dist/output-gateway/public/domain/repository/IDelayComputationRepository.d.ts +1 -1
- package/dist/output-gateway/public/service/helpers/trip-scope/strategy/ShapesTripScopeHandler.js +1 -1
- package/dist/output-gateway/public/service/helpers/trip-scope/strategy/ShapesTripScopeHandler.js.map +1 -1
- package/dist/output-gateway/public/service/helpers/trip-scope/strategy/StopTimesTripScopeHandler.js +1 -1
- package/dist/output-gateway/public/service/helpers/trip-scope/strategy/StopTimesTripScopeHandler.js.map +1 -1
- package/docs/cache/index.md +5 -0
- package/docs/cache/types/in_memory.md +58 -0
- package/docs/cache/types/psql.md +76 -0
- package/docs/cache/types/redis.md +314 -0
- package/docs/processing/index.md +17 -0
- package/docs/processing/input_realtime_data/http_mpvnet.md +153 -0
- package/docs/processing/input_realtime_data/tcp_dpp_bus.md +27 -0
- package/docs/processing/input_realtime_data/tcp_dpp_metro.md +24 -0
- package/docs/processing/input_realtime_data/tcp_dpp_tram.md +26 -0
- package/docs/processing/input_realtime_data/tcp_telmax_arriva_city.md +44 -0
- package/docs/processing/state_position_tracking/http_mpvnet.md +55 -0
- package/docs/{state_position_tracking/tcp_common.md → processing/state_position_tracking/tcp_dpp_common.md} +2 -14
- package/docs/{state_position_tracking/tcp_metro.md → processing/state_position_tracking/tcp_dpp_metro.md} +2 -9
- package/docs/processing/state_position_tracking/tcp_telmax_arriva_city.md +7 -0
- package/docs/processing/vehicle_types.md +32 -0
- package/package.json +3 -3
- package/docs/state_position_tracking/http.md +0 -113
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# PostgreSQL cache
|
|
2
|
+
|
|
3
|
+
- V současnosti cachujeme pouze kontext k danému RT spoji - tedy stav vozidla/spoje po poslední zpracované zprávě
|
|
4
|
+
- Nemusíme tedy dotahovat předchozí pozice z DB, ale veškeré informace máme ve sloupci `last_position_context` v tabulce `vehicle_positions_trips`
|
|
5
|
+
- Uložen jako JSON objekt s variabilními daty a atributy - v závislosti na stavu vozidla/spoje některé atributy chybí nebo jsou prázdné/null
|
|
6
|
+
- Pokud se jedná o první pozici na spoji, pak všechny atributy kromě `tripId` budou null a nepovinné atributy můžou chybět
|
|
7
|
+
- Aktuální interface viz [IVPTripsLastPositionContext](../../../src/schema-definitions/vehicle-positions/models/interfaces/VPTripsLastPositionInterfaces.ts)
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
interface IVPTripsLastPositionContext {
|
|
11
|
+
lastPositionId: string | null;
|
|
12
|
+
lastPositionLat?: number | null;
|
|
13
|
+
lastPositionLng?: number | null;
|
|
14
|
+
lastPositionOriginTimestamp: number | null;
|
|
15
|
+
lastPositionTracking: Feature<Point, IVPTripsPositionAttributes> | null;
|
|
16
|
+
lastPositionCanceled: boolean | null;
|
|
17
|
+
lastPositionLastStop: {
|
|
18
|
+
id: string | null;
|
|
19
|
+
sequence: number | null;
|
|
20
|
+
arrival_time: number | null;
|
|
21
|
+
arrival_delay: number | null;
|
|
22
|
+
departure_time: number | null;
|
|
23
|
+
departure_delay: number | null;
|
|
24
|
+
};
|
|
25
|
+
lastPositionDelay: number | null;
|
|
26
|
+
atStopStreak: IVPTripsComputedPositionAtStopStreak;
|
|
27
|
+
lastPositionBeforeTrackDelayed: {
|
|
28
|
+
delay: number | null;
|
|
29
|
+
origin_timestamp: Date;
|
|
30
|
+
} | null;
|
|
31
|
+
lastPositionState: StatePositionEnum | null;
|
|
32
|
+
lastStopSequence?: number | null;
|
|
33
|
+
lastPositionStateChange: string | null;
|
|
34
|
+
tripId: string;
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
- **lastPositionId** - ID poslední pozice, koresponduje ID záznamu v tabulce `vehiclepositions_positions`
|
|
39
|
+
- _poznámka_: využití během aktualizace tripu v databázi (lze nahradit přímo pozicí). Rovněž se využívá během propagace zpoždění
|
|
40
|
+
- **lastPositionLat** - poslední známá zeměpisná šířka vozidla
|
|
41
|
+
- _poznámka_: nepoužívá se a může být null, pokud je spoj zrušen a nepodařilo se zjistit poslední známou polohu
|
|
42
|
+
- **lastPositionLng** - poslední známá zeměpisná délka vozidla
|
|
43
|
+
- _poznámka_: nepoužívá se a může být null, pokud je spoj zrušen a nepodařilo se zjistit poslední známou polohu
|
|
44
|
+
- **lastPositionOriginTimestamp** - `origin_timestamp` poslední pozice (timestamp odeslání zprávy z vozidla)
|
|
45
|
+
- _poznámka_: využití během propagace zpoždění a určení duplikovaných zpráv. :warning: unix timestamp v milisekundách
|
|
46
|
+
- **lastPositionTracking** - pokud je poslední pozice tracked, pak je zde uložena jako GeoJSON objekt, jinak null
|
|
47
|
+
- _poznámka_: využití během určení stavu vozidla jedoucího z/do garáže, projetí poslední zastávky a ujeté trasy `shape_dist_traveled` a azimutu u propagované pozice
|
|
48
|
+
- **lastPositionCanceled** - indikátor, zda byl spoj předchozí zprávou deklarován jako zrušený
|
|
49
|
+
- _poznámka_: využití během aktualizace tripu v databázi. Zbytečné a lze nahradit stavem pozice
|
|
50
|
+
- **lastPositionLastStop** - informace o poslední zastávce, kterou vozidlo projelo
|
|
51
|
+
- _poznámka_: využití pouze pro výpočet zpoždění na zastávce
|
|
52
|
+
- **id** - GTFS ID zastávky. V současnosti je vždy null a nepoužívá se
|
|
53
|
+
- **sequence** - pořadí zastávky v rámci GTFS stop times
|
|
54
|
+
- **arrival_time** - čas příjezdu na zastávku podle GTFS
|
|
55
|
+
- **arrival_delay** - vypočítané zpoždění příjezdu na zastávku oproti GTFS v sekundách
|
|
56
|
+
- **departure_time** - čas odjezdu ze zastávky podle GTFS
|
|
57
|
+
- **departure_delay** - vypočítané zpoždění odjezdu ze zastávky oproti GTFS v sekundách
|
|
58
|
+
- **lastPositionDelay** - poslední vypočítané zpoždění vozidla na spoji
|
|
59
|
+
- _poznámka_: využití pouze pro výpočet zpoždění na zastávce
|
|
60
|
+
- **atStopStreak** - informace o délce pobytu vozidla na zastávce
|
|
61
|
+
- _poznámka_: využití pro přesnější určení zpoždění vozidla během pobytu na zastávce a taky pro výpočet zpoždění během příjezdu a odjezdu na zastávku
|
|
62
|
+
- **firstPositionTimestamp** - timestamp první pozice na zastávce
|
|
63
|
+
- **firstPositionDelay** - zpoždění v sekundách během první pozice na zastávce. Liší se od zpoždění během příjezdu na zastávku, které se počítá jinak
|
|
64
|
+
- **stop_sequence** - pořadí zastávky v rámci GTFS stop times
|
|
65
|
+
- **lastPositionBeforeTrackDelayed** - dodatečné informace o poslední pozici
|
|
66
|
+
- _poznámka_: vyplněno pouze v případě, že poslední pozice spoje byla zpropagována z předchozího spoje na oběhu, jinak null. Využití pro určení zpozdění vozidla a taky pro určení stavu vozidla jedoucího z/do garáže
|
|
67
|
+
- **delay** - zpoždění poslední pozice oproti GTFS v sekundách
|
|
68
|
+
- **origin_timestamp** - timestamp poslední pozice (timestamp odeslání zprávy z vozidla)
|
|
69
|
+
- **lastPositionState** - stav vozidla během poslední pozice
|
|
70
|
+
- _poznámka_: využití pro určení stavu a správné určení segmentu trasy (mezi jakými zastávkami se vozidlo nachází, díky tomu přesnější zpoždění vozidla)
|
|
71
|
+
- **lastStopSequence** - pořadí poslední projeté zastávky v rámci GTFS stop times
|
|
72
|
+
- _poznámka_: využití během určení, zda se vozidlo navrátilo na trase zpět
|
|
73
|
+
- **lastPositionStateChange** - timestamp poslední změny stavu vozidla
|
|
74
|
+
- _poznámka_: využití pro určení stavu vozidla a zda se má vůbec vypočítat zpoždění
|
|
75
|
+
- **tripId** - RT ID spoje, ke kterému se kontext vztahuje. Koresponduje ID záznamu v tabulce `vehiclepositions_trips`
|
|
76
|
+
- _poznámka_: využití během aktualizace tripu v databázi. Zbytečné, šlo by udělat lépe
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
# Redis cache
|
|
2
|
+
|
|
3
|
+
## Cache pro načítání GTFS jízdních řádů
|
|
4
|
+
|
|
5
|
+
### files:gtfsStatic:*
|
|
6
|
+
|
|
7
|
+
- Klíč `files:gtfsStatic:*`, kde `*` je název souboru, popř. cesta k souboru v případě ZIP archivu
|
|
8
|
+
- Hodnota CSV/JSON jako string
|
|
9
|
+
- TTL žádné
|
|
10
|
+
- Retence dat až do úspěšného načtení GTFS jíždních řádů
|
|
11
|
+
- Cache obsahuje všechny načtené soubory z ROPID FTP (viz [implementační dokumentace](../../implementation_documentation.md#files-gtfs-static#ropid-ftp-obecně))
|
|
12
|
+
- Menší soubory jsou ukládány pomocí `SET`, větší jsou streamovány pomocí knihovny [redis-wstream](https://github.com/jeffbski/redis-wstream) (`SET` + `APPEND`)
|
|
13
|
+
- Menší soubory jsou následně načteny pomocí `GET`, větší jsou streamovány z Redisu do PSQL pomocí knihovny [redis-rstream](https://github.com/jeffbski/redis-rstream) (`GETRANGE`)
|
|
14
|
+
|
|
15
|
+
### Flowchart
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD;
|
|
19
|
+
redis_1[("Redis files:gtfsStatic:*")];
|
|
20
|
+
redis_2[("Redis files:gtfsStatic:*")];
|
|
21
|
+
redis_3[("Redis files:gtfsStatic:*")];
|
|
22
|
+
|
|
23
|
+
psql[("PSQL ropidgtfs_*_tmp")];
|
|
24
|
+
amqp_transformAndSaveData[AMQP transformAndSaveData];
|
|
25
|
+
|
|
26
|
+
initial["Zpráva z cronu, stažení z ROPID FTP"];
|
|
27
|
+
initial--SET malý soubor-->redis_1;
|
|
28
|
+
initial--Wstream velký soubor-->redis_1;
|
|
29
|
+
initial-->amqp_transformAndSaveData;
|
|
30
|
+
|
|
31
|
+
amqp_transformAndSaveData--GET malý soubor<-->redis_2;
|
|
32
|
+
amqp_transformAndSaveData--Rstream velký soubor<-->redis_2;
|
|
33
|
+
amqp_transformAndSaveData--INSERT malý soubor-->psql;
|
|
34
|
+
amqp_transformAndSaveData--COPY stream velký soubor-->psql;
|
|
35
|
+
|
|
36
|
+
continue[Pokračování v načítání JŘ];
|
|
37
|
+
amqp_transformAndSaveData-->continue;
|
|
38
|
+
|
|
39
|
+
cache_manager["DataCacheManager"];
|
|
40
|
+
continue-->cache_manager;
|
|
41
|
+
cache_manager--Truncate-->redis_3;
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Cache pro GTFS-RT feedy
|
|
46
|
+
|
|
47
|
+
### files:gtfsRt
|
|
48
|
+
|
|
49
|
+
- Klíč `files:gtfsRt`, pomocný `files:gtfsRt_*_timestamp`, kde `*` je název feedu bez přípony
|
|
50
|
+
- Hodnota je hash mapa, kde klíč je název feedu s příponou `.pb`
|
|
51
|
+
- `trip_updates.pb`
|
|
52
|
+
- `vehicle_positions.pb`
|
|
53
|
+
- `pid_feed.pb`
|
|
54
|
+
- `alerts.pb`
|
|
55
|
+
- Hodnota v hash mapě je binární blob reprezentující specifický GTFS-RT feed
|
|
56
|
+
- Hodnota v pomocném klíči je unix timestamp poslední aktualizace daného feed v milisekundách
|
|
57
|
+
- TTL žádné
|
|
58
|
+
- Retence dat aktivní, vždy uchováváme nejnovější feedy
|
|
59
|
+
- Všechny feedy jsou ukládány pomocí `HSET`, pomocné timestampy pomocí `SET`
|
|
60
|
+
- Feedy jsou nabízený přes API `/v2/vehiclepositions/gtfsrt/{feed}`, kde `{feed}` je název feedu s příponou `.pb`
|
|
61
|
+
- Žádaný feed se načte pomocí `HGET` a vrátí se jako binární blob. Pokud feed neexistuje, vrátí se 404
|
|
62
|
+
- Pomocný timestamp se načte pomocí `GET` a vrátí se jako hodnota hlavičky `Last-Modified` převedená na ISO string. Pokud timestamp neexistuje, hodnota hlavičky bude unix timestamp 0 jako ISO string. Využívá se především pro monitoring a alerting
|
|
63
|
+
- Feedy se generují 3x za minutu (rabín 2x)
|
|
64
|
+
|
|
65
|
+
### Flowchart
|
|
66
|
+
|
|
67
|
+
```mermaid
|
|
68
|
+
flowchart TD;
|
|
69
|
+
redis_f_1[("Redis files:gtfsRt")];
|
|
70
|
+
redis_t_1[("Redis files:gtfsRt_*_timestamp")];
|
|
71
|
+
psql[("PSQL vehiclepositions_*, ropidvymi_*")];
|
|
72
|
+
|
|
73
|
+
connector[("OG Redis connector")];
|
|
74
|
+
repository["IE GtfsRtRedisRepository"];
|
|
75
|
+
|
|
76
|
+
get_gtfsrt["GET /v2/vehiclepositions/gtfsrt/$feed"];
|
|
77
|
+
|
|
78
|
+
initial["Zpráva z cronu, vygenerování feedů"];
|
|
79
|
+
initial--Select<-->psql;
|
|
80
|
+
initial-->repository;
|
|
81
|
+
repository--HSET *.pb-->redis_f_1;
|
|
82
|
+
repository--SET *_timestamp-->redis_t_1;
|
|
83
|
+
|
|
84
|
+
get_gtfsrt-->connector;
|
|
85
|
+
connector--HGET *.pb<-->redis_f_1;
|
|
86
|
+
connector--GET *_timestamp<-->redis_t_1;
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Cache pro zpracování RT dat
|
|
90
|
+
|
|
91
|
+
### gtfsRunSchedule:*
|
|
92
|
+
|
|
93
|
+
- TODO doplnit
|
|
94
|
+
|
|
95
|
+
### gtfsBlockSchedule:*
|
|
96
|
+
|
|
97
|
+
- TODO doplnit
|
|
98
|
+
|
|
99
|
+
### gtfsDelayComputation:*
|
|
100
|
+
|
|
101
|
+
- TODO doplnit
|
|
102
|
+
|
|
103
|
+
### Flowchart
|
|
104
|
+
|
|
105
|
+
```mermaid
|
|
106
|
+
flowchart TD;
|
|
107
|
+
todo["TODO"];
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Cache pro předzpracování a párování dat z Telmaxu (Arriva City)
|
|
111
|
+
|
|
112
|
+
### vpRegionalBusCisLookup:*
|
|
113
|
+
|
|
114
|
+
- TODO doplnit
|
|
115
|
+
|
|
116
|
+
### vpRegionalBusGtfsLookup:*
|
|
117
|
+
|
|
118
|
+
- TODO doplnit
|
|
119
|
+
|
|
120
|
+
### Flowchart
|
|
121
|
+
|
|
122
|
+
```mermaid
|
|
123
|
+
flowchart TD;
|
|
124
|
+
todo["TODO"];
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Cache pro public API
|
|
128
|
+
|
|
129
|
+
### vpPublicCache:*
|
|
130
|
+
|
|
131
|
+
- Hlavní komponentou je sorted set `vpPublicCache:$setId`, kde `$setId` je ID vygenerované datové sady (4 náhodné bajty reprentované hexadecimálně)
|
|
132
|
+
- Score je GPS souřadnice (`GEOADD`), member je ID vozidla. Sorted set se používá jako základ pro public VP (`GEOSEARCH`)
|
|
133
|
+
- ID nejnovější datové sady se propaguje přes PubSub channel `vpPublicCache`
|
|
134
|
+
- Další komponenty:
|
|
135
|
+
- `vpPublicCache:$setId:trip-$gtfsTripId` - list ID vozidel asociovaných s daným GTFS trip id (možnost více vozidel na jednom spoji)
|
|
136
|
+
- `vpPublicCache:$setId:vehicle-$vehicleId` - JSON jako string s informacemi o vozidle a spoji, které vykonává
|
|
137
|
+
- `vpPublicCache:$setId:future-trip-$gtfsTripId` - list ID vozidel asociovaných s daným GTFS trip id (možnost více vozidel na jednom spoji). Vozidlo je před trasou a vykonává předchozí spoj na oběhu (nemá se zobrazit na mapě). Využití v public odjezdech
|
|
138
|
+
- `vpPublicCache:$setId:future-vehicle-$vehicleId-$gtfsTripId` - JSON jako string s informacemi o vozidle. Vozidlo je před trasou a vykonává předchozí spoj na oběhu (nemá se zobrazit na mapě). Využití v public odjezdech a public VP detailu s GTFS lookupem
|
|
139
|
+
- `vpPublicCache:$setId:canceled-trips-$gtfsTripId` - JSON jako string s informacemi o zrušeném spoji. Využití v public odjezdech
|
|
140
|
+
- TTL 1 minuta
|
|
141
|
+
- Nová datová sada se generuje přibližně jednou za 3 vteřiny a obsahuje všechny RT spoje (aktivní, budoucí a zrušené)
|
|
142
|
+
|
|
143
|
+
### vpPublicStopTimeCache:*
|
|
144
|
+
|
|
145
|
+
- Klíč `vpPublicStopTimeCache:*`, kde `*` je kombinace ID vozidla a GTFS id spoje (možnost více vozidel na jednom spoji)
|
|
146
|
+
- Hodnota je JSON jako string s informacemi o zastávkách a jejich časech
|
|
147
|
+
- `sequence` - pořadí zastávky podle GTFS stop times
|
|
148
|
+
- `arr_delay` - čas příjezdu na zastávku - reálný čas u projetých zastávek, predikce u budoucích
|
|
149
|
+
- `dep_delay` - čas odjezdu ze zastávky - reálný čas u projetých zastávek, predikce u budoucích
|
|
150
|
+
- `cis_stop_platform_code` - nástupiště/kolej podle CIS u vlakových zastávek, jinde null
|
|
151
|
+
- `platform_code` - označení zastávky podle GTFS
|
|
152
|
+
- `stop_id` - GTFS id zastávky
|
|
153
|
+
- TTL 1 hodina a 5 minut
|
|
154
|
+
- Automatické promazání dat po úspěšném načtení GTFS jíždních řádů
|
|
155
|
+
- Cca jednou za 5 vteřin se přenačtou stop times pro všechny aktivní spoje. Generování může běžet pouze jednou, po dokončení tasku se spustí znovu (max čekání 4.8 vteřin)
|
|
156
|
+
|
|
157
|
+
### gtfsPublicDepartureCache:*
|
|
158
|
+
|
|
159
|
+
- Klíč `gtfsPublicDepartureCache:*`, kde `*` je GTFS id zastávky
|
|
160
|
+
- Hodnota je sorted set, kde score je unix timestamp odjezdu v sekundách a member jsou relevantní informace o odjezdu
|
|
161
|
+
- Existuje záznam pro každou zastávku v GTFS. Pokud v ní ale není žádný odjezd, je vyplněný pouze jeden prázdný member - detekce validní zastávky bez odjezdu
|
|
162
|
+
- TTL 7 hodin
|
|
163
|
+
- Retence dat aktivní, jednou za hodinu se smažou všechny odjezdy starší než 3 hodiny
|
|
164
|
+
- Jednou za hodinu se vygenerují nové odjezdy pro všechny zastávky v intervalu +5 hodin až +7 hodin, po přenačtení JŘ se přegenerují všechny odjezdy v interval -3 hodiny až +7 hodin
|
|
165
|
+
- Ukládá se pomocí `ZADD`, čte se pomocí `ZRANGEBYSCORE` (-inf, now + `minutesAfter`)
|
|
166
|
+
- Využití v public odjezdech
|
|
167
|
+
|
|
168
|
+
### Flowchart (refresh)
|
|
169
|
+
|
|
170
|
+
```mermaid
|
|
171
|
+
flowchart LR;
|
|
172
|
+
finish_up_gtfs["Dokončení zpracování GTFS JŘ"];
|
|
173
|
+
|
|
174
|
+
psql_rt[("PSQL vehiclepositions_*")];
|
|
175
|
+
psql_stop_times[("PSQL v_public_vehiclepositions_combined_stop_times")];
|
|
176
|
+
psql_departures[("PSQL ropidgtfs_departures")];
|
|
177
|
+
|
|
178
|
+
redis_pubsub_channel["Redis channel vpPublicCache"];
|
|
179
|
+
redis_public_cache[("Redis vpPublicCache:*")];
|
|
180
|
+
redis_stop_times[("Redis vpPublicStopTimeCache:*")];
|
|
181
|
+
redis_departures[("Redis gtfsPublicDepartureCache:*")];
|
|
182
|
+
|
|
183
|
+
amqp_refreshPublicTripCache[AMQP refreshPublicTripCache];
|
|
184
|
+
%% amqp_refreshPublicTripCache--"Čekání max 2.4 vteřin od spuštění tasku"-->amqp_refreshPublicTripCache;
|
|
185
|
+
amqp_refreshPublicStopTimeCache[AMQP refreshPublicStopTimeCache];
|
|
186
|
+
%% amqp_refreshPublicStopTimeCache--"Čekání max 4.8 vteřin od spuštění tasku"-->amqp_refreshPublicStopTimeCache;
|
|
187
|
+
amqp_refreshPublicGtfsDepartureCache[AMQP refreshPublicGtfsDepartureCache];
|
|
188
|
+
|
|
189
|
+
cron_public_cache["Cron public VP 1x za minutu (backup)"];
|
|
190
|
+
cron_public_cache-->amqp_refreshPublicTripCache;
|
|
191
|
+
|
|
192
|
+
cron_stop_times["Cron zastávky spojů 1x za minutu (backup)"];
|
|
193
|
+
cron_stop_times-->amqp_refreshPublicStopTimeCache;
|
|
194
|
+
|
|
195
|
+
cron_departures["Cron odjezdy 1x za hodinu"];
|
|
196
|
+
cron_departures--"{fromHours: 5, toHours: 7}"-->amqp_refreshPublicGtfsDepartureCache;
|
|
197
|
+
|
|
198
|
+
finish_up_gtfs--"Truncate"-->redis_stop_times;
|
|
199
|
+
finish_up_gtfs--"{fromHours: -3, toHours: 7}"-->amqp_refreshPublicGtfsDepartureCache;
|
|
200
|
+
|
|
201
|
+
amqp_refreshPublicTripCache--"Aktivní spoje a jejich polohy"<-->psql_rt;
|
|
202
|
+
amqp_refreshPublicTripCache--"GEOADD + RPUSH + SET"-->redis_public_cache;
|
|
203
|
+
amqp_refreshPublicTripCache--"ID/název nové datové sady"-->redis_pubsub_channel;
|
|
204
|
+
|
|
205
|
+
amqp_refreshPublicStopTimeCache--"Zastávky u všech aktivních spojů"<-->psql_stop_times;
|
|
206
|
+
amqp_refreshPublicStopTimeCache--"MSET"-->redis_stop_times;
|
|
207
|
+
|
|
208
|
+
amqp_refreshPublicGtfsDepartureCache--"Odjezdy v intervalu"<-->psql_departures;
|
|
209
|
+
amqp_refreshPublicGtfsDepartureCache--"ZREMRANGEBYSCORE + ZADD"-->redis_departures;
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Flowchart (public API VP)
|
|
213
|
+
```mermaid
|
|
214
|
+
flowchart TD;
|
|
215
|
+
redis_pubsub_channel["Redis channel vpPublicCache"];
|
|
216
|
+
redis_subscriber["VPSubscriber"];
|
|
217
|
+
redis_public_cache[("Redis vpPublicCache:* (RT info)")];
|
|
218
|
+
redis_public_cache_misc[("Redis vpPublicCache:* (aktivní, budoucí a zrušené spoje)")];
|
|
219
|
+
redis_repository["OG PublicVehiclePositionsRepository"];
|
|
220
|
+
|
|
221
|
+
redis_repository<-->redis_public_cache_misc;
|
|
222
|
+
redis_repository<-->redis_public_cache;
|
|
223
|
+
|
|
224
|
+
redis_subscriber--"Přihlášení k odběru"-->redis_pubsub_channel;
|
|
225
|
+
redis_pubsub_channel--"ID/název nové datové sady"-->redis_subscriber--"setCurrentSetName"-->redis_repository;
|
|
226
|
+
|
|
227
|
+
get_vp["GET /v2/public/vehiclepositions"];
|
|
228
|
+
get_vp--"GEOSEARCH + vehicle_id lookup pouze aktivních spojů"-->redis_repository;
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Flowchart (public API VP detail)
|
|
232
|
+
```mermaid
|
|
233
|
+
flowchart TD;
|
|
234
|
+
redis_pubsub_channel["Redis channel vpPublicCache"];
|
|
235
|
+
redis_subscriber["VPSubscriber"];
|
|
236
|
+
redis_public_cache[("Redis vpPublicCache:* (RT info)")];
|
|
237
|
+
redis_public_cache_misc[("Redis vpPublicCache:* (aktivní, budoucí a zrušené spoje)")];
|
|
238
|
+
redis_stop_times[("Redis vpPublicStopTimeCache:*")];
|
|
239
|
+
redis_delay_computation[("Redis gtfsDelayComputation:* (pouze shapes)")];
|
|
240
|
+
redis_repository["OG PublicVehiclePositionsRepository"];
|
|
241
|
+
redis_repository<-->redis_public_cache_misc;
|
|
242
|
+
redis_repository<-->redis_public_cache;
|
|
243
|
+
|
|
244
|
+
redis_subscriber--"Přihlášení k odběru"-->redis_pubsub_channel;
|
|
245
|
+
redis_pubsub_channel--"ID/název nové datové sady"-->redis_subscriber--"setCurrentSetName"-->redis_repository;
|
|
246
|
+
|
|
247
|
+
get_vp_detail["GET /v2/public/vehiclepositions/$vehicle_id"];
|
|
248
|
+
|
|
249
|
+
get_vp_detail--"Lookup aktivního GTFS spoje"-->redis_repository;
|
|
250
|
+
get_vp_detail--"scope[]=stop_times"<-->redis_stop_times;
|
|
251
|
+
get_vp_detail--"scope[]=shapes"<-->redis_delay_computation;
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Flowchart (public API VP detail with GTFS)
|
|
255
|
+
```mermaid
|
|
256
|
+
flowchart TD;
|
|
257
|
+
redis_pubsub_channel["Redis channel vpPublicCache"];
|
|
258
|
+
redis_subscriber["VPSubscriber"];
|
|
259
|
+
redis_public_cache[("Redis vpPublicCache:* (RT info)")];
|
|
260
|
+
redis_public_cache_misc[("Redis vpPublicCache:* (aktivní, budoucí a zrušené spoje)")];
|
|
261
|
+
redis_stop_times[("Redis vpPublicStopTimeCache:*")];
|
|
262
|
+
redis_delay_computation[("Redis gtfsDelayComputation:* (pouze shapes)")];
|
|
263
|
+
redis_repository["OG PublicVehiclePositionsRepository"];
|
|
264
|
+
|
|
265
|
+
redis_repository<-->redis_public_cache_misc;
|
|
266
|
+
redis_repository<-->redis_public_cache;
|
|
267
|
+
|
|
268
|
+
redis_subscriber--"Přihlášení k odběru"-->redis_pubsub_channel;
|
|
269
|
+
redis_pubsub_channel--"ID/název nové datové sady"-->redis_subscriber--"setCurrentSetName"-->redis_repository;
|
|
270
|
+
|
|
271
|
+
get_vp_detail_with_gtfs["GET /v2/public/vehiclepositions/$vehicle_id;gtfsTripId=$gtfsTripId"];
|
|
272
|
+
|
|
273
|
+
get_vp_detail_with_gtfs--"Lookup aktivního nebo budoucího GTFS spoje (exact match)"-->redis_repository;
|
|
274
|
+
get_vp_detail_with_gtfs--"scope[]=stop_times"<-->redis_stop_times;
|
|
275
|
+
get_vp_detail_with_gtfs--"scope[]=shapes"<-->redis_delay_computation;
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Flowchart (public API GTFS static lookup)
|
|
279
|
+
|
|
280
|
+
:warning: GTFS static lookup neřeší RT informace a jako jediný EP je napojený přímo na PSQL. Kvůli předpokládáně nižšímu využití (detail odjezdů v budoucnosti) to tolik nevadí
|
|
281
|
+
|
|
282
|
+
```mermaid
|
|
283
|
+
flowchart TD;
|
|
284
|
+
psql_trip[("PSQL ropidgtfs_trips, ropidgtfs_routes, ropidgtfs_precomputed_trip_schedule")];
|
|
285
|
+
psql_stop_times[("PSQL ropidgtfs_stop_times, ropidgtfs_stops")];
|
|
286
|
+
psql_shapes[("PSQL ropidgtfs_shapes")];
|
|
287
|
+
|
|
288
|
+
get_gtfs_detail["GET /v2/public/gtfs/trips/$trip_id"];
|
|
289
|
+
get_gtfs_detail--"Lookup GTFS trip id"<-->psql_trip;
|
|
290
|
+
get_gtfs_detail--"scope[]=stop_times"<-->psql_stop_times;
|
|
291
|
+
get_gtfs_detail--"scope[]=shapes"<-->psql_shapes;
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Flowchart (public API departures)
|
|
295
|
+
```mermaid
|
|
296
|
+
flowchart TD;
|
|
297
|
+
redis_pubsub_channel["Redis channel vpPublicCache"];
|
|
298
|
+
redis_subscriber["VPSubscriber"];
|
|
299
|
+
redis_public_cache[("Redis vpPublicCache:* (RT info)")];
|
|
300
|
+
redis_public_cache_misc[("Redis vpPublicCache:* (aktivní, budoucí a zrušené spoje)")];
|
|
301
|
+
redis_departures[("Redis gtfsPublicDepartureCache:*")];
|
|
302
|
+
redis_repository["OG PublicVehiclePositionsRepository"];
|
|
303
|
+
|
|
304
|
+
redis_subscriber--"Přihlášení k odběru"-->redis_pubsub_channel;
|
|
305
|
+
redis_pubsub_channel--"ID/název nové datové sady"-->redis_subscriber--"setCurrentSetName"-->redis_repository;
|
|
306
|
+
|
|
307
|
+
get_departures["GET /v2/public/departureboards"];
|
|
308
|
+
|
|
309
|
+
get_departures--"Odjezdy pro zastávky"-->redis_departures;
|
|
310
|
+
get_departures--"Aktivní vozidlo podle GTFS trip id"-->redis_repository<-->redis_public_cache_misc;
|
|
311
|
+
rt_info["Obohacení o RT informace"];
|
|
312
|
+
get_departures--"Alespoň jedno vozidlo připadá nějakému spoji (aktivní, budoucí i zrušené) na odjezdu"-->rt_info;
|
|
313
|
+
rt_info--"RT informace o spoji"-->redis_repository<-->redis_public_cache;
|
|
314
|
+
```
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Dokumentace zpracování vstupních RT dat
|
|
2
|
+
|
|
3
|
+
- **Popis vstupních dat podle poskytovatele**
|
|
4
|
+
- [HTTP MPVNet](./input_realtime_data/http_mpvnet.md)
|
|
5
|
+
- [Městské a příměstské autobusy (mimo DPP)](./input_realtime_data/http_mpvnet.md#městské-a-příměstské-autobusy-mimo-dpp)
|
|
6
|
+
- [Přívozy](./input_realtime_data/http_mpvnet.md#přívozy)
|
|
7
|
+
- [Vlaky](./input_realtime_data/http_mpvnet.md#vlaky)
|
|
8
|
+
- [TCP DPP tramvaje](./input_realtime_data/tcp_dpp_tram.md)
|
|
9
|
+
- [TCP DPP autobusy a trolejbusy](./input_realtime_data/tcp_dpp_bus.md)
|
|
10
|
+
- [TCP DPP metro](./input_realtime_data/tcp_dpp_metro.md)
|
|
11
|
+
- [TCP Telmax Arriva City](./input_realtime_data/tcp_telmax_arriva_city.md)
|
|
12
|
+
- **Popis určení stavu vozidla na trase podle poskytovatele**
|
|
13
|
+
- [HTTP MPVNet](./state_position_tracking/http_mpvnet.md)
|
|
14
|
+
- [TCP DPP](./state_position_tracking/tcp_dpp_common.md)
|
|
15
|
+
- [TCP DPP metro](./state_position_tracking/tcp_dpp_metro.md)
|
|
16
|
+
- [TCP Telmax Arriva City](./state_position_tracking/tcp_telmax_arriva_city.md)
|
|
17
|
+
- [**Mapování MPVNet vehicle type na GTFS**](./vehicle_types.md)
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# HTTP MPVNet
|
|
2
|
+
|
|
3
|
+
## Městské a příměstské autobusy (mimo DPP)
|
|
4
|
+
```xml
|
|
5
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
6
|
+
|
|
7
|
+
<m disp="http://77.93.194.81:8716/api">
|
|
8
|
+
|
|
9
|
+
<spoj ka="2" kb="0" den="2025-03-30" lin="100194" alias="194" spoj="4009" dopr="ABOUT ME" doprSkut="ABOUT ME" kmenl="194" t="3" tcis="A" np="true" po="2" vuzevc="1907" skol="false" posl="false" sled="2" lat="50.09078" lng="14.42738" cpoz="09:34:59" azimut="76" rychl="1" zast="63505" asw="14100002" zpoz_prij="-59">
|
|
10
|
+
<zast stan="A" odj="09:20" zast="59168" asw="29530001" zpoz_typ_odj="3" zpoz_odj="28" />
|
|
11
|
+
|
|
12
|
+
<zast stan="D" odj="09:23" zast="59104" asw="3610004" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="-33" zpoz_odj="9" />
|
|
13
|
+
|
|
14
|
+
<zast stan="I" odj="09:26" zast="57811" asw="3600009" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="-84" zpoz_odj="-44" />
|
|
15
|
+
|
|
16
|
+
<zast stan="A" odj="09:27" zast="59299" asw="7030081" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="-36" zpoz_odj="-3" />
|
|
17
|
+
|
|
18
|
+
<zast stan="B" odj="09:29" zast="63506" asw="14080002" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="-70" zpoz_odj="5" />
|
|
19
|
+
|
|
20
|
+
<zast stan="A" odj="09:32" zast="59300" asw="29620001" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="-94" zpoz_odj="-9" />
|
|
21
|
+
|
|
22
|
+
<zast stan="A" odj="09:33" zast="59108" asw="29630001" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="-18" zpoz_odj="-1" />
|
|
23
|
+
|
|
24
|
+
<zast stan="B" odj="09:35" zast="63505" asw="14100002" zpoz_typ_prij="3" zpoz_typ_odj="2" zpoz_prij="-59" zpoz_odj="0" />
|
|
25
|
+
|
|
26
|
+
<zast stan="A" odj="09:37" zast="63507" asw="14090001" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="0" zpoz_odj="0" />
|
|
27
|
+
|
|
28
|
+
<zast stan="B" odj="09:39" zast="59203" asw="29560002" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="0" zpoz_odj="0" />
|
|
29
|
+
|
|
30
|
+
<zast stan="B" odj="09:40" zast="58766" asw="320052" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="0" zpoz_odj="0" />
|
|
31
|
+
|
|
32
|
+
<zast stan="H" prij="09:41" zast="27863" asw="6890008" zpoz_typ_prij="2" zpoz_prij="0" />
|
|
33
|
+
</spoj>
|
|
34
|
+
|
|
35
|
+
</m>
|
|
36
|
+
```
|
|
37
|
+
- _spoj_ - informace o spoji a vozidlu
|
|
38
|
+
- **ka** - ??? nepoužíváme
|
|
39
|
+
- **kb** - ??? nepoužíváme
|
|
40
|
+
- **den** - datum, kdy spoj vyjel
|
|
41
|
+
- **lin** - označení linky podle CIS
|
|
42
|
+
- **alias** - číslo/označení linky podle CIS
|
|
43
|
+
- **spoj** - označení spoje podle CIS
|
|
44
|
+
- **dopr** - smluvní dopravce podle JŘ
|
|
45
|
+
- **doprSkut** - reálný dopravce vykonávající oběh
|
|
46
|
+
- **kmenl** - kmenová linka, může se lišit od **alias**
|
|
47
|
+
- **t** - typ vozidla, viz [vehicle_types.md](../vehicle_types.md)
|
|
48
|
+
- **tcis** - ??? nepoužíváme
|
|
49
|
+
- **np** - indikátor nízkopodlažnosti
|
|
50
|
+
- **po** - oběhové číslo
|
|
51
|
+
- **vuzevc** - [Evidenční číslo vozidla](https://cs.wikipedia.org/wiki/Eviden%C4%8Dn%C3%AD_%C4%8D%C3%ADslo_vozidla)
|
|
52
|
+
- **skol** - nejspíš indikátor školního spoje ??? nepoužíváme
|
|
53
|
+
- **posl** - nejspíš indikátor poslední spoje na oběhu ??? nepoužíváme
|
|
54
|
+
- **sled** - indikátor, zda je spoj sledovaný (tracked)
|
|
55
|
+
- 0 - nesledovaný (spoj je před trasou nebo dojel nebo je zrušen)
|
|
56
|
+
- 2 - sledovaný (spoj je na trase nebo v zastávce)
|
|
57
|
+
- **lat** - zeměpisná šířka
|
|
58
|
+
- **lng** - zeměpisná délka
|
|
59
|
+
- **cpoz** - čas odeslání zprávy (nejspíš z vozidla), nesmí být více než 5 minut v budoucnu
|
|
60
|
+
- **azimut** - azimut
|
|
61
|
+
- **rychl** - rychlost vozidla
|
|
62
|
+
- **zast** - aktuální nebo poslední projetá zastávka CIS (miniuzel)
|
|
63
|
+
- **asw** - aktuální nebo poslední projetá zastávka ASW
|
|
64
|
+
- **zpoz_prij** - zpoždění na příjezdu do aktuální nebo poslední projeté zastávky
|
|
65
|
+
- **zpoz_odj** - zpoždění na odjezdu z poslední projeté zastávky. Pokud je vozidlo v zastávce, pak není vyplněno
|
|
66
|
+
- **zrus** - indikátor, zda byl spoj zrušen
|
|
67
|
+
- **zrusod** - příklad 59168/A, nejspíš od které zastávky byl spoj zrušen ???
|
|
68
|
+
- _zast_ - informace o projetých i budoucích zastávkách spoje
|
|
69
|
+
- **stan** - stanoviště/nástupiště/kolej podle CIS
|
|
70
|
+
- **odj** - čas odjezdu za zastávky podle JŘ
|
|
71
|
+
- **prij** - čas příjezdu do zastávky podle JŘ
|
|
72
|
+
- **zast** - identifikátor miniuzlu (CIS), kam zastávka patří
|
|
73
|
+
- **asw** - ASW identifikátor zastávky
|
|
74
|
+
- **zpoz_typ_prij** - typ zpoždění příjezd do zastávky (2 predikce, 3 reálný stav)
|
|
75
|
+
- **zpoz_typ_odj** - typ zpoždění odjezd ze zastávky (2 predikce, 3 reálný stav)
|
|
76
|
+
- **zpoz_prij** - zpoždění příjezd do zastávky
|
|
77
|
+
- **zpoz_odj** - zpoždění příjezd do zastávky
|
|
78
|
+
|
|
79
|
+
## Přívozy
|
|
80
|
+
```xml
|
|
81
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
82
|
+
|
|
83
|
+
<m disp="http://77.93.194.81:8716/api">
|
|
84
|
+
|
|
85
|
+
<spoj ka="2" kb="0" den="2025-03-30" lin="199693" alias="P3" spoj="4096" dopr="VITTUS GROUP" doprSkut="VITTUS GROUP" kmenl="1803" t="12" tcis="P" np="true" po="1" vuzevc="302" skol="false" posl="false" sled="0" lat="50.04807" lng="14.41222" cpoz="09:18:29" azimut="337" rychl="2">
|
|
86
|
+
<zast stan="K" odj="09:32" zast="58997" asw="1100011" zpoz_typ_odj="2" zpoz_odj="0" />
|
|
87
|
+
|
|
88
|
+
<zast stan="K" prij="09:34" zast="28003" asw="3370011" zpoz_typ_prij="2" zpoz_prij="0" />
|
|
89
|
+
</spoj>
|
|
90
|
+
|
|
91
|
+
</m>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Vlaky
|
|
95
|
+
```xml
|
|
96
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
97
|
+
|
|
98
|
+
<m disp="http://77.93.194.81:8716/api">
|
|
99
|
+
|
|
100
|
+
<spoj ka="1" kb="0" den="2025-03-30" lin="" alias="S8" spoj="9055" dopr="ČESKÉ DRÁHY" t="0" np="true" skol="false" posl="false" sled="2" lat="49.8657227" lng="14.4618721" cpoz="09:35:19" zast="5455746" zpoz_prij="600" zpoz_odj="600">
|
|
101
|
+
<zast stan="5S/22S" odj="08:25" zast="5457076" zpoz_typ_odj="3" zpoz_odj="720" />
|
|
102
|
+
|
|
103
|
+
<zast stan="-/6" prij="08:29" odj="08:30" zast="5457276" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="720" zpoz_odj="780" />
|
|
104
|
+
|
|
105
|
+
<zast stan="-/1" odj="08:34" zast="5457287" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="720" zpoz_odj="780" />
|
|
106
|
+
|
|
107
|
+
<zast stan="-/2" odj="08:38" zast="5457156" zpoz_zxtyp_prij="3" zpoz_typ_odj="3" zpoz_prij="660" zpoz_odj="720" />
|
|
108
|
+
|
|
109
|
+
<zast stan="2/-" prij="08:42" odj="08:43" zast="5457016" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="660" zpoz_odj="660" />
|
|
110
|
+
|
|
111
|
+
<zast stan="-/2" prij="08:46" odj="08:47" zast="5457386" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="720" zpoz_odj="720" />
|
|
112
|
+
|
|
113
|
+
<zast stan="-/1" odj="08:49" zast="5455526" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="780" zpoz_odj="840" />
|
|
114
|
+
|
|
115
|
+
<zast stan="-/3" odj="08:53" zast="5455536" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="720" zpoz_odj="780" />
|
|
116
|
+
|
|
117
|
+
<zast stan="-/1" odj="08:57" zast="5455556" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="720" zpoz_odj="780" />
|
|
118
|
+
|
|
119
|
+
<zast stan="2/3" prij="09:01" odj="09:02" zast="5455546" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="720" zpoz_odj="720" />
|
|
120
|
+
|
|
121
|
+
<zast stan="-/1" odj="09:05" zast="5458316" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="660" zpoz_odj="660" />
|
|
122
|
+
|
|
123
|
+
<zast stan="-/2" prij="09:12" odj="09:13" zast="5455696" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="600" zpoz_odj="600" />
|
|
124
|
+
|
|
125
|
+
<zast stan="-/1" odj="09:16" zast="5455716" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="600" zpoz_odj="660" />
|
|
126
|
+
|
|
127
|
+
<zast stan="-/1" odj="09:19" zast="5455726" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="600" zpoz_odj="660" />
|
|
128
|
+
|
|
129
|
+
<zast stan="-/1" odj="09:24" zast="5455746" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="600" zpoz_odj="600" />
|
|
130
|
+
|
|
131
|
+
<zast stan="-/1" prij="09:30" odj="09:31" zast="5455736" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="720" zpoz_odj="720" />
|
|
132
|
+
|
|
133
|
+
<zast prij="09:35" odj="09:36" zast="5455756" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="720" zpoz_odj="720" />
|
|
134
|
+
|
|
135
|
+
<zast prij="09:38" odj="09:39" zast="5455776" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="720" zpoz_odj="720" />
|
|
136
|
+
|
|
137
|
+
<zast prij="09:42" odj="09:43" zast="5455766" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="720" zpoz_odj="720" />
|
|
138
|
+
|
|
139
|
+
<zast odj="09:46" zast="5455796" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="720" zpoz_odj="720" />
|
|
140
|
+
|
|
141
|
+
<zast prij="09:49" odj="10:03" zast="5455786" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="720" zpoz_odj="720" />
|
|
142
|
+
|
|
143
|
+
<zast prij="10:06" odj="10:07" zast="5455806" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="720" zpoz_odj="720" />
|
|
144
|
+
|
|
145
|
+
<zast prij="10:11" odj="10:12" zast="5455816" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="720" zpoz_odj="720" />
|
|
146
|
+
|
|
147
|
+
<zast prij="10:14" odj="10:15" zast="5455096" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="720" zpoz_odj="720" />
|
|
148
|
+
|
|
149
|
+
<zast prij="10:19" zast="5455046" zpoz_typ_prij="2" zpoz_prij="300" />
|
|
150
|
+
</spoj>
|
|
151
|
+
|
|
152
|
+
</m>
|
|
153
|
+
```
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# TCP DPP autobusy a trolejbusy
|
|
2
|
+
|
|
3
|
+
```xml
|
|
4
|
+
<M>
|
|
5
|
+
|
|
6
|
+
<V turnus="144/3" line="144" evc="3885" np="ano" lat="50.12460" lng="14.45489" akt="06750004" takt="2025-03-30T18:10:04" konc="06490001" tjr="2025-03-30T18:10:00" pkt="473060" tm="2025-03-30T18:10:06" events="P"/>
|
|
7
|
+
|
|
8
|
+
</M>
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
- **turnus** - oběh
|
|
12
|
+
- **line** - linka
|
|
13
|
+
- **evc** - [Evidenční číslo vozidla](https://cs.wikipedia.org/wiki/Eviden%C4%8Dn%C3%AD_%C4%8D%C3%ADslo_vozidla)
|
|
14
|
+
- **np** - indikátor nízkopodlažnosti
|
|
15
|
+
- **lat** - zeměpisná šířka
|
|
16
|
+
- **lng** - zeměpisná délka
|
|
17
|
+
- **akt** - poslední projetá zastávka, nepoužíváme
|
|
18
|
+
- **takt** - timestamp odeslání zprávy z vozidla
|
|
19
|
+
- **konc** - poslední ASW zastávka spoje, nepoužíváme
|
|
20
|
+
- **tjr** - timestamp odeslání zprávy podle JŘ (v jaký čas mělo vozidlo na daném bodě být)
|
|
21
|
+
- **pkt** - identifikátor zprávy z vozidla/číslo TCP packetu??? Nepoužíváme
|
|
22
|
+
- **tm** - timestamp odeslání zprávy od DPP
|
|
23
|
+
- **events** - událost asociovaná se zprávou
|
|
24
|
+
- P - příjezd do zastávky
|
|
25
|
+
- O - odjezd ze zastávky
|
|
26
|
+
- V - spoj ukončen
|
|
27
|
+
- T - checkpoint na trase, vozidlo jen o sobě dává vědět
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# TCP DPP metro
|
|
2
|
+
|
|
3
|
+
```xml
|
|
4
|
+
<m linka="C" tm="2025-03-03T09:07:59Z" gvd="GD29c">
|
|
5
|
+
|
|
6
|
+
<vlak csp=" 6" csr=" 6" cv="225" ko="282901" odch="-25" />
|
|
7
|
+
|
|
8
|
+
<vlak csp="10" csr="10" cv="229" ko="313207" odch="0" />
|
|
9
|
+
|
|
10
|
+
<vlak csp="16" csr="16" cv="260" ko="3704" odch="15" />
|
|
11
|
+
|
|
12
|
+
<vlak csp="18" csr="18" cv="245" ko="4709" odch="50" />
|
|
13
|
+
|
|
14
|
+
</m>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
- **linka** - označení linky, koresponduje s GTFS `route.short_name`
|
|
18
|
+
- **tm** - timestamp odeslání zprávy od DPP
|
|
19
|
+
- **gvd** - grafikon, nepoužíváme
|
|
20
|
+
- **csp** - oběhové číslo podle JŘ, nevěříme
|
|
21
|
+
- **csr** - oběhové číslo doopravdy, nevěříme
|
|
22
|
+
- **cv** - číslo spoje, koresponduje s trip_number v obehy.csv, unikátní v rámci linky
|
|
23
|
+
- **ko** - kolejový obvod, určení GPS souřadnic
|
|
24
|
+
- **odch** - odchylka oproti `tm`, určení zpoždění (záporné číslo znamená zpoždění)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# TCP DPP tramvaje
|
|
2
|
+
|
|
3
|
+
```xml
|
|
4
|
+
<M>
|
|
5
|
+
|
|
6
|
+
<V turnus="12/2" line="12" evc="8544" lat="50.10486" lng="14.53100" akt="51440002" takt="2025-03-30T18:11:52" konc="00720002" tjr="2025-03-30T18:10:00" pkt="591646" tm="2025-03-30T18:11:52" events="O"/>
|
|
7
|
+
|
|
8
|
+
</M>
|
|
9
|
+
```
|
|
10
|
+
- **turnus** - oběh
|
|
11
|
+
- **line** - linka
|
|
12
|
+
- **evc** - [Evidenční číslo vozidla](https://cs.wikipedia.org/wiki/Eviden%C4%8Dn%C3%AD_%C4%8D%C3%ADslo_vozidla)
|
|
13
|
+
- **np** - indikátor nízkopodlažnosti
|
|
14
|
+
- **lat** - zeměpisná šířka
|
|
15
|
+
- **lng** - zeměpisná délka
|
|
16
|
+
- **akt** - poslední projetá zastávka, nepoužíváme
|
|
17
|
+
- **takt** - timestamp odeslání zprávy z vozidla
|
|
18
|
+
- **konc** - poslední ASW zastávka spoje, nepoužíváme
|
|
19
|
+
- **tjr** - timestamp odeslání zprávy podle JŘ (v jaký čas mělo vozidlo na daném bodě být)
|
|
20
|
+
- **pkt** - identifikátor zprávy z vozidla/číslo TCP packetu??? Nepoužíváme
|
|
21
|
+
- **tm** - timestamp odeslání zprávy od DPP
|
|
22
|
+
- **events** - událost asociovaná se zprávou
|
|
23
|
+
- P - příjezd do zastávky
|
|
24
|
+
- O - odjezd ze zastávky
|
|
25
|
+
- V - spoj ukončen
|
|
26
|
+
- T - checkpoint na trase, vozidlo jen o sobě dává vědět
|