개발 일지 / RideMeter-Simple GPS Computer
RideMeter 개발 일지: 간단한 GPS 사이클링 컴퓨터
접이식 자전거를 이용한 외출부터 전화 기반 사이클링 컴퓨터까지: RideMeter의 자동 일시 정지, 라이딩 기록, MapKit 내비게이션 및 좌표 변환 과제.
바이브 코딩을 발견한 후 처음으로 iOS 앱을 사용해 보았습니다. 나의 이전 프로그래밍 작업은 중국을 여행하기 전인 1년여 전이었습니다. 그 당시에는 주로 업무에 필요한 것들을 작성했는데, 주로 사용자 스크립트와 Chrome 확장 프로그램이었습니다.
사용자 스크립트란 무엇입니까?
사용자 스크립트는 기존 웹 페이지를 수정하거나 향상하기 위해 브라우저에서 실행되는 작은 프로그램입니다. 이는 브라우저 확장과 유사하지만 일반적으로 더 가벼우며 각 스크립트는 하나의 특정 문제를 해결합니다. 사용자 스크립트는 광고를 제거하고, 페이지 레이아웃을 조정하고, 다운로드 버튼을 추가하고, 양식을 채우거나, 심지어 웹사이트에 원래 없었던 기능을 제공할 수도 있습니다. 중국 별명 "Youhou"는 일반적으로 Tampermonkey 브라우저 확장을 나타냅니다. Tampermonkey를 설치한 후 스크립트를 설치하면, 해당 웹사이트 방문 시 스크립트가 자동으로 실행됩니다. 즉, 웹사이트는 원본 페이지를 제공하고 사용자 스크립트는 이를 브라우저 내에서 조정합니다.
아이디어는 어디서 나왔는지
내 첫 번째 iOS 앱으로 돌아가서:
중국 여행을 마치고 항저우로 돌아온 후 양과 저는 가끔 자전거를 타러 갔습니다. 나는 내가 만든 로드바이크를 15,000위안에 팔고 양에게 중국산 브롬톤 스타일의 접이식 자전거를 샀습니다. 내 Dahon 접이식 자전거와 함께 두 자전거 모두 자동차 트렁크에 쉽게 들어가므로 어디든 부드럽게 탈 수 있습니다. 그 전에는 출퇴근길에도 시속 30km를 유지하고 싶었고, 사이클링 컴퓨터가 없으면 길을 잃은 듯한 사이클리스트였습니다. 심지어 엄청나게 비싼 Strava 비용도 지불했습니다.
저와 같은 라이더는 일반적으로 자전거에 사이클링 컴퓨터를 가지고 있으며 때로는 자전거마다 별도의 컴퓨터를 가지고 있습니다. 하지만 항상 그런 것은 아닙니다. 공유 자전거를 타고 있거나 컴퓨터를 집에 두고 왔을 수도 있습니다. 저는 집에 가져가서 충전하고, 주차할 때 도난당하지 않도록 보통 분리합니다. 그 순간에는 휴대폰이 그 자리를 대신할 수 있습니다.

사이클링 컴퓨터는 몇 가지 중요한 측면에서 일반 내비게이션 앱과 다릅니다.
내비게이션은 자전거 경로를 사용해야 합니다. Amap도 그렇게 할 수 있습니다.
멈추면 타이머가 일시 중지되어야 합니다. 대부분의 내비게이션 앱은 이를 수행하지 않으며 일반 라이더에게는 필요하지 않을 수도 있지만 훈련 및 경쟁 라이딩에는 중요합니다. 정지 시간이 중요해지면 평균 속도가 낮아지고 해당 구간을 어떻게 주행했는지 평가하기가 더 어려워집니다.
기록 속도 임계값은 예를 들어 5km/h 또는 10km/h 이상에서 계산을 시작하도록 조정 가능해야 합니다. 인상적인 Strava 통계를 추구하는 일부 사람들은 그 임계값을 15km/h, 심지어 20km/h로 훨씬 더 높게 설정했습니다. 15km/h 임계값을 사용하면 느린 구간과 신호등에서의 시간이 기록된 성능을 저하시키지 않습니다.
RideMeter 소개

따라서 내 연습 프로젝트는 매우 간단한 사이클링 컴퓨터입니다. 어두운 인터페이스는 OLED 화면에서 가능한 한 적은 전력을 사용하는 것을 목표로 하고 있으며 검정색과 노란색은 속도와 움직임을 암시합니다.
기능 목록은 짧습니다. 탐색; 실시간 속도, 평균 속도, 거리 및 주행 시간; 라이딩 데이터를 공유합니다. 경로 기록 및 데이터 표시는 크루즈 모드에서 활성 탐색 없이도 작동합니다. 비즈니스 모델도 마찬가지로 간단합니다. AdMob 광고와 일회성 구매를 통해 광고를 제거하는 것입니다.
나는 이 작은 앱이 각 사용자에게 한계 서비스 비용을 추가하지 않고 전 세계에서 작동하기를 원했습니다. 그래서 중국 내비게이션 API나 구글 지도 대신 애플의 MapKit을 선택했습니다. 이것이 바로 Apple과 같은 진정한 글로벌 기업의 이점입니다. Apple은 어려운 국제 인프라를 처리하고 이를 간단한 방법으로 통합할 수 있습니다.
개발의 함정
가장 큰 문제는 지도 좌표를 변환하는 것이었습니다. 지도 앱을 만들어 본 적이 없다면 중국 본토의 지도가 종종 다른 좌표계를 사용한다는 사실을 모를 수도 있습니다. "위도와 경도"가 항상 동일한 기준 체계를 의미하는 것은 아닙니다. GPS는 일반적으로 WGS-84 좌표를 제공합니다. 현지 규정 및 매핑 요구 사항에 따라 중국 인터넷 지도는 일반적으로 변환된 좌표를 사용합니다. Amap과 Tencent는 주로 "화성 좌표"라는 별명이 붙은 GCJ-02를 사용하고 Baidu는 BD-09 변환을 추가합니다. 해당 지도에 원시 GPS 좌표를 표시하면 결과가 수백 미터 떨어져 있을 수 있습니다.
데모를 만든 후 양씨와 저는 여러 번 타고 테스트해 보았는데, 매번 내비게이션 위치가 틀렸습니다. 그러다가 2015년 카풀 제품 아이핀체를 작업하면서 비슷한 문제가 생각났어요. GPT에 확인해 보니 WGS-84 ⇄ GCJ-02 변환 문제가 확인됐어요. Codex에게 좌표변환 추가를 요청했더니 오프셋이 사라졌습니다.