Watch at Ease세상을 읽고, 일상의 답을 찾다.

기술 · 실용 가이드

GPX 경로를 트랙으로 바꾼 뒤 점 이름과 시간도 남았을까

거리가 0이 아니라는 사실만으로는 부족합니다. gpxpy 1.6.2 실험에서 점 필드와 겹치는 경로를 따로 확인했습니다.

원본 일러스트: 네 가지 GPX 시험 컨테이너와 2차원 총길이. 혼합 예제의 경로는 의도적으로 겹칩니다.
원본 일러스트: 네 가지 GPX 시험 컨테이너와 2차원 총길이. 혼합 예제의 경로는 의도적으로 겹칩니다. Watch at Ease

경로가 들어 있는 파일에서 gpxpy가 거리 0을 반환하면 먼저 파일 구조를 확인하세요. 트랙으로 변환하면 거리를 얻으면서 다른 정보가 달라질 수 있습니다. 원본을 보관하고 성공 메시지 대신 저장 후 다시 연 내용을 기준으로 판단해야 합니다.

Python 3.12.14와 공개된 gpxpy 1.6.2로 직접 만든 GPX 1.1 파일 네 종류를 시험했습니다. 웨이포인트만 있는 파일, 경로만 있는 파일, 트랙만 있는 파일, 경로와 트랙에 의도적으로 같은 좌표를 넣은 혼합 파일입니다. 실제 이동 기록이나 내비게이션 기기 시험은 아닙니다.

1. 처리 방법을 고르기 전에 컨테이너부터 세기

신뢰할 수 있는 로컬 사본을 파싱한 뒤 len(gpx.waypoints), len(gpx.routes), len(gpx.tracks)와 각 트랙의 세그먼트를 확인하세요. GPX 1.1은 독립 웨이포인트, 순서가 있는 경로 점, 트랙 세그먼트를 구분합니다. 파일 어딘가에 점 세 개가 있다고 해서 기록된 트랙이나 독립 점의 의도된 연결 순서가 있다는 뜻은 아닙니다.

설치한 패키지의 전역 길이 메서드는 트랙을 순회합니다. 기존 경로의 2차원 길이만 필요하다면 선택한 각 경로의 route.length()를 먼저 살펴보세요. 단위는 미터이며 파일 변환이 필요하지 않습니다. 경로의 상승 고도나 3차원 거리를 구하는 해결책은 아닙니다.

2. 유용한 도우미도 보존 범위는 좁을 수 있다

gpxpy issue 290의 실제 질문은 경로 전용 파일에서 0이 나오는 이유를 이미 설명하고 변환 도우미도 제공합니다. 위도·경도·고도로 트랙 점을 만들고, 경로 전체 이름을 트랙 이름으로 쓰며, 원래 경로를 제거합니다. 모든 점 필드를 복사하지는 않습니다. 기본 문제에는 이미 답이 있습니다.

시험 경로는 위도 0, 경도 0·0.01·0.02, 고도 10·20·30미터이며 각 점에 시간, 이름, 설명, 사용자 확장 요소를 하나씩 넣었습니다. 도우미의 의미를 재구현한 결과 거리는 0이 아니었지만 저장 후 다시 열자 네 필드 종류의 개수가 각각 3에서 0으로 줄었습니다. 경로 전체 이름은 남았지만 점 이름은 사라졌습니다.

3. 일반 저장 대조군으로 변환 손실을 구분하기

경로를 변환하지 않고 저장한 뒤 다시 여는 대조 실험도 했습니다. GPX 1.1 대조군에서는 시간, 점 이름, 설명, 확장 요소 세 개씩이 모두 남았습니다. 이는 이 예제에서 제한된 도우미의 영향을 구분하는 비교이지, 모든 내보내기나 라이브러리 전체를 탓할 근거가 아닙니다.

변환 전에 보존할 점의 좌표, 고도, 시간, 점 이름, 설명, 필요한 확장 요소 목록을 작성하세요. 새 파일을 다시 열어 값, 개수, 의도한 순서를 비교해야 합니다. 어떤 이름이나 시간이 하나라도 존재하는지만 확인해서는 부족합니다. 트랙 이름과 점 이름은 별도로 검사하세요.

4. 어떤 경로를 한 번만 합산할지 결정하기

혼합 예제는 경로 하나와 트랙 하나에 같은 좌표를 의도적으로 넣었습니다. 처음 전역 메서드는 기존 트랙만 계산했습니다. 경로를 변환해 추가하자 트랙 두 개가 되어 2차원 총길이가 2,226.39에서 4,452.78미터로 두 배가 됐습니다. 인위적으로 만든 중복 사례이며 모든 혼합 파일이 거리를 중복 계산한다는 주장은 아닙니다.

측정 트랙에 점을 추가하기 전에 경로가 계획인지, 대안인지, 같은 이동 경로의 다른 표현인지 판단하세요. 필요한 세그먼트 경계를 보존하고 무관한 구간 사이에 가상의 연결 구간을 만들지 마세요. 미리보기로 경로를 살펴보고 어떤 형상을 합산하는지 기록해야 합니다. 그럴듯한 총거리만으로 그 선택이 맞다고 입증할 수는 없습니다.

5. 다시 연 파일을 명확한 목록으로 검수하기

기존 도구도 변환의 절충점을 공개합니다. GPSBabel 1.10.0 문서는 중복을 피하기 위한 원본 데이터 삭제와 시간 복사에 영향을 주는 timeless 옵션을 설명합니다. GPXAnalyzer의 별도 웨이포인트 도구는 정렬과 선택적 점 이름을 설명하며 설명문·기호를 생략하고 경로 전용 파일을 변환하지 않습니다. 이는 읽은 문서의 범위이며 도구를 실행한 결과는 아닙니다.

새 이름으로 저장하고 원본 해시와 수정하지 않은 사본을 남기세요. 컨테이너·세그먼트 수, 선택한 형상, 필요한 점 필드 값과 이름, 단위, 연결 순서가 목표에 맞을 때만 결과를 받아들이세요. 예상하지 못한 변화가 있으면 멈추고 두 파일을 보관합니다. 원본 바이트는 그대로였지만 실제 주행 거리, 엄격한 스키마 적합성, Garmin·BMW·Strava·GPSBabel 동작은 검증하지 않았습니다.

원본 일러스트: 제한된 경로 변환은 네 종류의 점 필드를 잃었고 일반 GPX 1.1 저장 대조군은 이를 보존했습니다.
원본 일러스트: 제한된 경로 변환은 네 종류의 점 필드를 잃었고 일반 GPX 1.1 저장 대조군은 이를 보존했습니다. Watch at Ease