Pull to refresh

Офлайн карты/навигация Android

Reading time6 min
Views19K
OsmAnd screenshot
В этой статье я хочу рассказать о том, как создавая светлое, доброе, вечное opensource приложение, можно не только увеличить свою карму, но и заработать немного денег.

Чуть более года назад у меня появился Android телефон и сразу же передо мной встал вопрос, что использовать для путешествий, навигации. Как ни крути, но телефон с GPS и интернетом — очень удобен, особенно в незнакомых местах. Просмотрев все существовашие тогда приложения, был немного разочарован. Одно не работает без интернета, другое не поддерживает навигации, третье не ищет POI, четвертое не имеет векторных карт и т.д. Были конечно и бесплатные коммерческие аналоги, но у одних карты подкачали, у других отзывы, а все-таки когда платишь — хочется получить что-то, за что платишь.
Стоит отметить, что в поисках приложений, открыл совершенно замечательный проект OpenStreetMap с отличной детализацией для Беларуси. Поэтому, собрав все силы и желание сделать что-то бесплатное, доступное и нужное, открыл на googlecode проект OsmAnd.


Начало


В первую очередь, когда начинаешь проект, надо определиться зачем его начинаешь. Большинство opensource проектов начинаются для себя и для личных целей. В принципе и этот был не исключение: очень не хватало мне offline навигации или хотя бы навигации по offline картам. Во-вторых, надо просмотреть существующие аналоги: как я уже сказал, покупать ничего не хотелось (не стоило оно того), а из бесплатного и свободного — Navit как-то не зашел. Самое сложное было решиться на такой объемный проект: навигаторы пишутся большими компаниями и все они работают по-разному, у кого-то хорошо, а у кого-то и не очень. Как оказалось потом, не зря этого боялся: есть в навигационных приложениях очень сложные алгоритмы.

Первая версия

OsmAnd icon
С выбором методологии проблем вообще не было: модный в последнее время Agile. Есть время — работаю, заинтересовало — делаю, хочу — общаюсь с пользователями. Как многие пишут, начинать надо с чего-то работающего, выполняющего главную функцию. Поэтому сделал отображение, загрузку растровых карт и отображение POI. Какое это имеет отношение к навигации? Но это было только начало.

Вообще, создавая приложение для себя, я отметил, что иногда пользуюсь картами не только для навигации, поэтому в самом начале добавил избранные точки, поиск транспорта, анимационные переходы между точками и слайд эффекты, в общем все то, что требовало мало времени, но добавляло некоторый положительный эффект. Встретив большую поддержку OSM сообщества, я определенно решил, что приложение должно помогать улучшать OSM карты, поэтому добавил функциональность OSM bugs, редактирование POI прямо из Андроида и запись треков.

Первая версия, спустя месяц, получилась довольно веселая: она умела отображать растровые карты, как и все подобные, и делать кучу дополнительных вещей, используя офлайн данные, поиск по адресу, поиск транспорта, поиск POI. Этим приложением вполне можно пользоваться для специфических задач, но само по себе оно было лишено структуры — сложно было понять, что оно может, а что — нет. Это как раз недостатки Agile — на каждом этапе создавать максимальные business value за короткое время. Решение было только одно — рефакторинг.

Первая публикация

OsmAnd main screen screenshot
Честно говоря, приложение рекламировалось в узких кругах OSM сообщества (на Wiki Android OSM), специально ничего не проводилось. Именно поэтому, разместив на Android Market, сложно было ожидать большого количества загрузок. Но я радовался чуть ли не каждой из них, чувствуя гордость, что я делаю что-то полезное — особенное чувство удовлетворения получал от положительных комментариев. Где-то через 3 месяца количество загрузок достигло 1000 и я всерьез задумался, что проект стал известным и (!) бросить его будет не так уж и просто. Стоит отметить, что все это время был очень внимателен к критике и исправлял ошибки, добавлял функции за считанные дни. К сожалению, (некоторые!) люди, которые скачивают приложения через Market, не могут понять сущности opensource, гибкости, да и вообще не внимательно читают описание приложение, что оно кое-что не умеет. Чем иначе можно объяснить присвоение рейтинга 1-star за то, что нет двухпальцевого зума или вообще не запускается? Уже тогда приложение имело 40% функций, которыми 90% пользователи не пользовались, например загрузка карт на Android из WMS слоев. Конкретно проблема OsmAnd состояла в том, что картографические данные надо подготавливать (POI, Address), а для этого нужно запускать настольное приложение OsmAndMapCreator. В первое время, я даже не думал о хостинге, это же opensource, бесплатно, что еще надо, подготовь данные и пользуйся. Конечно же, я понимал насколько это неудобно, но дайте проекту развиваться, помогите, а не ставьте минусы. При этом даже подумывал удалить OsmAnd из маркета. Вообще это был неправильный маркетинговый ход — опубликовать именно на маркете не совсем продуманный продукт, но очень хотелось. Поэтому до сих пор можно найти в интернете информацию о том, что что-то не работает, хотя уже давно все переделано.

Развитие проекта

