# HTTP MPVNet

## Městské a příměstské autobusy (mimo DPP)
```xml
<?xml version="1.0" encoding="utf-8"?>

<m disp="http://77.93.194.81:8716/api">

<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">
	<zast stan="A" odj="09:20" zast="59168" asw="29530001" zpoz_typ_odj="3" zpoz_odj="28" />
	
	<zast stan="D" odj="09:23" zast="59104" asw="3610004" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="-33" zpoz_odj="9" />
	
	<zast stan="I" odj="09:26" zast="57811" asw="3600009" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="-84" zpoz_odj="-44" />
	
	<zast stan="A" odj="09:27" zast="59299" asw="7030081" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="-36" zpoz_odj="-3" />
	
	<zast stan="B" odj="09:29" zast="63506" asw="14080002" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="-70" zpoz_odj="5" />
	
	<zast stan="A" odj="09:32" zast="59300" asw="29620001" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="-94" zpoz_odj="-9" />
	
	<zast stan="A" odj="09:33" zast="59108" asw="29630001" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="-18" zpoz_odj="-1" />
	
	<zast stan="B" odj="09:35" zast="63505" asw="14100002" zpoz_typ_prij="3" zpoz_typ_odj="2" zpoz_prij="-59" zpoz_odj="0" />
	
	<zast stan="A" odj="09:37" zast="63507" asw="14090001" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="0" zpoz_odj="0" />
	
	<zast stan="B" odj="09:39" zast="59203" asw="29560002" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="0" zpoz_odj="0" />
	
	<zast stan="B" odj="09:40" zast="58766" asw="320052" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="0" zpoz_odj="0" />
	
	<zast stan="H" prij="09:41" zast="27863" asw="6890008" zpoz_typ_prij="2" zpoz_prij="0" />
</spoj>

</m>
```
- _spoj_ - informace o spoji a vozidlu
	- **ka** - ??? nepoužíváme
	- **kb** - ??? nepoužíváme
	- **den** - datum, kdy spoj vyjel
	- **lin** - označení linky podle CIS
	- **alias** - číslo/označení linky podle CIS
	- **spoj** - označení spoje podle CIS
	- **dopr** - smluvní dopravce podle JŘ
	- **doprSkut** - reálný dopravce vykonávající oběh
	- **kmenl** - kmenová linka, může se lišit od **alias**
	- **t** - typ vozidla, viz [vehicle_types.md](../vehicle_types.md)
	- **tcis** - ??? nepoužíváme
	- **np** - indikátor nízkopodlažnosti
	- **po** - oběhové číslo
	- **vuzevc** -  [Evidenční číslo vozidla](https://cs.wikipedia.org/wiki/Eviden%C4%8Dn%C3%AD_%C4%8D%C3%ADslo_vozidla)
	- **skol** - nejspíš indikátor školního spoje ??? nepoužíváme
	- **posl** - nejspíš indikátor poslední spoje na oběhu ??? nepoužíváme
	- **sled** - indikátor, zda je spoj sledovaný (tracked)
		- 0 - nesledovaný (spoj je před trasou nebo dojel nebo je zrušen)
		- 2 - sledovaný (spoj je na trase nebo v zastávce)
	- **lat** - zeměpisná šířka
	- **lng** - zeměpisná délka
	- **cpoz** - čas odeslání zprávy (nejspíš z vozidla), nesmí být více než 5 minut v budoucnu
	- **azimut** - azimut
	- **rychl** - rychlost vozidla
	- **zast** - aktuální nebo poslední projetá zastávka CIS (miniuzel)
	- **asw** - aktuální nebo poslední projetá zastávka ASW
	- **zpoz_prij** - zpoždění na příjezdu do aktuální nebo poslední projeté zastávky
	- **zpoz_odj** - zpoždění na odjezdu z poslední projeté zastávky. Pokud je vozidlo v zastávce, pak není vyplněno
	- **zrus** - indikátor, zda byl spoj zrušen
	- **zrusod** - příklad 59168/A, nejspíš od které zastávky byl spoj zrušen ???
- _zast_ - informace o projetých i budoucích zastávkách spoje
	- **stan** - stanoviště/nástupiště/kolej podle CIS
	- **odj** - čas odjezdu za zastávky podle JŘ
	- **prij** - čas příjezdu do zastávky podle JŘ
	- **zast** - identifikátor miniuzlu (CIS), kam zastávka patří 
	- **asw** - ASW identifikátor zastávky
	- **zpoz_typ_prij** - typ zpoždění příjezd do zastávky (2 predikce, 3 reálný stav)
	- **zpoz_typ_odj** - typ zpoždění odjezd ze zastávky (2 predikce, 3 reálný stav)
	- **zpoz_prij** - zpoždění příjezd do zastávky
	- **zpoz_odj** - zpoždění příjezd do zastávky

## Přívozy
```xml
<?xml version="1.0" encoding="utf-8"?>

<m disp="http://77.93.194.81:8716/api">

<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">
	<zast stan="K" odj="09:32" zast="58997" asw="1100011" zpoz_typ_odj="2" zpoz_odj="0" />
	
	<zast stan="K" prij="09:34" zast="28003" asw="3370011" zpoz_typ_prij="2" zpoz_prij="0" />
</spoj>

</m>
```

## Vlaky

### Parsování stanoviště (`stan`) u vlaků

Atribut `stan` v elementu `<zast>` u vlaků může obsahovat složený řetězec ve formátu `část1/část2` nebo `část1 část2` (např. `5S/22S`, `-/6`, `2/3`). Jako kanonický kód nástupiště se použije **první platný segment** – první token oddělený lomítkem nebo mezerou, pokud není prázdný nebo `-`.

Příklady výsledků po parsování:

| Vstup (`stan`) | Výsledný `platform_code` |
|---|---|
| `1/3` | `1` |
| `-/BUS` | `BUS` |
| `2/100V` | `2` |
| `5A/- A C` | `5A` |
| `5S/22S` | `5S` |

Parsování provádí `MpvStopParser.parsePlatformCode()`. Výsledný kód je uložen jako `cis_stop_platform_code` v tabulce `vehiclepositions_positions` a na výstupu se pro vlaky preferuje před GTFS `platform_code` (viz `PlatformCodeResolver`).

### Zprávy s informací o nástupišti jako syntetická poloha

Pokud MPVNet zpráva vlaku obsahuje informaci o nástupišti (`$.stan`) pro budoucí zastávku a vlak ještě nemá žádnou aktivní RT polohu, vytvoří se syntetická poloha ve stavu `before_track` na základě dat z této zastávky. Díky tomu lze zobrazit kód nástupiště ještě před fyzickým příjezdem vlaku na stanoviště. Kód nástupiště se parsuje stejným způsobem jako výše (`MpvStopParser.parsePlatformCode()`).

```xml
<?xml version="1.0" encoding="utf-8"?>

<m disp="http://77.93.194.81:8716/api">

<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">
	<zast stan="5S/22S" odj="08:25" zast="5457076" zpoz_typ_odj="3" zpoz_odj="720" />

	<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" />

	<zast stan="-/1" odj="08:34" zast="5457287" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="720" zpoz_odj="780" />

	<zast stan="-/2" odj="08:38" zast="5457156" zpoz_zxtyp_prij="3" zpoz_typ_odj="3" zpoz_prij="660" zpoz_odj="720" />
	
	<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" />

	<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" />
	
	<zast stan="-/1" odj="08:49" zast="5455526" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="780" zpoz_odj="840" />
	
	<zast stan="-/3" odj="08:53" zast="5455536" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="720" zpoz_odj="780" />
	
	<zast stan="-/1" odj="08:57" zast="5455556" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="720" zpoz_odj="780" />
	
	<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" />
	
	<zast stan="-/1" odj="09:05" zast="5458316" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="660" zpoz_odj="660" />
	
	<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" />
	
	<zast stan="-/1" odj="09:16" zast="5455716" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="600" zpoz_odj="660" />
	
	<zast stan="-/1" odj="09:19" zast="5455726" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="600" zpoz_odj="660" />
	
	<zast stan="-/1" odj="09:24" zast="5455746" zpoz_typ_prij="3" zpoz_typ_odj="3" zpoz_prij="600" zpoz_odj="600" />
	
	<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" />
	
	<zast prij="09:35" odj="09:36" zast="5455756" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="720" zpoz_odj="720" />
	
	<zast prij="09:38" odj="09:39" zast="5455776" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="720" zpoz_odj="720" />
	
	<zast prij="09:42" odj="09:43" zast="5455766" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="720" zpoz_odj="720" />
	
	<zast odj="09:46" zast="5455796" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="720" zpoz_odj="720" />
	
	<zast prij="09:49" odj="10:03" zast="5455786" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="720" zpoz_odj="720" />
	
	<zast prij="10:06" odj="10:07" zast="5455806" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="720" zpoz_odj="720" />
	
	<zast prij="10:11" odj="10:12" zast="5455816" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="720" zpoz_odj="720" />
	
	<zast prij="10:14" odj="10:15" zast="5455096" zpoz_typ_prij="2" zpoz_typ_odj="2" zpoz_prij="720" zpoz_odj="720" />
	
	<zast prij="10:19" zast="5455046" zpoz_typ_prij="2" zpoz_prij="300" />
</spoj>

</m>
```
