Дневник разработки / RideMeter-Simple GPS Computer

Журнал разработки RideMeter: простой велокомпьютер с GPS

От прогулок на складных велосипедах до велокомпьютера на базе телефона: автоматическая пауза RideMeter, запись поездок, навигация MapKit и задачи преобразования координат.

Это была моя первая попытка создать приложение для iOS после того, как я открыл для себя кодирование Vibe. Моя предыдущая работа по программированию была еще до нашей поездки по Китаю, более года назад. Тогда я в основном писал то, что мне было нужно для работы, обычно пользовательские скрипты и расширения Chrome.

Что такое пользовательский скрипт?

Пользовательский скрипт — это небольшая программа, которая запускается в вашем браузере и позволяет изменить или улучшить существующую веб-страницу. Оно похоже на расширение браузера, но обычно легче: каждый скрипт решает одну конкретную проблему. Пользовательский скрипт может удалять рекламу, корректировать макет страницы, добавлять кнопки загрузки, заполнять формы или даже предоставлять веб-сайту функции, которых у него изначально не было. Китайское прозвище «Youhou» обычно относится к браузерному расширению Tampermonkey. Установите Tampermonkey, затем установите скрипт, и скрипт запустится автоматически при посещении соответствующего веб-сайта. Другими словами, веб-сайт предоставляет исходную страницу, а пользовательский скрипт адаптирует ее внутри вашего браузера.

Откуда пришла идея

Возвращаюсь к моему первому приложению для iOS:

Вернувшись в Ханчжоу из путешествия по Китаю, мы с Яном время от времени катались на велосипеде. Я продал построенный мной дорожный велосипед за 15 000 юаней и купил Яну складной велосипед китайского производства в стиле Brompton. Вместе с моим складным велосипедом Dahon они легко помещаются в багажнике автомобиля, поэтому мы можем отправиться куда угодно для спокойной езды. До этого я был велосипедистом, который хотел поддерживать скорость 30 км/ч даже на дороге и чувствовал себя потерянным без велокомпьютера. Я даже заплатил за Strava, которая стоила очень дорого.

У таких гонщиков, как я, обычно на велосипеде есть велокомпьютер, иногда отдельный для каждого велосипеда. Но он не всегда с вами: возможно, вы катаетесь на общем велосипеде или просто оставили компьютер дома. Я беру свой домой на зарядку и обычно отсоединяю его при парковке, чтобы его не украли. В такие моменты его место может занять телефон.

Велосипедная установка, лежащая в основе RideMeter
Велосипедная установка, лежащая в основе RideMeter

Велокомпьютер отличается от обычного навигационного приложения по нескольким важным признакам:

  1. Для навигации следует использовать велосипедные маршруты. Амап тоже может это сделать.

  2. Таймер должен остановиться, когда вы остановитесь. Большинство навигационных приложений этого не делают, и обычным гонщикам это может не понадобиться, но это важно для тренировок и соревнований. Если время стоянки имеет значение, это снижает вашу среднюю скорость и затрудняет оценку того, как вы проехали этот участок.

  3. Порог скорости записи должен быть регулируемым, например, чтобы начать отсчет со скорости выше 5 км/ч или 10 км/ч. Некоторые люди, гоняющиеся за впечатляющей статистикой Strava, устанавливают этот порог гораздо выше — 15 или даже 20 км/ч. При пороге 15 км/ч медленные участки и время на светофорах не снижают зафиксированную производительность.

Представляем райдметр

райдметр
райдметр

Поэтому мой практический проект представляет собой чрезвычайно простой велосипедный компьютер. Его темный интерфейс призван потреблять как можно меньше энергии на OLED-экране, а черно-желтые цвета предполагают скорость и движение.

Список функций краток: навигация; живая скорость, средняя скорость, расстояние и время езды; и обмениваться данными о поездках. Запись маршрута и отображение данных работают и без активной навигации, в круизном режиме. Бизнес-модель так же проста: реклама AdMob и единоразовая покупка для ее удаления.

Я хотел, чтобы это маленькое приложение работало по всему миру без дополнительных дополнительных затрат на обслуживание для каждого пользователя. Вот почему я выбрал MapKit от Apple, а не китайский навигационный API или Google Maps. В этом преимущество такой по-настоящему глобальной компании, как Apple: она управляет сложной международной инфраструктурой, и я могу ее легко интегрировать.

Ловушка разработки

Самой большой проблемой было преобразование координат карты. Если вы никогда не создавали картографическое приложение, возможно, вы не знали, что карты материкового Китая часто используют другую систему координат. «Широта и долгота» не всегда означают одну и ту же систему отсчета. GPS обычно предоставляет координаты WGS-84. В соответствии с местными правилами и требованиями к картографии, китайские интернет-карты обычно используют преобразованные координаты: Amap и Tencent в основном используют GCJ-02, часто называемый «координатами Марса», а Baidu добавляет преобразование BD-09. Нанесите на эти карты необработанные GPS-координаты, и результат может отличаться на сотни метров.

После создания демо-версии мы с Янгом совершили несколько поездок, чтобы протестировать ее, и каждый раз положение навигации было неверным. Затем я вспомнил аналогичную проблему во время работы над продуктом для совместного использования автомобилей Aipinche в 2015 году. Я проверил GPT, который подтвердил проблему преобразования WGS-84 ⇄ GCJ-02. Я попросил Кодекс добавить преобразование координат, и смещение исчезло.