Journal de développement / RideMeter-Simple GPS Computer

Journal de développement RideMeter : un simple ordinateur de vélo GPS

Des sorties avec des vélos pliants à un ordinateur de vélo sur téléphone : la pause automatique de RideMeter, l'enregistrement des sorties, la navigation MapKit et les défis de conversion de coordonnées.

C'était ma première tentative avec une application iOS après avoir découvert le codage d'ambiance. Mon précédent travail de programmation avait eu lieu avant notre voyage en Chine, plus d'un an plus tôt. À l'époque, j'écrivais principalement ce dont j'avais besoin pour mon travail, généralement des scripts utilisateur et des extensions Chrome.

Qu'est-ce qu'un script utilisateur ?

Un script utilisateur est un petit programme qui s'exécute dans votre navigateur pour modifier ou améliorer une page Web existante. Il est similaire à une extension de navigateur, mais généralement plus léger, chaque script traitant d'un problème spécifique. Un script utilisateur peut supprimer des publicités, ajuster une mise en page, ajouter des boutons de téléchargement, remplir des formulaires ou même donner à un site Web des fonctionnalités qu'il ne possédait pas à l'origine. Le surnom chinois « Youhou » fait généralement référence à l'extension du navigateur Tampermonkey. Installez Tampermonkey, puis installez un script, et le script s'exécute automatiquement lorsque vous visitez le site Web concerné. En d’autres termes, le site Web fournit la page originale et le script utilisateur l’adapte dans votre navigateur.

D'où est venue l'idée

Retour à ma première application iOS :

De retour à Hangzhou après notre voyage en Chine, Yang et moi sommes allés occasionnellement faire du vélo. J'ai vendu le vélo de route que j'avais construit pour 15 000 RMB et acheté à Yang un vélo pliant de style Brompton fabriqué en Chine. Avec mon vélo pliant Dahon, les deux se glissent facilement dans le coffre de la voiture, ce qui nous permet d'aller n'importe où pour une balade en douceur. Avant cela, j'étais le genre de cycliste qui souhaitait maintenir une vitesse de 30 km/h même sur ses trajets domicile-travail et qui se sentait perdu sans compteur vélo. J'ai même payé Strava, ce qui était très cher.

Les cyclistes comme moi ont généralement un ordinateur de vélo sur le vélo, parfois un compteur séparé pour chaque vélo. Mais il n'est pas toujours avec vous : vous roulez peut-être sur un vélo partagé ou vous avez simplement laissé l'ordinateur à la maison. Je ramène le mien à la maison pour le recharger et je le détache généralement lors du stationnement pour qu'il ne soit pas volé. Dans ces moments-là, un téléphone peut prendre sa place.

La configuration cycliste derrière RideMeter
La configuration cycliste derrière RideMeter

Un ordinateur de vélo diffère d'une application de navigation ordinaire de plusieurs manières importantes :

  1. La navigation doit emprunter les pistes cyclables. Amap peut le faire aussi.

  2. La minuterie devrait s'arrêter lorsque vous vous arrêtez. La plupart des applications de navigation ne le font pas, et les cyclistes occasionnels n'en ont peut-être pas besoin, mais cela est important pour l'entraînement et la compétition. Si le temps d'arrêt compte, cela réduit votre vitesse moyenne et rend plus difficile l'évaluation de la façon dont vous avez parcouru cette section.

  3. Le seuil de vitesse d'enregistrement doit être réglable, par exemple pour commencer à compter au-dessus de 5 km/h ou 10 km/h. Certaines personnes à la recherche de statistiques Strava impressionnantes fixent ce seuil beaucoup plus haut, à 15 voire 20 km/h. Avec un seuil de 15 km/h, les passages lents et le temps passé aux feux ne font pas baisser les performances enregistrées.

Présentation de RideMeter

Compteur de trajet
Compteur de trajet

Mon projet de pratique est donc un ordinateur de vélo extrêmement simple. Son interface sombre vise à utiliser le moins d'énergie possible sur un écran OLED, tandis que les couleurs noir et jaune suggèrent la vitesse et le mouvement.

La liste des fonctionnalités est courte : navigation ; vitesse réelle, vitesse moyenne, distance et temps de trajet ; et partager des données de trajet. L'enregistrement d'itinéraire et l'affichage des données fonctionnent également sans navigation active, en mode croisière. Le modèle économique est tout aussi simple : des annonces AdMob et un achat unique pour les supprimer.

Je voulais que cette petite application fonctionne partout dans le monde sans ajouter de coût de service marginal pour chaque utilisateur. C'est pourquoi j'ai choisi MapKit d'Apple plutôt qu'une API de navigation chinoise ou Google Maps. C’est l’avantage d’une entreprise véritablement mondiale comme Apple : elle gère l’infrastructure internationale difficile et je peux l’intégrer de manière simple.

Un écueil de développement

Le plus gros problème était la conversion des coordonnées cartographiques. Si vous n'avez jamais créé d'application cartographique, vous ne savez peut-être pas que les cartes de Chine continentale utilisent souvent un système de coordonnées différent. « Latitude et longitude » ne désignent pas toujours le même système de référence. Le GPS fournit normalement les coordonnées WGS-84. Conformément aux réglementations locales et aux exigences de cartographie, les cartes Internet chinoises utilisent couramment des coordonnées transformées : Amap et Tencent utilisent principalement GCJ-02, souvent surnommé « coordonnées de Mars », et Baidu ajoute sa transformation BD-09. Tracez les coordonnées GPS brutes sur ces cartes et le résultat peut être à des centaines de mètres.

Après avoir construit une démo, Yang et moi avons fait plusieurs voyages pour la tester, et la position de navigation était à chaque fois erronée. Ensuite, je me suis souvenu d'un problème similaire en travaillant sur le produit de covoiturage Aipinche en 2015. J'ai vérifié auprès de GPT, qui a confirmé le problème de conversion WGS-84 ⇄ GCJ-02. J'ai demandé au Codex d'ajouter la conversion des coordonnées et le décalage a disparu.