Diário de desenvolvimento / RideMeter-Simple GPS Computer
Diário de desenvolvimento RideMeter: um simples computador de ciclismo GPS
De passeios com bicicletas dobráveis a um computador de ciclismo baseado em telefone: pausa automática, gravação de percurso, navegação MapKit e desafios de conversão de coordenadas do RideMeter.
Esta foi minha primeira tentativa de criar um aplicativo iOS depois de descobrir a codificação vibe. Meu trabalho anterior de programação ocorreu antes de nossa viagem pela China, mais de um ano antes. Naquela época, eu escrevia principalmente coisas que precisava para trabalhar, geralmente scripts de usuário e extensões do Chrome.
O que é um script de usuário?
Um userscript é um pequeno programa executado em seu navegador para modificar ou aprimorar uma página da web existente. É semelhante a uma extensão de navegador, mas geralmente mais leve, com cada script abordando um problema específico. Um userscript pode remover anúncios, ajustar o layout de uma página, adicionar botões de download, preencher formulários ou até mesmo fornecer a um site recursos que ele não possuía originalmente. O apelido chinês “Youhou” geralmente se refere à extensão do navegador Tampermonkey. Instale o Tampermonkey e, em seguida, instale um script, e o script será executado automaticamente quando você visitar o site relevante. Ou seja, o site fornece a página original e o userscript a adapta dentro do seu navegador.
De onde veio a ideia
De volta ao meu primeiro aplicativo iOS:
Depois de retornar a Hangzhou de nossa viagem pela China, Yang e eu ocasionalmente andávamos de bicicleta. Vendi a bicicleta de estrada que havia construído por 15.000 RMB e comprei para Yang uma bicicleta dobrável estilo Brompton, de fabricação chinesa. Juntamente com a minha bicicleta dobrável Dahon, ambas cabem facilmente no porta-malas do carro, para que pudéssemos ir a qualquer lugar para um passeio tranquilo. Antes disso, eu era o tipo de ciclista que queria manter 30 km/h mesmo no trajeto e se sentia perdido sem um computador de ciclismo. Até paguei pelo Strava, que era muito caro.
Pilotos como eu geralmente têm um computador de ciclismo na bicicleta, às vezes um separado para cada bicicleta. Mas nem sempre está com você: talvez você esteja andando de bicicleta compartilhada ou simplesmente tenha deixado o computador em casa. Levo o meu para casa para carregar e costumo retirá-lo quando estaciono para não ser roubado. Nesses momentos, um telefone pode ocupar o seu lugar.

Um computador de ciclismo difere de um aplicativo de navegação comum em vários aspectos importantes:
A navegação deve utilizar ciclovias. O Amap também pode fazer isso.
O cronômetro deve pausar quando você parar. A maioria dos aplicativos de navegação não faz isso, e os pilotos casuais podem não precisar disso, mas isso é importante para treinamento e pilotagem competitiva. Se o tempo parado conta, isso diminui sua velocidade média e torna mais difícil avaliar como você percorreu aquela seção.
O limite de velocidade para gravação deve ser ajustável, por exemplo, para iniciar a contagem acima de 5 km/h ou 10 km/h. Algumas pessoas que buscam estatísticas impressionantes do Strava estabelecem esse limite muito mais alto, em 15 ou até 20 km/h. Com limite de 15 km/h, trechos lentos e tempo nos semáforos não prejudicam o desempenho registrado.
Apresentando o RideMeter

Meu projeto prático é, portanto, um computador de ciclismo extremamente simples. Sua interface escura visa usar o mínimo de energia possível em uma tela OLED, enquanto as cores preto e amarelo sugerem velocidade e movimento.
A lista de recursos é curta: navegação; velocidade ao vivo, velocidade média, distância e tempo de viagem; e compartilhando dados de viagem. A gravação de rota e a exibição de dados também funcionam sem navegação ativa, no modo cruzeiro. O modelo de negócios é igualmente simples: anúncios da AdMob e uma compra única para removê-los.
Eu queria que esse pequeno aplicativo funcionasse em todo o mundo sem adicionar um custo marginal de serviço para cada usuário. É por isso que escolhi o MapKit da Apple em vez de uma API de navegação chinesa ou do Google Maps. Este é o benefício de uma empresa verdadeiramente global como a Apple: ela lida com a difícil infraestrutura internacional e posso integrá-la de forma simples.
Uma armadilha de desenvolvimento
O maior problema foi converter as coordenadas do mapa. Se você nunca criou um aplicativo de mapas, talvez não saiba que os mapas na China continental costumam usar um sistema de coordenadas diferente. “Latitude e longitude” nem sempre significam o mesmo sistema de referência. O GPS normalmente fornece coordenadas WGS-84. De acordo com os regulamentos locais e requisitos de mapeamento, os mapas da Internet chineses geralmente usam coordenadas transformadas: Amap e Tencent usam principalmente GCJ-02, muitas vezes apelidado de “coordenadas de Marte”, e o Baidu adiciona sua transformação BD-09. Trace coordenadas GPS brutas nesses mapas e o resultado pode estar a centenas de metros de distância.
Depois de construir uma demonstração, Yang e eu fizemos vários passeios para testá-la, e a posição de navegação estava errada todas as vezes. Então me lembrei de um problema semelhante ao trabalhar no produto de carona Aipinche em 2015. Verifiquei com o GPT, que confirmou o problema de conversão WGS-84 ⇄ GCJ-02. Pedi ao Codex para adicionar a conversão de coordenadas e o deslocamento desapareceu.