Всем привет! Мы разрабатываем Okdesk — облачный Helpdesk для постпродажного сервисного обслуживания b2b клиентов. Среди пользователей нашего продукта — ЦТО и АСЦ по кассовой технике, интеграторы по автоматизации торговли, службы эксплуатации ритейл-сетей, компании обслуживающие коммерческую недвижимость и многие другие сервисные компании. Спецификой сервиса в таких компаниях является большое количество работы «в полях»: работа с оборудованием, техническое обслуживание инфраструктуры, планово-профилактические работы — всё это требует физического нахождения специалиста на объекте. Это обстоятельство накладывает ряд дополнительных требований к Helpdesk-решению, а именно: мобильное рабочее место инженера и визуализация запланированных работ на карте с отображением ближайших сотрудников. Мобильное приложение Okdesk для инженеров (под iOS и Android) появилось довольно давно и мы продолжаем его активно развивать. А вот отображение заявок и ближайших сотрудников на карте мы выпустили на днях.
Но речь в статье пойдет не о новой функциональности — заинтересованные могут получить 14-ти дневный бесплатный триал-аккаунт на сайте и познакомиться с системой самостоятельно. Речь пойдет о выборе картографических сервисов для реализации функциональности и какие продуктовые требования к ним предъявлять. Если для вашего проекта задача выбора решений для картографических модулей актуальна — добро пожаловать под кат.
Итак, что же мы хотим? Мы хотим передать в картографический сервис адрес, и получить отображение этого адреса на карте. Но так оно не работает. Отобразить на карте можно только координаты. А значит, необходимо сперва перевести строковое представление адреса в координатное. На ГИС-жаргоне это называется “геокодинг”.
Как это сделать? Здесь следует сделать небольшое отступление от темы. Дело в том, что в специфике сервисного b2b обслуживания заявки привязываются к заранее зафиксированным адресам (объектам обслуживания). У заявки не может быть произвольного и заранее неизвестного адреса. Все адреса фиксируются при заключении сервисного контракта, а добавление новых адресов не происходит внезапно в процессе поступления новых заявок. Поэтому, нам мог бы подойти вариант, когда администратор при заведении адреса в базу смотрит на публичных Яндекс-картах координаты соответствующего строения и вручную вносит их в карточку объекта обслуживания:
Но такой подход не вызвал у нас энтузиазма — пользователю будет неудобно (хотя, повторюсь, в нашем случае это была бы разовая операция при заведении объекта обслуживания в систему). И мы решили искать способ автоматического заполнения координат по адресу. Такие сервисы есть, осталось только выбрать. А для этого необходимо задать критерии выбора. Мы исходили из следующих требований:
Когда координаты адреса уже известны, его можно отображать на карте. К картографическому сервису у нас были минимальные требования):
Итак, мы определились какие инструменты нам требуются и по каким критериям мы будем их выбирать. Значит, пора анализировать имеющиеся сервисы и выбирать подходящую конфигурацию для решения задачи.
Для выбора решения мы определили список потенциальных кандидатов. Ими стали:
У Dadata.ru множество полезных сервисов для работы с данными. В нашем случае речь о сервисе «Подсказки по адресу». У Dadata множество плюсов. Подсказки работают “из коробки” и технически элементарно встраиваются в сторонние продукты. По адресу возвращаются не только координаты, но и другая информация (в нашем случае это не актуально, но кому-то может быть полезным). Данные “свежие” и их можно хранить у себя. Есть бесплатный тариф, который ограничен 10 000 запросами в сутки, но и платный тариф имеет более чем доступную цену (от 7000 рублей в год для организаций и 5000 рублей в год для физ.лиц).
Но есть один минус: сервис работает только по адресам России.
У 2ГИС большое число справочных геосервисов, и геокодинг — один из них. По официальным данным, геосервисы работают в 370-ти городах в 9-ти странах мира. Это даёт хорошее (но хуже, чем у Dadata) покрытие для России (выборочно мы посмотрели — в городах от 100к жителей всё хорошо, но в городах поменьше — на 50к жителей, детализация чаще всего есть только до улицы) и довольно слабое покрытие для других стран русскоязычного ex-СССР (например, относительно крупный казахстанский город Экибастуз со 130к+ жителями в справочнике адресов 2ГИС отсутствует). За пределами ex-СССР сервис присутствует точечно.
Есть и существенные минусы. Во первых, есть запрет на сохранение у себя полученных данных. Т.е. при каждой необходимости отобразить адрес на карте, необходимо будет делать запрос на получение координат. Также в сервисе нет бесплатного тарифа: минимальный пакет стоит 5000 рублей в месяц и включает 5000 запросов к API геокодинга (т.е. по рублю за запрос). При росте количества запросов стоимость за 1 запрос снижается. Например, если вы делаете свыше 5 000 000 запросов в месяц, стоимость одного запроса упадет до 5 копеек. Интересно, что запросом считается и запрос подсказок при вводе адреса, и запрос на координаты адреса при выборе из подсказок (т.е. минимальное количество запросов для получения координат по адресу — 2 штуки). В совокупности с тем, что данные геокодинга нельзя сохранить у себя и при каждой отрисовке объекта на карте необходимо делать запрос на геокодинг, использование геокодинга от 2ГИС выльется в нашем случае в существенную сумму.
Да, кроме этого есть ещё плата “за вход” — разовый взнос 15 000 рублей при подключении. Выглядит как какое-то крохоборство :)
(информация о стоимости актуальна на первую половину 2019 года, но не думаю, что всё драматически изменилось с момента нашего погружения в возможности и условия сервиса).
Геосервисы Google объединены под брендом Google Maps Platform. Среди них есть и геокодинг с подсказками. На сайте заявляется о покрытии в 99% адресов нашей планеты. 99% мы проверять не стали, а проверили только Россию. И, скажу я вам, качество и актуальность данных по России оставляет желать лучшего. Например, по мнению Google, жилого комплекса, где я живу, не существует (г. Москва, более 10 млн. жителей), хотя первые дома введены в эксплуатацию более 3 лет назад. А “жилой комплекс”, в котором я родился и вырос (г. Пенза, более 500к жителей) всё ещё существует, хотя в действительности уже 4 года как отправлен под снос. В качестве небольшого оправдания для Google Maps Platform можно добавить, что данные на панорамах куда более актуальны — на них и мой сегодняшний дом есть, и мой “родительский” дом выглядит вот так:
На этом можно было бы обзор геокодинга от Google закончить — с описанным покрытием и актуальностью он не применим для наших целей. Но, если честно, изучение сервиса мы начали с другого конца: с условий и цен. Поэтому о них всё равно напишем.
Итак, условия вполне гуманные. Все запросы тарифицируются: от 4 до 5 долларов за 1000 запросов на геокодинг, и отдельно тарифицируются подсказки — 2.83 доллара за 1000 запросов. Кроме того, Google ежемесячно начисляет на счет 200 виртуальных долларов, которыми можно оплатить сервисы платформы.
Google даже разрешает сохранять результаты геокодинга у себя. Но вот отображать их на карте можно только если этой картой является Google Maps, о чем явно сказано в самом первом разделе документа Geocoding API Policies:
Жаль, что не все коллеги по цеху в процессе выбора решения читают правовую информацию. С таким подходом можно легко подставить своих клиентов, дав им возможность получать результаты геокодинга от Google, но отображать объекты на, например, OpenStreetMaps.
Сервис Яндекса для геокодинга так и называется — Геокодер. Отличное покрытие по России — есть адреса даже для населенных пунктов с парой тысяч жителей. Для стран русскоязычного ex-СССР покрытие не хуже. Глобальное покрытие — символическое. Актуальность данных высокая.
В целом, всё было бы отлично, если бы не условия использования для коммерческих проектов (для некоммерческих — бесплатно с рядом ограничений).
Условия использования для коммерческих проектов следующие. Минимальная стоимость 120 000 рублей в год, и при таком тарифе суточный лимит составляет 1000 запросов. При росте количества ежедневных запросов стоимость на 1 запрос падает. В целом, стоимость не шокирующая, если не было бы одного НО: если вы хотите сохранять данные геокодинга у себя, к стоимости годового тарифа добавляется еще 500 000 рублей (подчеркну: не разово, а ежегодно). В итоге “порог входа” для нас начинается с 620 000 рублей в год с лимитом 1000 запросов в сутки. Такие дела.
OpenStreetMaps (OSM) — некоммерческий веб-картографический проект по созданию силами сообщества участников — пользователей Интернета подробной свободной и бесплатной географической карты мира. (с) Wikipedia.
У OSM есть сервис геокодинга, который называется Nominatim. Данные поддерживаются и обновляются “всем миром”. В целом, данные актуальные, но покрытие не глубокое — по России в городах с населением в 20-30 тысяч человек детализация до номера дома часто отсутствует.
Условия использования — свободные. Данные можно хранить у себя, данные можно использовать любым законным способом. В целом, как вспомогательный источник для геокодинга — подойдет! (спойлер: мы решили использовать его именно в таком статусе).
А теперь всё тоже самое, но кратко и в таблице:
Чуть выше мы разобрали плюсы и минусы различных геокодингов. При выборе карт мы руководствовались тем, что карты должны быть актуальными, покрытие хорошим а стоимость и условия использования — подъемными. Так как актуальность и покрытие карт полностью соответствует актуальности геокодинга (и эту информацию нет смысла дублировать), в обзоре карт остановимся только на стоимости и условиях.
Условия использования карт от 2ГИС довольно лояльные. Тарификация идет не по количеству запросов/отрисовок карты, а по фиксированной стоимости. Стоимость складывается из “платы за вход” — единоразовый взнос в 15 000 рублей — и ежегодной абонентской платы в 60 000 рублей.
Как и в случае с геокодингом, тарификация использования карт от Google опирается на количество запросов (запрос = отображение карты). А вот стоимость запроса зависит от того, какую карту вы хотите отобразить и где.
Например, если вам необходимо отображать статичную карту с заданными характеристиками и метками (т.е. при запросе карты Google будет возвращать картинку заданного куска с заданными метками) — это будет стоить 2 доллара за 1000 запросов. Если использовать такой же формат для приложений на Android — бесплатно. Кстати, для мобильных приложений Google-карты в широком смысле бесплатные. Но не стоит обольщаться — Google в любой момент может изменить условия использования в одностороннем порядке. Так, например, в 2018 году Google поднял стоимость использования карт в web-интерфейсе в 14 раз.
Для наших сценариев использования (динамические карты в web-интерфейсе) стоимость за 1000 показов карты составляет 7 долларов. При превышении количества показов в 100.000.000 (сто миллионов) в месяц, стоимость “падает” до 5,6 долларов за 1000 показов.
Так как “лицевой счет” компании для всех сервисов Google Maps Platform один, оплачивать использование карт от Google можно из тех же виртуальных 200 долларов, которые Google ежемесячно начисляет на счет.
Если у вас бесплатный проект, доступ к картам не требует регистрации пользователей в проекте и вы делаете менее 25 000 обращений к картам в сутки — то можете использовать Яндекс.Карты бесплатно. В противном случае, вашему проекту доступно только коммерческое использование. Запрос что к геокодеру, что к картам — тарифицируется одинаково. Годовая подписка начинается от 120 000 рублей в год (1000 запросов в день включено, 120 рублей за каждые последующие 1000 запросов сверх дневного лимита). Лимит запросов на геокодер и карты — общий.
И если результаты запросов вы хотите хранить у себя — нужно доплачивать сверху 500 000 рублей ежегодно.
Буду краток: бесплатно и свободно. Но есть нюанс — иногда карты в России притормаживают.
upd: есть ещё один нюанс — если вы используете online-сервисы OSM (а не разворачиваете их на своих серверах), есть неформальные ограничения, которые выражаются в формулировке:
Т.е. для больших проектов с интенсивным использованием карты он-лайн сервисы OSM не подходят, но можно развернуть их на своих серверах и использовать без ограничений.
Для геокодинга мы выбрали гибридное решение из сервиса Dadata.ru и сервиса Nominatim от OpenStreetMaps. Работает геокодинг следующим образом.
При вводе адреса пользователю отображаются подсказки из сервиса Dadata.ru. Если в подсказках есть то, что искал пользователь — он кликает по подсказке, выбранный адрес отображается на карте а под текстовым представлением адреса отображаются координаты (получены от Dadata.ru). Видео на Youtube.
Если введенный пользователем адрес в сервисе Dadata.ru отсутствует, пользователь может нажать Enter — и запрос на адрес отправиться в сервис Nominatim. Если в результатах поиска адрес будет найден, пользователь кликнет на адресе, адрес отобразится на карте, а координаты отобразятся под строковым представлением адреса. Видео на Youtube.
И, наконец, если адрес не найден ни в Dadata.ru, ни в Nominatim, пользователь может просто взять и указать точку на карте — и к введенному строковому представлению адреса добавятся координаты указанной точки. Видео на Youtube.
Буду краток. Мы выбрали OpenStreetMaps. Плюсов много, существенных минусов нет.
А вот на этом видео можно посмотреть, как работает отображение заявок на карте с назначением ответственности на ближайшего сотрудника в Okdesk:
Кстати, регистрируйте тестовый аккаунт на сайте и пробуйте в течение 14 дней бесплатно.
Но речь в статье пойдет не о новой функциональности — заинтересованные могут получить 14-ти дневный бесплатный триал-аккаунт на сайте и познакомиться с системой самостоятельно. Речь пойдет о выборе картографических сервисов для реализации функциональности и какие продуктовые требования к ним предъявлять. Если для вашего проекта задача выбора решений для картографических модулей актуальна — добро пожаловать под кат.
Проблематика и критерии выбора решений
Итак, что же мы хотим? Мы хотим передать в картографический сервис адрес, и получить отображение этого адреса на карте. Но так оно не работает. Отобразить на карте можно только координаты. А значит, необходимо сперва перевести строковое представление адреса в координатное. На ГИС-жаргоне это называется “геокодинг”.
Как это сделать? Здесь следует сделать небольшое отступление от темы. Дело в том, что в специфике сервисного b2b обслуживания заявки привязываются к заранее зафиксированным адресам (объектам обслуживания). У заявки не может быть произвольного и заранее неизвестного адреса. Все адреса фиксируются при заключении сервисного контракта, а добавление новых адресов не происходит внезапно в процессе поступления новых заявок. Поэтому, нам мог бы подойти вариант, когда администратор при заведении адреса в базу смотрит на публичных Яндекс-картах координаты соответствующего строения и вручную вносит их в карточку объекта обслуживания:
Но такой подход не вызвал у нас энтузиазма — пользователю будет неудобно (хотя, повторюсь, в нашем случае это была бы разовая операция при заведении объекта обслуживания в систему). И мы решили искать способ автоматического заполнения координат по адресу. Такие сервисы есть, осталось только выбрать. А для этого необходимо задать критерии выбора. Мы исходили из следующих требований:
- Геокодинг должен работать на адресах России и русскоязычного ex-СССР (основной рынок для Okdesk на сегодняшний день). Идеально было бы найти единый сервис геокодинга, хорошо работающий во всём мире, но забегая вперёд скажу, что мы его не нашли;
- Геокодинг должен предоставлять возможность хранить координаты в нашей базе без всяких ограничений. Мы не хотим осуществлять геокодинг всякий раз, как требуется отобразить данный адрес на карте (такое требование может показаться странным, но далеко не все сервисы это позволяют);
- Разумная стоимость и условия использования (геокодинг — одна из вспомогательных функций Okdesk-а, и платить за неё сотни тысяч рублей в год на сегодняшний день мы не готовы);
- Геокодинг должен предлагать подсказки (suggestions) при вводе адреса (когда пользователь вводит символы адреса, пользователю динамически предлагаются варианты для выбора, соответствующие введенным символам):
Когда координаты адреса уже известны, его можно отображать на карте. К картографическому сервису у нас были минимальные требования):
- Актуальность информации на карте;
- Разумная стоимость и условия использования.
Итак, мы определились какие инструменты нам требуются и по каким критериям мы будем их выбирать. Значит, пора анализировать имеющиеся сервисы и выбирать подходящую конфигурацию для решения задачи.
Кандидаты
Для выбора решения мы определили список потенциальных кандидатов. Ими стали:
- Сервис dadata.ru (геокодинг);
- Геосервисы 2ГИС (геокодинг и карты);
- Геосервисы Google (геокодинг и карты);
- Геосервисы Яндекса (геокодинг и карты);
- Сервисы проекта OpenStreetMaps (геокодинг и карты).
Выбор геокодинга
Dadata.ru
У Dadata.ru множество полезных сервисов для работы с данными. В нашем случае речь о сервисе «Подсказки по адресу». У Dadata множество плюсов. Подсказки работают “из коробки” и технически элементарно встраиваются в сторонние продукты. По адресу возвращаются не только координаты, но и другая информация (в нашем случае это не актуально, но кому-то может быть полезным). Данные “свежие” и их можно хранить у себя. Есть бесплатный тариф, который ограничен 10 000 запросами в сутки, но и платный тариф имеет более чем доступную цену (от 7000 рублей в год для организаций и 5000 рублей в год для физ.лиц).
Но есть один минус: сервис работает только по адресам России.
Геосервисы 2ГИС
У 2ГИС большое число справочных геосервисов, и геокодинг — один из них. По официальным данным, геосервисы работают в 370-ти городах в 9-ти странах мира. Это даёт хорошее (но хуже, чем у Dadata) покрытие для России (выборочно мы посмотрели — в городах от 100к жителей всё хорошо, но в городах поменьше — на 50к жителей, детализация чаще всего есть только до улицы) и довольно слабое покрытие для других стран русскоязычного ex-СССР (например, относительно крупный казахстанский город Экибастуз со 130к+ жителями в справочнике адресов 2ГИС отсутствует). За пределами ex-СССР сервис присутствует точечно.
Есть и существенные минусы. Во первых, есть запрет на сохранение у себя полученных данных. Т.е. при каждой необходимости отобразить адрес на карте, необходимо будет делать запрос на получение координат. Также в сервисе нет бесплатного тарифа: минимальный пакет стоит 5000 рублей в месяц и включает 5000 запросов к API геокодинга (т.е. по рублю за запрос). При росте количества запросов стоимость за 1 запрос снижается. Например, если вы делаете свыше 5 000 000 запросов в месяц, стоимость одного запроса упадет до 5 копеек. Интересно, что запросом считается и запрос подсказок при вводе адреса, и запрос на координаты адреса при выборе из подсказок (т.е. минимальное количество запросов для получения координат по адресу — 2 штуки). В совокупности с тем, что данные геокодинга нельзя сохранить у себя и при каждой отрисовке объекта на карте необходимо делать запрос на геокодинг, использование геокодинга от 2ГИС выльется в нашем случае в существенную сумму.
Да, кроме этого есть ещё плата “за вход” — разовый взнос 15 000 рублей при подключении. Выглядит как какое-то крохоборство :)
(информация о стоимости актуальна на первую половину 2019 года, но не думаю, что всё драматически изменилось с момента нашего погружения в возможности и условия сервиса).
Геосервисы Google
Геосервисы Google объединены под брендом Google Maps Platform. Среди них есть и геокодинг с подсказками. На сайте заявляется о покрытии в 99% адресов нашей планеты. 99% мы проверять не стали, а проверили только Россию. И, скажу я вам, качество и актуальность данных по России оставляет желать лучшего. Например, по мнению Google, жилого комплекса, где я живу, не существует (г. Москва, более 10 млн. жителей), хотя первые дома введены в эксплуатацию более 3 лет назад. А “жилой комплекс”, в котором я родился и вырос (г. Пенза, более 500к жителей) всё ещё существует, хотя в действительности уже 4 года как отправлен под снос. В качестве небольшого оправдания для Google Maps Platform можно добавить, что данные на панорамах куда более актуальны — на них и мой сегодняшний дом есть, и мой “родительский” дом выглядит вот так:
На этом можно было бы обзор геокодинга от Google закончить — с описанным покрытием и актуальностью он не применим для наших целей. Но, если честно, изучение сервиса мы начали с другого конца: с условий и цен. Поэтому о них всё равно напишем.
Итак, условия вполне гуманные. Все запросы тарифицируются: от 4 до 5 долларов за 1000 запросов на геокодинг, и отдельно тарифицируются подсказки — 2.83 доллара за 1000 запросов. Кроме того, Google ежемесячно начисляет на счет 200 виртуальных долларов, которыми можно оплатить сервисы платформы.
Google даже разрешает сохранять результаты геокодинга у себя. Но вот отображать их на карте можно только если этой картой является Google Maps, о чем явно сказано в самом первом разделе документа Geocoding API Policies:
Displaying Geocoding API results
You can display Geocoding API results on a Google Map, or without a map. If you want to display Geocoding API results on a map, then these results must be displayed on a Google Map. It is prohibited to use Geocoding API data on a map that is not a Google map.
Жаль, что не все коллеги по цеху в процессе выбора решения читают правовую информацию. С таким подходом можно легко подставить своих клиентов, дав им возможность получать результаты геокодинга от Google, но отображать объекты на, например, OpenStreetMaps.
Геосервисы Яндекса
Сервис Яндекса для геокодинга так и называется — Геокодер. Отличное покрытие по России — есть адреса даже для населенных пунктов с парой тысяч жителей. Для стран русскоязычного ex-СССР покрытие не хуже. Глобальное покрытие — символическое. Актуальность данных высокая.
В целом, всё было бы отлично, если бы не условия использования для коммерческих проектов (для некоммерческих — бесплатно с рядом ограничений).
Условия использования для коммерческих проектов следующие. Минимальная стоимость 120 000 рублей в год, и при таком тарифе суточный лимит составляет 1000 запросов. При росте количества ежедневных запросов стоимость на 1 запрос падает. В целом, стоимость не шокирующая, если не было бы одного НО: если вы хотите сохранять данные геокодинга у себя, к стоимости годового тарифа добавляется еще 500 000 рублей (подчеркну: не разово, а ежегодно). В итоге “порог входа” для нас начинается с 620 000 рублей в год с лимитом 1000 запросов в сутки. Такие дела.
Геосервисы OpenStreetMaps
OpenStreetMaps (OSM) — некоммерческий веб-картографический проект по созданию силами сообщества участников — пользователей Интернета подробной свободной и бесплатной географической карты мира. (с) Wikipedia.
У OSM есть сервис геокодинга, который называется Nominatim. Данные поддерживаются и обновляются “всем миром”. В целом, данные актуальные, но покрытие не глубокое — по России в городах с населением в 20-30 тысяч человек детализация до номера дома часто отсутствует.
Условия использования — свободные. Данные можно хранить у себя, данные можно использовать любым законным способом. В целом, как вспомогательный источник для геокодинга — подойдет! (спойлер: мы решили использовать его именно в таком статусе).
Сводная таблица по геокодингу
А теперь всё тоже самое, но кратко и в таблице:
Dadata | 2ГИС | Яндекс | OSM | ||
Подсказки | Есть | Есть | Есть | Есть | Нет |
Покрытие | Россия (очень хорошее). | Россия (крупные и средние города), ex-СССР (крупные города). | Россия и ex-СССР посредственно и не актуально. Наверное, в “развитых странах” хорошо. | Россия и ex-СССР (очень хорошее). | Весь мир, но для небольших городов часто плохая детализация. |
Использование данных | Можно хранить у себя и свободно использовать. | Нельзя хранить у себя, но получив данные можно использовать свободно. | Можно хранить у себя, но отображать на картах можно только если это Google Maps. | + 500 000 рублей в год если планируется сохранять данные у себя. | Свободно |
Стоимость | Есть бесплатный тариф с широкими границами, платный тариф от 7000 рублей в год. | 15000 рублей разово + от 5000 рублей в месяц. | 4-5$ за 1000 запросов. Но в пределах 200$/мес пока (на октябрь 2019 года) бесплатно. | От 120 000 рублей в год + 500 000 рублей в год, если планируется сохранять данные у себя. | Бесплатно |
Выбор картографического сервиса
Чуть выше мы разобрали плюсы и минусы различных геокодингов. При выборе карт мы руководствовались тем, что карты должны быть актуальными, покрытие хорошим а стоимость и условия использования — подъемными. Так как актуальность и покрытие карт полностью соответствует актуальности геокодинга (и эту информацию нет смысла дублировать), в обзоре карт остановимся только на стоимости и условиях.
Карта 2ГИС
Условия использования карт от 2ГИС довольно лояльные. Тарификация идет не по количеству запросов/отрисовок карты, а по фиксированной стоимости. Стоимость складывается из “платы за вход” — единоразовый взнос в 15 000 рублей — и ежегодной абонентской платы в 60 000 рублей.
Google Maps
Как и в случае с геокодингом, тарификация использования карт от Google опирается на количество запросов (запрос = отображение карты). А вот стоимость запроса зависит от того, какую карту вы хотите отобразить и где.
Например, если вам необходимо отображать статичную карту с заданными характеристиками и метками (т.е. при запросе карты Google будет возвращать картинку заданного куска с заданными метками) — это будет стоить 2 доллара за 1000 запросов. Если использовать такой же формат для приложений на Android — бесплатно. Кстати, для мобильных приложений Google-карты в широком смысле бесплатные. Но не стоит обольщаться — Google в любой момент может изменить условия использования в одностороннем порядке. Так, например, в 2018 году Google поднял стоимость использования карт в web-интерфейсе в 14 раз.
Для наших сценариев использования (динамические карты в web-интерфейсе) стоимость за 1000 показов карты составляет 7 долларов. При превышении количества показов в 100.000.000 (сто миллионов) в месяц, стоимость “падает” до 5,6 долларов за 1000 показов.
Так как “лицевой счет” компании для всех сервисов Google Maps Platform один, оплачивать использование карт от Google можно из тех же виртуальных 200 долларов, которые Google ежемесячно начисляет на счет.
Яндекс Карты
Если у вас бесплатный проект, доступ к картам не требует регистрации пользователей в проекте и вы делаете менее 25 000 обращений к картам в сутки — то можете использовать Яндекс.Карты бесплатно. В противном случае, вашему проекту доступно только коммерческое использование. Запрос что к геокодеру, что к картам — тарифицируется одинаково. Годовая подписка начинается от 120 000 рублей в год (1000 запросов в день включено, 120 рублей за каждые последующие 1000 запросов сверх дневного лимита). Лимит запросов на геокодер и карты — общий.
И если результаты запросов вы хотите хранить у себя — нужно доплачивать сверху 500 000 рублей ежегодно.
Open Street Maps
Буду краток: бесплатно и свободно. Но есть нюанс — иногда карты в России притормаживают.
upd: есть ещё один нюанс — если вы используете online-сервисы OSM (а не разворачиваете их на своих серверах), есть неформальные ограничения, которые выражаются в формулировке:
Heavy use (e.g. distributing an app that uses tiles from openstreetmap.org) is forbidden without prior permission from the System Administrators. See below for alternatives.
Т.е. для больших проектов с интенсивным использованием карты он-лайн сервисы OSM не подходят, но можно развернуть их на своих серверах и использовать без ограничений.
Сводная таблица
2ГИС | Яндекс | OSM | ||
Актуальность и покрытие | Россия (крупные и средние города), ex-СССР (крупные города). | Россия и ex-СССР покрытие посредственное и не актуальное. | Россия и ex-СССР (очень хорошее покрытие и высокая актуальность). | Весь мир, но для небольших городов часто плохая детализация. |
Стоимость и условия | 15000 рублей разово + 60 000 рублей в год. | 7$ за 1000 запросов. Но в пределах 200$/мес пока (на октябрь 2019 года) бесплатно. | От 120 000 рублей в год (в стоимость входит и использование геокодинга, количество запросов общее + 500 000 рублей в год, если планируется сохранять данные у себя. | Бесплатно и свободно. |
Что мы выбрали?
Геокодинг
Для геокодинга мы выбрали гибридное решение из сервиса Dadata.ru и сервиса Nominatim от OpenStreetMaps. Работает геокодинг следующим образом.
При вводе адреса пользователю отображаются подсказки из сервиса Dadata.ru. Если в подсказках есть то, что искал пользователь — он кликает по подсказке, выбранный адрес отображается на карте а под текстовым представлением адреса отображаются координаты (получены от Dadata.ru). Видео на Youtube.
Если введенный пользователем адрес в сервисе Dadata.ru отсутствует, пользователь может нажать Enter — и запрос на адрес отправиться в сервис Nominatim. Если в результатах поиска адрес будет найден, пользователь кликнет на адресе, адрес отобразится на карте, а координаты отобразятся под строковым представлением адреса. Видео на Youtube.
И, наконец, если адрес не найден ни в Dadata.ru, ни в Nominatim, пользователь может просто взять и указать точку на карте — и к введенному строковому представлению адреса добавятся координаты указанной точки. Видео на Youtube.
Карты
Буду краток. Мы выбрали OpenStreetMaps. Плюсов много, существенных минусов нет.
Бонус-видео: как работают карты в Okdesk
А вот на этом видео можно посмотреть, как работает отображение заявок на карте с назначением ответственности на ближайшего сотрудника в Okdesk:
Кстати, регистрируйте тестовый аккаунт на сайте и пробуйте в течение 14 дней бесплатно.