Entwicklungstagebuch / RideMeter-Simple GPS Computer

RideMeter-Entwicklungsjournal: ein einfacher GPS-Fahrradcomputer

Von Ausflügen mit Falträdern bis hin zu einem telefonbasierten Fahrradcomputer: Automatische Pause, Fahrtaufzeichnung, MapKit-Navigation und Koordinatenkonvertierungsherausforderungen von RideMeter.

Dies war mein erster Versuch einer iOS-App, nachdem ich Vibe Coding entdeckt hatte. Meine vorherige Programmierarbeit fand vor unserer Reise durch China statt, mehr als ein Jahr zuvor. Damals habe ich hauptsächlich Dinge geschrieben, die ich für die Arbeit brauchte, normalerweise Userscripts und Chrome-Erweiterungen.

Was ist ein Userscript?

Ein Userscript ist ein kleines Programm, das in Ihrem Browser ausgeführt wird, um eine vorhandene Webseite zu ändern oder zu erweitern. Es ähnelt einer Browser-Erweiterung, ist jedoch normalerweise einfacher, da jedes Skript ein bestimmtes Problem anspricht. Ein Userscript kann Anzeigen entfernen, ein Seitenlayout anpassen, Download-Schaltflächen hinzufügen, Formulare ausfüllen oder einer Website sogar Funktionen verleihen, die sie ursprünglich nicht hatte. Der chinesische Spitzname „Youhou“ bezieht sich normalerweise auf die Browsererweiterung Tampermonkey. Installieren Sie Tampermonkey und installieren Sie dann ein Skript. Das Skript wird dann automatisch ausgeführt, wenn Sie die entsprechende Website besuchen. Mit anderen Worten: Die Website stellt die Originalseite bereit und das Userscript passt sie in Ihrem Browser an.

Woher die Idee kam

Zurück zu meiner ersten iOS-App:

Nachdem wir von unserer Reise durch China nach Hangzhou zurückgekehrt waren, fuhren Yang und ich gelegentlich mit dem Fahrrad. Ich verkaufte das von mir gebaute Rennrad für 15.000 RMB und kaufte Yang ein in China hergestelltes Faltrad im Brompton-Stil. Zusammen mit meinem Dahon-Faltrad passten beide problemlos in den Kofferraum des Autos, sodass wir für eine entspannte Fahrt überall hinfahren konnten. Davor war ich einer der Radfahrer, die auch auf dem Weg zur Arbeit 30 km/h halten wollten und sich ohne Fahrradcomputer verloren fühlten. Ich habe sogar für Strava bezahlt, was sehr teuer war.

Fahrer wie ich haben normalerweise einen Fahrradcomputer am Fahrrad, manchmal einen separaten für jedes Fahrrad. Aber es ist nicht immer bei Ihnen: Vielleicht fahren Sie mit dem gemeinsamen Fahrrad oder haben den Computer einfach zu Hause gelassen. Ich nehme mein Auto zum Aufladen mit nach Hause und nehme es normalerweise beim Parken ab, damit es nicht gestohlen wird. In solchen Momenten kann ein Telefon seinen Platz einnehmen.

Das Fahrrad-Setup hinter RideMeter
Das Fahrrad-Setup hinter RideMeter

Ein Fahrradcomputer unterscheidet sich in mehreren wichtigen Punkten von einer gewöhnlichen Navigations-App:

  1. Die Navigation sollte Fahrradrouten nutzen. Amap kann das auch.

  2. Der Timer sollte anhalten, wenn Sie anhalten. Die meisten Navigations-Apps bieten dies nicht und Gelegenheitsfahrer benötigen es möglicherweise nicht, aber für das Training und das Fahren im Wettkampf ist es wichtig. Wenn die Standzeit zählt, verringert sich Ihre Durchschnittsgeschwindigkeit und es wird schwieriger einzuschätzen, wie Sie diesen Abschnitt gefahren sind.

  3. Die Geschwindigkeitsschwelle für die Aufzeichnung sollte einstellbar sein, um beispielsweise ab 5 km/h oder 10 km/h mit der Zählung zu beginnen. Manche Leute, die auf der Suche nach beeindruckenden Strava-Statistiken sind, setzen die Schwelle viel höher, bei 15 oder sogar 20 km/h. Bei einer 15 km/h-Grenze beeinträchtigen langsame Abschnitte und Zeiten an Ampeln die aufgezeichnete Leistung nicht.

Wir stellen RideMeter vor

RideMeter
RideMeter

Mein Übungsprojekt ist daher ein äußerst einfacher Fahrradcomputer. Die dunkle Oberfläche zielt darauf ab, auf einem OLED-Bildschirm so wenig Strom wie möglich zu verbrauchen, während die schwarz-gelben Farben Geschwindigkeit und Bewegung suggerieren.

Die Funktionsliste ist kurz: Navigation; Live-Geschwindigkeit, Durchschnittsgeschwindigkeit, Distanz und Fahrzeit; und Teilen von Fahrdaten. Routenaufzeichnung und Datenanzeige funktionieren auch ohne aktive Navigation im Cruise-Modus. Das Geschäftsmodell ist genauso einfach: AdMob-Anzeigen und ein einmaliger Kauf, um sie zu entfernen.

Ich wollte, dass diese kleine App weltweit funktioniert, ohne dass für jeden Benutzer geringfügige Servicekosten anfallen. Deshalb habe ich mich für Apples MapKit entschieden und nicht für eine chinesische Navigations-API oder Google Maps. Das ist der Vorteil eines wirklich globalen Unternehmens wie Apple: Es bewältigt die schwierige internationale Infrastruktur und ich kann sie unkompliziert integrieren.

Eine Entwicklungsfalle

Das größte Problem war die Konvertierung von Kartenkoordinaten. Wenn Sie noch nie eine Karten-App erstellt haben, wissen Sie möglicherweise nicht, dass Karten auf dem chinesischen Festland häufig ein anderes Koordinatensystem verwenden. „Breitengrad und Längengrad“ bedeuten nicht immer das gleiche Bezugssystem. GPS liefert normalerweise WGS-84-Koordinaten. Aufgrund lokaler Vorschriften und Kartierungsanforderungen verwenden chinesische Internetkarten üblicherweise transformierte Koordinaten: Amap und Tencent verwenden hauptsächlich GCJ-02, oft auch als „Marskoordinaten“ bezeichnet, und Baidu fügt seine BD-09-Transformation hinzu. Tragen Sie rohe GPS-Koordinaten auf diesen Karten ein und das Ergebnis kann Hunderte von Metern entfernt sein.

Nachdem wir eine Demoversion erstellt hatten, machten Yang und ich mehrere Fahrten, um es zu testen, und jedes Mal war die Navigationsposition falsch. Dann erinnerte ich mich an ein ähnliches Problem bei der Arbeit am Fahrgemeinschaftsprodukt Aipinche im Jahr 2015. Ich habe mich bei GPT erkundigt, das das Problem mit der Konvertierung von WGS-84 ⇄ GCJ-02 bestätigte. Ich habe Codex gebeten, die Koordinatenkonvertierung hinzuzufügen, und der Versatz ist verschwunden.