본문 바로가기

GPS20

c# 자전거 라이딩 거리 계산 관련 Utils 1. 거리 계산 (GPS 좌표 변환 공식 / 지구의 곡률 적용) /// /// 거리 계산 /// /// /// /// /// /// public double Distance(double lat1, double lng1, double lat2, double lng2) { double theta = 0.0d; double dist = 0.0d; theta = lng1 - lng2; dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta)); dist = Math.Acos(dist); dist = rad2deg(dist); di.. 2023. 1. 13.
C# GPX(GPS Exchange Format) Paser https://www.strava.com/ Strava | 달리기, 사이클링, 하이킹 앱 - 트레이닝, 추적, 공유 www.strava.com gpx 파일을 다운로드 받을 수 있다. 2013-07-19T11:55:35Z 오전 라이딩 1 182.2 2013-07-19T11:55:35Z 183.2 2013-07-19T14:42:01Z 183.2 2013-07-19T14:42:19Z 183.2 2013-07-19T14:42:45Z 183.2 2013-07-19T14:43:08Z 181.9 2013-07-19T14:43:30Z 182.3 2013-07-19T14:44:22Z .... *.gpx 파일을 열어보면 xml 스키 안에 특정 시간 간격으로 (예:1초) 기본적으로 기록되는 시각, 경도와 위도 그리고 주변기.. 2023. 1. 13.
코드 블럭 테스트 (c# DB Helper) 쿼리에 들어가는 파라미터 변수와 값을 매핑하는 메소드 DAC에서 DB Helper쪽으로 Insert Qeury를 자동 생성 하는 메소드 호출 7년 전 자전거 GPS Logger Viewer 만들면서 짰던 DB Helper 코드 다양한 관계형(RDMS)에 DB에 대응할 수 있으며 개인 용도로 사용했던 db는 Sqlite다. 포터블 DB이며 가볍고 장점이 많다. 모델 속성(Field)을 테이블 컬럼명과 동일하게 만들면 자동으로 Insert 쿼리를 생성 해준다. 객체의 속을 들여다 볼 수 있는 Refelection을 사용하여 속도가 느린 단점이 있어 대용량 데이터를 처리하기에는 성능이 저하될 수 있다. (트랜잭션 코드 추가) using System; using System.Data; using System.C.. 2023. 1. 12.
GpsLog Manager - 지도에 루트 출력 속도 개선 테스트 표본은 2013년 미국 자전거 여행 7월 GPX 데이터 한달치 기준 개선 전 : 약 34~5초 https://www.youtube.com/watch?v=pdsoDFJFMNs&feature=youtu.be 개선 후 : 약 5~7초 https://www.youtube.com/watch?v=PHcatfuiqFM&feature=youtu.be ※ 검색 속도는 선택한 라이딩 정보 건수에 따라 다를 수 있고 1건 같은 경우는 이전보다 약간 빠르거나 같을 수 있다. GPX파일을 파싱후 화면에 출력할 때는 속도가 빠르지만 DB에 등록후 불러올 경우에는 내부적으로 1~2단계의 프로세스를 더 거쳐야 했기 때문에 느려질 수 밖에 없었다. 이유는 조회하고 그 결과안에서 위경도 정보만 다시 뽑아내야 하는 파싱 작업 때문.. 2016. 5. 26.
GpsLog Manager - 라이딩 상세정보 출력 및 기타 업데이트 - 라이딩 상세정보 (기본) - 라이딩 상세정보 (전체) 다중 루트 출력시 특정 루트 선택 가능하며 그 루트의 마커를 클릭하면 라이딩 정보도 오른쪽 상단에 표시된다. 잘 사용하지 않는 지도 목록을 삭제 하고 많이 사용하는 지도목록을 한글화 했다. 일반적인 라이딩 정보 출력할 때는 거리 계산의 오차를 줄이기 위해 시속 7km 이상만 사용하지만 오르막에서는 라이딩 속도가 줄기 때문에 시속 3km 까지 완화 하여 구간 정보를 출력시 경사도의 정밀도를 보정하였다. 즉 7km 이상만 계산할 때는 그 이하 데이터가 빠지기 때문에 경사도를 계산할 때 오차가 많이 발생한다. 이를 보완하는 차원에서 시속 3~6.9km까지의 데이터까지 사용하기 때문에 경사도의 오차를 줄일 수 있다. 실제 라이딩 시간이 1시간씩 더해진 경.. 2016. 5. 2.
GpsLog Manager - 경로 따라가기 자전거 라이딩한 GPS 로그의 위경도를 따라기는 기능인데 구글어스처럼 다양한 기능은 못한다. 라이딩 정보를 한건을 선택후 오른쪽 아래 [재생] 버튼을 클릭한다. 경로 따라기기 중에는 [재생] 버튼은 비활성화가 되며 지도에 현재 위치의 실시간 라이딩 정보(고도, 거리, 시간, 속도)를 보여준다. 라이딩 정보는 시작지점에서 현재위치까지의 거리의 합계를 계산하여 표시한다. ※ 경로 따라기기 중 조회 버튼을 누르면 역시 재생중지와 함께 초기화 된다. https://www.youtube.com/watch?v=Peef-eMj-68&feature=youtu.be 경로 따라기기 중에 다른 라이딩 정보 한건을 선택하면 재생이 중지되지만 여러건일 경우에는 따라기기를 계속 진행한다. 반대로 라이딩 정보 여러건을 선택후 경로.. 2016. 4. 7.
GpsLog Manager - 지도 전체화면 지도에서 루트와 그래프만 확인하고자 할 때 쓰면 괜찮은 기능이다. 프로그램의 첫 화면에서 [지도열기]를 클릭한다. 이 때 [전체화면] 버튼은 활성화되지 않는다. 데이터 전용 모드?화면과 지도를 열었을 때는 조회조건 중 기본 검색조건은 [월별]이다. 지도를 열면 [전체화면] 버튼이 활성화 된다. [전체화면]으로 변경되면 [검색조건]은 일별로 변경된다. 이 때 [검색] 버튼은 비활성화 된다. [전체화면] 모드에서 데이터 검색은 일별 콤보박스에서 날짜를 선택하면 된다. [전체화면] 일 때는 관리관련 버튼(입력, 등록, 삭제, 수정, 지우기)은 사용할 수 없다. [검색조건]에서 [일별]검색은 지도가 전체화면일 때만 사용 가능하다. 데이터 화면이 열려 있을 때는 기존대로 [조회]버튼을 이용하여 되고 [지도]관련 .. 2016. 4. 2.
GpsLog Manager - 라이딩 정보 그래프 구간 정보 확인 라이딩 정보를 분석할 때 필요한 기능일 것 같아서 구현하였다. 그래프의 특정 구간을 블럭을 지정하면 구간거리와 고도정보를 볼 수 있다. 지도상의 구간지정은 기존 루트에 색을 입혀서 표현하는 방식이다. 고도는 구글에서 받아오는 것과 가민엣지가 측정한 데이터가 다를 수 있다. 지도 왼쪽위에 고도 정보는 마우스로 클릭하면 출력되고 툴팁에 표시되는 정보는 가민엣지에서 생성된 데이터이다. 보통 30~50km 정도를 라이딩 하면 GPX 파일안에 로그가 2,500 ~ 5,000건 정도가 쌓이는데 라이딩 속도와 거리에 따라 로그 건수는 달라진다. 또 그 이상도 쌓일 수 있다. 지도상에 루트를 그릴 때는 로그의 모든 데이터를 이용하지만 그래프를 그릴 때는 절반 정도를 이용하는데 이유는 그래프를 그릴 때 부하(프로그램 성.. 2016. 4. 1.
GpsLog Manager - 라이딩 정보 그래프 오버레이(중첩) GpsLog Manager - 라이딩 정보 시각화(그래프) : http://www.taedi.kr/814 이전에 라이딩 정보 그래프에 관한 글을 올린 후 화면 다지인 변경 및 오버레이(중첩 그래프) 기능을 추가하였다. 잦은 디자인 변경이 사용자 측면에서 불편함이 있겠으나 향후 프로그램의 확장 및 편의성을 위해 변경을 했고 앞으로 추가적인 컨트롤 배치 변경은 가급적 하지 않으려고 한다. 화면 배치 변경전 위 그림과 아래 그림을 비교하면 어떤게 변경됐는지 한 눈에 알 수 있다. 그래프 열기/닫기 체크박스 => 버튼항목 선택 콤보박스 => 체크 박스 (고도/속도/케이던스/온도/심박수) 우선 하나의 항목만 선택할 경우 그래프 색은 이전과 똑같다. 두개 이상 선택할 경우 각 항목의 지정색으로 그래프 선을 표시한다.. 2016. 3. 30.
GpsLog Manager - 지도에 위경도, 고도, 줌레별 표시, 기타 지도에 위경도, 고도, 지도의 줌레벨을 표시하였다. 지도의 모든 기능들은 온라인이 연결되야 지도와 관련 정보를 가져올 수 있다. 위경도는 마우스를 이동할 때 실시간으로 표시되고 고도는 마우스 클릭 했을 때 현재 위경도 정보를 구글 웹서비스에 보내면 현재의 고도정보를 반환해준다. 줌레벨은 [지도열기] 버튼 옆에 텍스트 박스에 표시 되었으나 지도 안쪽으로 옮겼다. [그래프] 버튼은 체크박스(CheckBox)로 대체 하였다. 프로그램의 화면 크기와 향후 추가될 기능 버튼의 자리를 확보하기 위해 변경했다. 심박/온도 체크박스의 체크 설정 정보를 xml 파일에 저장 했다가 다시 열었을 때 이전에 설정한 정보에 따라 체크여부를 표시 하였으나 설정정보가 많지 않고 몇가지 버그 때문에 제외했다. 변경 후 기본 설정은 .. 2016. 3. 25.
GpsLog Manager - 라이딩 기록 통계 그래프 라이딩 기록 통계 : http://taedi.kr/816 기존에 통계 데이터만 볼 수 있었는데 이번에 그래프를 추가하였다. 전체(전체 연도별) / 연도별(1~12월) / 월별(주단위) / 일별(월 ~ 일) 4가지 기능으로 구성 전체 연도별 전체 연도별 통계는 기존에 전체 통계가 없었지만 이번에 볼 수 있게 추가하였다. 라이딩 정보 그래프는 지도 때문에 크기를 작게 했으나 통계 그래프는 GPS 로그 데이터 그리드 뷰(아래)를 뒤로 숨기고 그래프를 크게 확장해서 가독성을 높였다. 연도별(1~12월) 통계 연도별 통계 보기는 전체 보기와 동일하다 연도-월 방식으로 표시하면 텍스트가 길어져 X측 글자가 2줄로 만들어 질 경우가 있기 때문에 짧게 월만 표시했다. 해당 연도는 조회 조건과 그래프 오른쪽 상단에 현재.. 2016. 3. 23.
GpsLog Manager - 라이딩 기록 통계 월별 합계 연도별 통계 - 월별 합계를 기준으로 연 합계 출력 전체 통계 - 연도별 합계 출력 전체 통계 - 모든 연도의 라이딩 기록 합계 누적 오르막 : 두 위경도 좌표간 해발 고도 높이 계산(A - B)누적 내리막 : 두 위경도 좌표간 해발 고도 낮이 계산(B - A)칼로리(kcal)은 자전거 탈 때 소모되는 칼로리 공식으로 계산 (출처:구글) 계산공식 kcal = 몸무계(Weight) X 평균속도별 칼로리소모량 X 운동시간(분:Minute) 고도에 따라 칼로리 소모량이 달라지지만 여기서는 평지를 기준으로 계산한다. 덧) 안드로이드에서 생성된 *.gpx 파일 파싱에러 수정 2016-03-14 업데이트 : http://taedi.kr/809 2016. 3. 14.