OsmAnd routing screenshot
Многие говорят, что начало проекта — это самое сложное, у тебя нет ничего, а надо получить что-то рабочее — позволю не согласиться. В начале у тебя есть идея и вера в то, что она рабочая. Самое сложное, я думаю, это конец проекта — уйти красиво. У меня он не наступил, но могу представить: надо будет найти людей, кому передать, подготовить документацию и т.д. Даже середина гораздо сложнее начала, потому как силы на исходе, количество времени на добавления функций растет, технический долг также, неясность целей, да и просто надоедает…

Спасало меня только одно, я сам пользовался приложением и не мог себе простить, почему оно так криво странно работает. Причем использовал я голосовую навигацию в Беларуси, практически везде, правда она требовала интернета, но работала. Исправляя все нелепости и перекладывая функции из меню в A в Б, у всякого проекта накапливаются достаточно крупные фичи, которые позволяют вывести продукт на новый этап, но взяться за них ой как сложно (особенно если никто не заставляет). Одной из такой функций был векторный рендеринг. Преимущества для приложения очевидны: относительно маленький размер карт, возможность манипуляции слоями, рендерингом, получение информации прямо с карт. Но с точки зрения разработки это достаточно сложная задача: реализация в лоб определенным образом не сложилась, слишком тормозила. Пришлось набраться книжек спросить у гугла и найти способ хранения RTree, причем запихать все данные в свой бинарный формат, чтобы читалось с диска быстрее. Все-таки, вложив сотни часов разработки, следует признать, что работает медленно. Особенно для моего старого HTC Hero в такой стране как Нидерланды (osm pbf > 450 MB). Ну, а реализация офлайн роутинга по-прежнему в глубоком начинании. Я не строил иллюзий, что реализовать будет легко, но не предполагал, что трудности могут не только техническими, но и творческими.

Сообщество

OsmAnd main screen screenshot
Рано или поздно, создавая востребованный opensource проект, у вас появится сообщество. Его надо очень любить, но не угождать во всем, а самое главное надо точно определить людей, которые могут быть полезны в будущем. Касаясь OsmAnd, сообщество, конечно же, существует и 5-6 людей очень активно участвуют mailing листах, создают баги, комментируют их, создают офлайн данные. Но (!) по-прежнему 98% кода, пишется одним человеком. Так что, как правильно было подмечено, opensource проекты — это прежде всего инициатива одного человека. Мне кажется, что заболеть идеей гораздо проще, чем заразить (ну только если не дурной).

Монетизация


Наверное, многие уже не дочитали, а долистали до этого лакомого кусочка. Кнопка донейт существовала на сайте уже давно, но не приносила достаточно денег, чтобы мотивировать разработку. Скорее всего, она выражала любовь или сострадание отдельных людей к данному продукту. Потом появилась кнопка BidForFix, то есть пользователи делают ставки на некоторые фичи, а когда фича готова (предполагается), программист получает вознаграждение в качестве этих ставок. Насколько я видел ставок было сделано очень много, но ни одна из них не сработала. Большинство пользователей ставило на offline routing, который до сих пор в стадии разработке, но и сумма там относительно небольшая — навигацию оценивают порядка 200-250$ — я бы и сам отдал 500$ тому, кто сделает.

Исходный код проекта перевалил за 30000 строчек (это очень приблизительно) и количество проблем становилось гораздо больше, чем желания их исправлять. К счастью, кто-то подсказал гениальную идею — продавать! Немного перефразировав ее, получилась такая: все, кто хотят получать свежие обновления из Маркета, должны сделать донейт 3 евро, у кого этих денег нету, могут скачать такую же бесплатную версию, но с сайта. Как не странно, идея работает, люди покупают версию и энтузиазм вернулся.

Текущее положение

OsmAnd Yandex traffic screenshot
У OsmAnd по-прежнему есть главная цель — сделать opensource навигацию на уровне коммерческих и лучше! Уже сейчас OsmAnd прекрасно подходит для пешеходной, велосипедной навигации и обладает достаточно уникальными функциями, такими, как навигация по GPX файлу. Конечно, приложение не без проблем — думаю, что больше половины пользователей не знают, как наиболее эффективно использовать его, но ведется работа по улучшению юзабилити и разработка новых функций. В общем, будущее зависит от вас и от нас. Если есть вопросы по приложению или желание поучаствовать — пишите.

Интересные факты об OsmAnd

  • OsmAnd участвовал в конкурсе Android Velcom с версией 0.3, но не попал даже в список призеров — победил какой-то компас.
  • В первое время большинство пользователей было из Беларуси, наверное, благодаря завезенным тогда Life Huawei.
  • На текущий момент приложение установлено больше всего у немцев, русских и других европейцев.
  • Многие удивляются, что не могут получить платную версию у разработчика и почему я ее не имею — да потому что я всегда собираю свою версию из кода.
  • OsmAnd переехал на github в качестве основного репозитория, но все ресурсы хранятся googlecode, исходный код синхронизируется каждый день.
  • Приблизительный список функций приложения на английском
Tags:
Hubs:
Total votes 155: ↑148 and ↓7+141
Comments118

Articles