Diario de desarrollo / RideMeter-Simple GPS Computer

Diario de desarrollo de RideMeter: un sencillo ciclocomputador con GPS

Desde salidas con bicicletas plegables hasta un ciclocomputador basado en un teléfono: los desafíos de pausa automática, grabación de recorridos, navegación MapKit y conversión de coordenadas de RideMeter.

Este fue mi primer intento con una aplicación para iOS después de descubrir la codificación por vibración. Mi anterior trabajo de programación había sido antes de nuestro viaje por China, más de un año antes. En aquel entonces, escribía principalmente cosas que necesitaba para trabajar, generalmente scripts de usuario y extensiones de Chrome.

¿Qué es un script de usuario?

Un script de usuario es un pequeño programa que se ejecuta en su navegador para modificar o mejorar una página web existente. Es similar a una extensión de navegador, pero normalmente más ligera y cada script aborda un problema específico. Un script de usuario puede eliminar anuncios, ajustar el diseño de una página, agregar botones de descarga, completar formularios o incluso brindarle a un sitio web funciones que no tenía originalmente. El apodo chino "Youhou" generalmente se refiere a la extensión del navegador Tampermonkey. Instale Tampermonkey, luego instale un script, y el script se ejecutará automáticamente cuando visite el sitio web correspondiente. En otras palabras, el sitio web proporciona la página original y el script de usuario la adapta dentro de su navegador.

De donde vino la idea

Volver a mi primera aplicación para iOS:

Después de regresar a Hangzhou de nuestro viaje por China, Yang y yo íbamos en bicicleta de vez en cuando. Vendí la bicicleta de carretera que había construido por 15.000 RMB y le compré a Yang una bicicleta plegable estilo Brompton de fabricación china. Junto con mi bicicleta plegable Dahon, ambas caben fácilmente en el maletero del coche, por lo que podíamos ir a cualquier lugar y dar un paseo tranquilo. Antes de eso, yo era el tipo de ciclista que quería mantener 30 km/h incluso en los desplazamientos y se sentía perdido sin un ciclocomputador. Incluso pagué por Strava, que era muy caro.

Los ciclistas como yo suelen tener un ciclocomputador en la bicicleta, a veces uno separado para cada bicicleta. Pero no siempre es contigo: quizás andas en bicicleta compartida, o simplemente dejaste el ordenador en casa. Llevo el mío a casa para cargarlo y normalmente lo quito cuando estaciono para que no me lo roben. En esos momentos, un teléfono puede ocupar su lugar.

La configuración ciclista detrás de RideMeter
La configuración ciclista detrás de RideMeter

Un ciclocomputador se diferencia de una aplicación de navegación normal en varios aspectos importantes:

  1. La navegación debe utilizar rutas ciclistas. Amap también puede hacer eso.

  2. El cronómetro debería detenerse cuando usted se detenga. La mayoría de las aplicaciones de navegación no hacen esto y es posible que los ciclistas ocasionales no lo necesiten, pero es importante para el entrenamiento y la conducción competitiva. Si el tiempo estacionario cuenta, reduce tu velocidad promedio y hace que sea más difícil evaluar cómo recorriste esa sección.

  3. El umbral de velocidad para la grabación debe ser ajustable, por ejemplo para empezar a contar a partir de 5 km/h o 10 km/h. Algunas personas que buscan estadísticas impresionantes de Strava establecen ese umbral mucho más alto, a 15 o incluso 20 km/h. Con un umbral de 15 km/h, los tramos lentos y el tiempo en los semáforos no reducen el rendimiento registrado.

Presentamos RideMeter

medidor de paseo
medidor de paseo

Por lo tanto, mi proyecto de práctica es un ciclocomputador extremadamente simple. Su interfaz oscura pretende utilizar la menor cantidad de energía posible en una pantalla OLED, mientras que los colores negro y amarillo sugieren velocidad y movimiento.

La lista de funciones es breve: navegación; velocidad en vivo, velocidad promedio, distancia y tiempo de conducción; y compartir datos de viaje. La grabación de rutas y la visualización de datos también funcionan sin navegación activa, en modo crucero. El modelo de negocio es igual de simple: anuncios de AdMob y una compra única para eliminarlos.

Quería que esta pequeña aplicación funcionara en todo el mundo sin agregar un costo de servicio marginal para cada usuario. Por eso elegí MapKit de Apple en lugar de una API de navegación china o Google Maps. Éste es el beneficio de una empresa verdaderamente global como Apple: maneja la difícil infraestructura internacional y puedo integrarla de una manera sencilla.

Un obstáculo para el desarrollo

El mayor problema fue convertir las coordenadas del mapa. Si nunca ha creado una aplicación de mapas, es posible que no sepa que los mapas de China continental suelen utilizar un sistema de coordenadas diferente. “Latitud y longitud” no siempre significan el mismo sistema de referencia. El GPS normalmente proporciona coordenadas WGS-84. Según las regulaciones locales y los requisitos cartográficos, los mapas chinos de Internet suelen utilizar coordenadas transformadas: Amap y Tencent utilizan principalmente GCJ-02, a menudo apodado “coordenadas de Marte”, y Baidu añade su transformación BD-09. Trace coordenadas GPS sin procesar en esos mapas y el resultado puede estar a cientos de metros de distancia.

Después de crear una demostración, Yang y yo hicimos varios recorridos para probarla y la posición de navegación fue incorrecta en cada ocasión. Luego recordé un problema similar al trabajar en el producto de viajes compartidos Aipinche en 2015. Verifiqué con GPT, que confirmó el problema de conversión WGS-84 ⇄ GCJ-02. Le pedí a Codex que agregara la conversión de coordenadas y el desplazamiento desapareció.