← 가이드 목록·GPX & 데이터읽기 7·

GPX 파일 구조 해부 — trkpt, ele, time이 의미하는 것

GPX 파일 내부의 trkseg·trkpt·ele·time·extensions 태그를 실제 XML 예시와 함께 해부하고, 러닝 분석 도구가 각 필드로 무엇을 계산하는지 설명합니다.

GPX(GPS eXchange Format)는 1980년대 GPS 초기부터 쓰여 온 XML 기반 경로 포맷입니다. 러닝 워치·앱 대부분이 이 형식을 지원하는데, 정작 파일 내용을 열어본 적 있는 러너는 드뭅니다. 구조를 한 번만 이해해두면 "왜 이 앱에서는 고도가 이상하지?", "페이스 차트가 왜 끊기지?" 같은 의문이 단번에 풀립니다.

뼈대: gpx → trk → trkseg → trkpt

GPX의 루트는 <gpx>이고, 그 아래에 하나 이상의 <trk>(트랙)이 있습니다. 트랙은 다시 여러 <trkseg>(세그먼트)로 나뉘고, 각 세그먼트 안에 일정 간격(보통 1~2초)마다 기록되는 <trkpt>(트랙 포인트)가 나열됩니다. 트랙 포인트 한 개가 특정 순간의 위치·고도·시간을 담은 "한 점"입니다.

  • <gpx>: 파일 루트. 생성한 앱 이름(creator 속성)이 여기 붙습니다.
  • <trk>: 한 번의 운동 단위. 보통 러닝 하나당 trk 하나.
  • <trkseg>: 신호가 끊긴 구간 앞뒤로 세그먼트가 쪼개질 수 있습니다. 워치가 일시정지됐거나 GPS를 잃으면 새 세그먼트가 시작됩니다.
  • <trkpt lat="…" lon="…">: 실제 기록 단위. 위도·경도는 속성으로, 고도·시간은 자식 태그로 들어갑니다.

트랙 포인트 하나 뜯어보기

실제 파일에서 하나의 <trkpt>는 대개 다음과 같은 모습입니다. 이해를 돕기 위해 단순화한 예시입니다.

  • lat/lon: WGS84 기준 위도·경도. 소수점 6자리 이상 정밀도면 1m 오차 이내입니다.
  • ele: 고도(미터). 워치·폰의 기압 센서 또는 GPS 기반. 기압 센서 쪽이 훨씬 안정적입니다.
  • time: UTC 시각(ISO 8601). 도구는 현지 타임존으로 변환해 표시합니다.
  • extensions: GPX 표준 외 필드(심박수·케이던스·파워 등). 앱마다 네임스페이스가 다릅니다.

도구는 이 필드로 무엇을 계산할까

분석 도구가 하는 일은 결국 "연속된 trkpt 두 개 사이의 값을 누적"하는 것입니다. 두 점 사이 경도·위도 차이로 거리를 구하고, 두 time 차이로 시간을 구하면 그 구간의 평균 페이스가 나옵니다. 도구마다 결과가 약간씩 다른 이유는 이 "두 점 사이"를 어떻게 보정하느냐가 다르기 때문입니다.

  • 거리: 구면 거리 공식(Haversine)으로 계산하는 게 표준. 짧은 간격에서는 평면 근사로도 오차가 작습니다.
  • 페이스: 거리/시간 역수. 노이즈가 심하면 3~5점 이동평균으로 스무딩하는 경우가 많습니다.
  • 고도 상승: 모든 상승분의 합. 센서 흔들림을 걸러내기 위해 보통 1~3m 미만의 미세 변화는 버립니다.
  • 구간 분할: 누적 거리 1km 경계를 통과할 때마다 스플릿을 끊습니다. 러닝 도구의 "페이스 차트 x축"이 바로 이 분할 기준입니다.

자주 만나는 이상 케이스

RunRunMan이 GPX를 읽는 방식

RunRunMan은 브라우저 안에서 GPX XML을 파싱해 trkpt 배열로 바꾸고, Haversine으로 누적 거리를 계산한 뒤 1km 단위 스플릿을 차트로 렌더링합니다. 데이터는 서버로 전송되지 않으며, 세그먼트가 여러 개여도 자동으로 시간 순서대로 이어붙입니다.

함께 읽으면 좋은 글

  • 「러닝 GPS 정확도가 떨어지는 이유와 해결책」
  • 「Apple Watch에서 GPX 파일 추출하는 모든 방법」
  • 「러닝 페이스란? 분/킬로 vs 킬로/시 변환 완전 정리」

실제 GPX로 바로 분석해 보기

위 가이드와 관련된 패턴을 내 러닝 기록에서 찾아보세요. GPX 업로드 1번이면 바로 경로·페이스·구간 분석을 확인할 수 있습니다.

RunRunMan 분석기 열기