# README #
GPX to TCX file converter
GPX 파일을 TCX 파일로 변환하는 프로그램
라이센스는 GPLv2 입니다.
직접 소스를 수정해서 gpx 파일 경로명을 지정하시고 실행하시면 됩니다.
버추얼 파트너의 속도 지정이 가능합니다.
do_job() 함수의 두 번째 인자로 속도를 지정하시면 됩니다.
기본 값은 20(km/hr)입니다.
waypoint에 아이콘을 지정할 수 있습니다.
waypoint의 위치는 반드시 코스포인트(코스를 구성하는 점) 위에 있어야 합니다.
코스포인트와 코스포인트를 잇는 직선상에 위치한 waypoint는 tcx 변환시 무시됩니다.
아래의 GpsRouteEditor 샘플 이미지를 참조하세요.
아이콘은 다음 16가지 입니다.
["Generic", "Summit", "Valley", "Water", "Food", "Danger", "Left", "Right", "Straight", "First Aid", "4th Category", "3rd Category", "2nd Category", "1st Category", "Hors Category", "Sprint" ]
지정 방법은 다음과 같습니다.
1. 2. 3. ... Generic
s벗고개, s선어치, s정령치... Summit
c1, c2, c3, c4, ch, cs : category 1, 2, 3, 4, hors, sprint
mG, mS, mV, mW, mF, mD : Generic, Summit, Valley, Water, Food, Danger
mL, mR, mC, mA : Left, Right, Straight, First Aid
앞에 위에 해당하는 첨자가 없음 : Generic
tcx 파일로 변환시 앞첨자는 모두 삭제후 해당 아이콘으로 대치됩니다.
또한 waypoint 명칭 뒤쪽에 _, _x, _xy 등의 첨자가 붙음 경우 역시 삭제후 표기됩니다.
(고도표 프로그램과의 호환을 위해서)
삭제된 후에 저장되는 명칭의 최대 길이는 10글자까지입니다.
10글자를 넘으면 자동으로 10글자에서 자릅니다(길면 가민에서 인식 불가)
파일명은 해당사항이 없기는 하지만 혹시 모르니 가급적 짧은 파일명을 사용하시기 바랍니다.
저장되는 파일명은 인자로 지정한 파일명에서 확장자만 .tcx로 바뀌어서 python이 실행되는 폴더로 저장됩니다.
ex) do_job('D:/SRC/python/GPX2TCX/sample.gpx', 25)
일 경우
sample.tcx
로 저장됨
역시, 프로그램과 관련하여 궁금한 점이 있으시면 구글링을...
란도너스에 관련한 궁금증은
http://www.korearandonneurs.kr/
http://www.audax-club-parisien.com/EN/index.php
https://rusa.org/
https://www.audax-japan.org/en/audax-japan/
http://app.audaxthailand.com/home
즐거운 라이딩 되세요 !!!
ㅋㅋㅋㅋㅋ
제가 이럴 줄 알았습니다.
https://www.clien.net/service/board/cm_bike/11979706CLIEN
아마도 서버 동시접속 문제인지 싶은데 여러번 해보시고 안되면 샘플 파일을 보내주시면 검토해 드리겠습니다.
1. 코스 포인트가 동일한 곳에 겹쳐저 찍힌 곳이 있습니다. 따라서 거리가 0이 되어 속도/경사도 계산시 죽습니다.
2. 웨이포인트(CP)가 코스 포인트 위에 찍혀야 합니다. 코스포인트-코스포인트 를 잇는 선 위이 찍히면 인식하지 않습니다.
3. 모든 명칭(CP명, 파일명 포함)은 10글자 이내이어야 합니다.
1번은 수정
2번은 해당 웨이포인트(CP)만 tcx에서 삭제됨
3번은 가민에서 코스파일로 인식하지 못함
이렇게 처리되었습니다.
3번 사항은 추후 10글자까지만 tcx 파일로 변환되도록 수정할 예정입니다(수정함)
위 사항을 고려하셔서 다시 시도해 보세요.
참고로, 주신 파일에서 cp2, end 말고는 모두 누락됩니다.
^^bb
제가 잘 못 이해하고 있을 수도 있지만,
제가 고민한 내용을 한번 적어봅니다.
1) cp가 코스 포인트 위에 찍혀야 한다는 점은 그렇게 만드신 이유가 있으시겠지만,제가 활용하기에는 상당한 제약이 있습니다.저는 tcx파일에 좌회전, 우회전, summit, cp, 거리(10km, 20km 등등)을 아주 많이 집어넣어서라이딩(특히 랜도너)할때 거의 휴대폰 화면을 보지 않고 소리만 듣고 라이딩을 합니다.안전의 이유도 있고, 배터리도 아주 많이 아낄 수 있어서 이렇게 하고 있는데,경로상 임의의 지점에 gpx의 CP를 찍을 수 없다는 점이 좀 아쉽네요.2) 제가 개선을 해 보려고, 나름 python 공부도 하고 노력을 해 보았으나, 제 깜냥으로는 어렵네요.def do_job(f_name, speed=20): 에서pos = w.get_nearest( gpx.tracks[0].segments[0].points, waypoint) # throw if wp is not matched if pos == -1: continue이 부분을 고치면 뭔가 될것도 같은데,쉽지가 않네요.3) 공부를 해 보니 tcx 파일을 만들때gpx의 <trkpt>는 tcx의 <Trackpoint>로 단순히 변환되는데,gpx의 <wpt>는 tcx의 <CoursePoint>로 단순 변환되는 것이 아니라,계산을 해서 변환하도록 되어 있는 것 같습니다.4) 알아서 google하라고 하셨지만,혹~~시 가능하시면1] 코스 포인트 위에 찍히지 않더라도 가능하게 해 주시거나2] gpx의 <wpt>가 tcx의 <CoursePoint>로 단순 변환되도록 해 주시면 감사하겠습니다.어쩌면 1] 이나 2]나 같은 이야기가 될 수 도 있겠네요.초면에 뜬금없이 미안합니다.
감사합니다.
웨이포인트가 코스포인트에만 찍히도록 한 이유는
get_nearest() 처리를 할 때 코스포인트가 아니라면 두 코스포인트 사이의 최단거리를 구해야 하는데
이것이
1. 코스포인트-웨이포인트 거리 구하기보다 처리 시간이 많이 소요되고
2. 그러하더라도 이상한 곳에 찍힌 포인트들은 어떤 코스 위치에 매칭을 해야 할 지 애매한 경우가 발생합니다
(이를테면, 휘어진 코스에서 원호의 안쪽에 찍힌 웨이포인트)
따라서 이러한 처리를 간편하게 하기 위해서 단순히 코스포인트 위의 웨이포인트만 처리하도록 한 것입니다.
불편하시더라도 GpsRouteEditor 같은 프로그램을 활용하시어 원하시는 웨이포인트의 위치로 코스를 약간만
조정하시면 충분히 사용 가능하니 가급적이면 이렇게 이용을 권합니다.
(저도 브레베 코스 작업시 항상 편집기로 먼저 웨이포인트를 확인후 조정하고 있습니다)
말씀하신 내용을 들어보니 공감이 갑니다.
저도 코스 작업할때 말씀하신 내용대로
웨이포인트를 확인후 조정하여 사용하겠습니다.