GPX a KML: GPS trasy a mapy v XML

GPX přenáší GPS body, trasy a stopy; KML popisuje geografické prvky a jejich zobrazení. Oba formáty používají XML, ale mají jiné datové modely a pořadí souřadnic.

Autor: Aktualizováno

Bod v GPX 1.1

Kořen má povinné version a creator. Zeměpisná šířka je atribut lat, délka lon. Waypoint je wpt; stopa se skládá z trk, trkseg a trkpt. Časové údaje a pořadí bodů mají význam.

Bod v GPX 1.1
<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="XML.cz">
 <wpt lat="50.0880" lon="14.4208"><name>Praha</name></wpt>
</gpx>

Stejný bod v KML

KML používá v coordinates pořadí délka, šířka, případně výška, oddělené čárkami. KML 2.3 zachovává namespace s 2.2 v URI. KMZ je ZIP balíček s KML a dalšími soubory, nikoli prostý XML text.

Stejný bod v KML
<kml xmlns="http://www.opengis.net/kml/2.2">
 <Placemark><name>Praha</name><Point><coordinates>14.4208,50.0880</coordinates></Point></Placemark>
</kml>

Validace a XPath

Ověř správný namespace a verzi schématu, rozsah souřadnic a strukturu zvoleného typu. XPath 1.0 musí mít prefix navázaný na URI GPX/KML. Syntakticky platné XML ještě nezaručuje smysluplnou trasu.

Převody a soukromí

Při převodu do GeoJSON dohodni zachování časů, výšek a stylů; ty nejsou ve všech formátech rovnocenné. Stopy mohou odhalit bydliště nebo pohyb osob. Pro KMZ omez počet položek a rozbalenou velikost archivu.

Dva body trasy v GPX

trasa.gpx — track má segment a seřazené body
<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="XML.cz">
  <trk><name>Krátká ukázka</name><trkseg>
    <trkpt lat="50.08" lon="14.42"><ele>200</ele><time>2026-10-01T10:00:00Z</time></trkpt>
    <trkpt lat="50.09" lon="14.43"><ele>205</ele><time>2026-10-01T10:01:00Z</time></trkpt>
  </trkseg></trk>
</gpx>
Čtení známého důvěryhodného vzorku v Pythonu
import xml.etree.ElementTree as ET
ns = {"g": "http://www.topografix.com/GPX/1/1"}
root = ET.parse("trasa.gpx").getroot()
for point in root.findall("g:trk/g:trkseg/g:trkpt", ns):
    print(point.attrib["lon"], point.attrib["lat"], point.findtext("g:time", namespaces=ns))

Výstup jsou souřadnice 14.42 50.08 a 14.43 50.09 s časy. V GPX jsou souřadnice atributy lat/lon, v GeoJSON se pořadí zapisuje jako lon,lat. Dva trkseg mohou znamenat přerušení záznamu; nespoj je automaticky souvislou čarou. Route rte a waypoint wpt mají jinou funkci než track.

Ulož oficiální GPX 1.1 XSD a validuj příkazem xmllint --noout --schema gpx.xsd trasa.gpx. Změna lat na 100 poruší rozsah. Chybějící namespace způsobí jiný typ chyby než špatná souřadnice.

Odpovídající linie v KML

trasa.kml — základní geometrie bez časů
<kml xmlns="http://www.opengis.net/kml/2.2">
 <Document><Placemark><name>Krátká ukázka</name><LineString>
   <coordinates>14.42,50.08,200 14.43,50.09,205</coordinates>
 </LineString></Placemark></Document>
</kml>

Mezery oddělují pozice, čárky hodnoty pozice. Základní LineString neobsahuje časy GPX: uvedený převod už tuto informaci ztratil. Při práci s výškou stanov altitudeMode, protože číslo samo neurčuje vztah k terénu. Pro věrný návrat musíš zachovat chybějící metadata jinou dohodnutou konstrukcí nebo původním souborem. Standard a namespace musí odpovídat cílovému GIS.