Pull to refresh

Comments 57

Имхо mapbox и openStreamMap(Leaflet) самые удобные для разработки.
Сейчас как раз неделю разбирался с MapBox.
— у них свой рендерер. Не без неприятных особенностей, но его развивают.
— возможность хранить как векторные так и растровые тайлы на их сервере
— возможность обновлять геоданные на их сервере
Строго говоря наоборот: данные OpenStreetMap, визуализация Mapbox/Leaflet. Поэтому разработчик контактирует только с Mapbox/Leaflet. Притом технически в них можно отображать что угодно, хоть гуглояндекс, но правда они этого не разрешают.
>Карты OpenStreetMap построены на базе картографической JS-библиотеки Leaflet.
Думаете вы, но нет (с)
Если открыть Бинг и посмотреть справа снизу, то можно увидеть, что там HERE и OSM
если открыть сайт 2гис и посмотреть, то можно увидеть что данные осм появляются за пределами данных 2гис :)
а шо делать — иных вариантов нет.
UFO landed and left these words here
У них вообще заманчивые сервисы, но ничего бесплатного кроме 30-дневного пробного периода я у них не нашел
Статья вообще ни о чем, а таблица возможностей и подавно.

У вас много понамешано с OSM и MapBox.


  • MapBox продаёт тайлы с данными OSM, поэтому покрытие и точность у них совпадают.


  • стандартные Leaflet-тайлы OSM бесплатны только для разработчиков. Они — ребята маленькие и серверов у них на всех не хватит



данные OSM бесплатны и открыты для всех. А тайлы — нет



Обратить внимание на Google. Для вашего приложения важна [...] детальность в небольших городах.

Покрытие малых российских городов от Here или Google — это несерьёзно. В наших малых городах есть только OSM, (и то, если кто-нибудь из сообщества их отрисовал).


Если никто не отрисовал и вы целитесь на небольшое количество городков — можно нанять пару студентов на месяц, и они дорисуют всё, что нужно — карта и лицензия позволяют.

Небольшая поправка: стандартные тайлы — это изображения, распространяемые на условиях обычной лицензии CC-BY-SA. С ними можно делать что угодно в рамках лицензии. Серверы не резиновые, это да, но если вы не условный фейсбук, то вам хватит. Вопрос тут не в лицензии, а в условиях использования: то есть, «не для всех», а не «для никого».

Подробнее про лицензирование тайлов писал в канале штосма.
Раньше использовал Google Maps, но в последнее время они сильно затянули гайки. Тех лимитов, что сейчас имеются просто не хватает на нормальное приложение. Дальше — огромные цены. Про Яндекс-карты совсем говорить не хочется, там цены заряжают уж совсем космические. Понятно, что всем кушать хочется, но даже если карты используются как вспомогательный элемент в приложении — они напрочь убивают всю рентабельность. Единственный выход использовать OSM и поддерживать свой тайловый сервер.
MapBox — очень крутые, но во всех приложениея, в которых я их использовал — 99.99% баги именно в их *.so библиотеках. Приятные карты, но очень сырые библиотеки
Все это ИМХО
UFO landed and left these words here
Мне, к сожалению, пришлось столкнуться с этим на своем опыте. Но на самом деле не все так сложно. Как правило карта не нужна мировая, поэтому на сервере достаточно иметь одну страну/регион. Да и докеровские сборки уже имеются. В принципе метод очень самодостаточный. Однако данный способ хорош только для тайлов.
Все еще имеются две большие проблемы:
1. Поиск маршрута. И если забить на актуализацию карт, то у гигантов (гуг и яша) есть преимущество в виде данных о пробках. Благодаря этим данным маршруты строятся гораздо интереснее. Но если делать запросы на маршрут — очень быстро упрешься в лимиты. Если делать навигатор не для городских автомобильных дорог, то можно воспользоваться данными OSM для построения маршрутов на своем сервере
2. Геокодирование. И если с обратным геокодированием справляется nominatim (его можно так же поставить на свой сервер) то вот поиск по адресу сильно удручает. А если вам нужно все сделать красиво с автоподсказками, то в лимит упретесь моментально. Вот к этой проблеме разумного решения я так и не нашел :(
Для геокодирования неплохо подходит HERE Maps (я в комменте ниже уже про это писал). Сам страдал с Nominatimом, а гугл и яндекс не позволяют отображать результаты своего геокодера поверх чужих карт. Потом наткнулся на HERE. У них есть бесплатный план (что важно для небольших хобби проектов), нет ограничений на отображение результатов (во всяком случае я не нашел) на чужих картах, есть отдельное апи для автодополнения.
>Для геокодирования неплохо подходит HERE Maps

По моим впечатлениям — API ужасно чуть более чем полностью. Работает только на стандартных случаях, чуть в сторону — и все, вы не имеете ничего.

То есть — вы получаете пустой ответ, и при этом ничего не понятно, геокодер не нашел дом, улицу, город или пуще того — страну. Тот же яндекс или гугль в этом случае вернут то, что нашли — то есть, например, город.
Ну это все перечеркивается тем, что больше никто бесплатного хорошего геокодера не дает.
Это, увы, правда. Я вам больше скажу, что и платные-то так себе :( Что до ArcGIS, например, то я столкнулся с ним чуть больше по работе (по-моему в случае Here именно он является геокодером), и (тоже увы), настроить его на адреса России, к сожалению, как следует видимо вообще невозможно. Слишком много сложных случаев в нашей адресации, и слишком просты правила, которые умеет описывать его геокодер.

Типичный живой пример — есть какая-нибудь улица «имени академика Н.И. Вавилова», или другая улица имени кого-нибудь (думаю вы сами вспомните несколько примеров), и к сожалению, большинство геокодеров недостаточно умны, чтобы понимать, что просто «улица Вавилова» это тоже самое. Даже в случаях, когда одноименных названий в населенном пункте нет. А уж если они есть — то и подавно.

Мы пытались нормализовать адреса перед геокодированием, но зачастую и это не спасает (да и нормализаторов, скажем прямо, тоже раз-два и обчелся).
Только что проверил про улицу Вавилова — в Питере ищет ее нормально.
Апи Here позволяет задавать области для поиска и точку для сортировки расстояния относительно ее. Без них ищет действительно странно, особенно если речь идет о какой-нибудь «улице Ленина», которая есть в десятках поселков и городов в РФ. Но если геокодеру помочь, указав границы региона, то ищет в целом нормально.
Вообще-то улица та была кажется в Самаре, я точно не помню:)

И вводить ее нужно именно в полной форме, с «имени академика»…

>Но если геокодеру помочь, указав границы региона, то ищет в целом нормально.
Зависит от настроек. И к сожалению, в нашем конкретном случае, геокодер ищет слишком «жадно», пытаясь найти совпадения в том числе в другом регионе/городе, и если находит — зачастую предпочитает их правильным.
У нас в Питере тоже есть. А апи автодополнений выдает много предложений по всей стране. Но как раз если ему передавать адрес точки, относительно которой надо искать, то сортирует оно по расстоянию до этой точки, а не по своему разумению.
Я вообще-то не про дополнения. С ними все значительно проще и лучше работает, по той самой причине, что вы указали — есть точка.
>1. Поиск маршрута.
Graphopper. Но пробки вам конечно никто не даст.
Имхо 2ГИС и Яндекс.Карты самые удобные для разработки.
Для вашего приложения важна стабильность работы карт, детальность в небольших городах
Серьёзно? Детальность в небольших городах у них максимум до центральной дороги. Иногда, конечно, бывают детальные небольшие города, с областными центрами уже вроде как везде в порядке, но райцентр райцентру рознь. Где-то детально, где-то не очень. Ну и не стоит ожидать что дорога, которой уже год как пользуются, будет отмечена у них, даже если вы в DC или DC2. А уж какими огородами они могут водить может убедиться любой пользователь Uber.
И в сравнительной таблице Покрытие, Детализация, Детализация на уровне зданий, Актуализация информации в столбце для GMaps — враньё. Особенно в России. Равно как и для OSM (кроме Актуализация информации — тут всё честно). Особенно был удивлён что у GMaps Актуализация информации лучше, чем у ДубльГИС — ДубльГИС за неделю проверят и внесут изменения, в отличие от.
для приложений по мониторингу транспорта/людей/еще чего-то любой поставщик карт предоставляет свои услуги платно
Это тоже не всегда и может быть бесплатно и офлайново. Например, на базе того же OSM, если будете сами генерировать карты.
> Актуализация информации в столбце для GMaps — враньё. Особенно в России
Могу сказать конкретно за Новоуральск, Гугл и Яндекс. Так вот, Гугл наш город знает куда лучше, чем Яндекс — особенно это актуально стало в контексте замены Uber (который использовал гугло-карты) на Яндекс-такси.
UFO landed and left these words here
OpenStreetMap не бесплатный. Ну или бесплатный только для маленьких приложений. Как только приложение начнет создавать ощутимую нагрузку на тайл-сервера — его могут забанить. Так банили Pokemon GO, что вынудило их искать другого провайдера тайлов уже после запуска.

Карты OpenStreetMap построены на базе картографической JS-библиотеки Leaflet.
Это совсем не правда. Leaflet очень популярная JS-библиотека для интерактивных карт. Но OpenStreetMap на ней не основан и к мобильным приложениям она отношения не имеет ну совсем.

В описании цен Mapbox написано, что вы должны переходить на Commercial план, если у вас платное приложение и вы платите за запросы данных. А в мобильных приложениях (речь в статье ведь именно о них) стоимость зависит от montly active users и платным приложениям не обязательно переходить на Commercial тарифный план.

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

Мы разрабатываем приложение Galileo Офлайн Карты и фреймворк GLMap — компонент карт для мобильных приложений, который работает офлайн. По своему опыту могу сказать, что для того чтобы OSM работал офлайн надо пройти длинный путь начиная от сырых данных node, way, relation. Отфильтровать лишнее и сжать данные в бинарный формат, который можно будет удобно парсить. Где-то эти данные хостить. И как-то давать пользователям их скачивать. Потом к этим бинарным данным надо применить стиль, чтобы на выходе получились полигоны, линии, точки, текст с определенными параметрами прорисовки. И затем в нужном порядке все нарисовать и расставить текст. OpenStreetMap заканчивается на node, way, relation + теги описывающие данные.

Кроме отображения карт часто нужно решать еще две задачи, связанные с гео-данными. Это роутинг и адресный поиск. Было бы здорово, чтобы в статье была информация о том, какие сервисы адресного поиска и навигации доступны для мобильных приложений.
OpenStreetMap всё ж бесплатен. OSM это про данные, а не тайлы. А вот тайлы могут быть платными.
Согласен. И на этом моменте надо делать акцент. Доступ к тайлам описан в Tile Usage Policy.
OpenStreetMap data is free for everyone to use. Our tile servers are not.
мысль чтобы всякие там левые лишнего тайл-серверы не напрягали попытались сформулировать, но получилось откровенно говоря херово.
тайлики тягаются в том числе и через большое количество прокси-сервероов CDN-сети, ни один из которых не принадлежит и даже не оплачивается осмф, хотя и работают с их сильного согласия.
Да и писать «Our tile servers» надо очень осторожно, ведь есть еще и несколько отдельных от OSMF рендер-серверов, которые также не получают бабла от осмф, но работают в общем потоке раздачи тайликов, бесплатно и бескорыстно.
в общем думать и думать как создавшуюся ситуацию появления большого интереса к осм правильно разрулить и получить от нее преференции, а не рубить сук, на котором сидишь.
тайлики будут свободны для всеобщего применения — это древняя основная реклама осм и от нее никуда не деться.
UFO landed and left these words here
Но так и не сделали… месяца не хватило?
Раз уж цитируете мой пост про сайтсафари, могли бы и ссылку на него дать.

Могу еще добавить немного по своему опыту:

1) У OpenStreetMap есть некоторые проблемы с доступностью и стабильностью. Я в своем проекте использую Overpass API для пакетной загрузке сырых данных (т.е. не тайлов, а полигонов и геометрии). Зеркала время от времени умирают или начинают адово тормозить. А главное зеркало overpass-api.de у нас ВНЕЗАПНО заблокировано Роскомпозором. Пытался тут договориться в ИТМО чтобы у нас сделали свое зеркало — была бы неплохая пиар-история для университета. Но пока все на уровне слов только.
Так же конечно все минусы коллективной разработки, то что вы процитировали и про что я рассказывал в своей статье. Стандартизация хромает на обе ноги. Для тайлов это наверное не существенно, а вот для машинной обработки данных карт — проблемно. Например народ не любит размечать теги landuse (тип использования территории: жилая, промышленная, торговая и т.п.), что очень мешает. Скоро сделаю еще один пост про OSM, как я тут на Варламова работал и тулзу одну картографическую пилил, там я по камням данных OSM нагулялся вдоволь.

2) Геокодирование. Вот с этим вообще большая проблема. Для небольших хобби-проектов (которым сейчас и является Sight Safari) абсолютно неподъемны стоимости платных доступов к апи гугла или яндекса. Геокодер OSM — Nominatim — совершенно тупой и ужасный, годится только для поиска четко структурированных адресов и совершенно не подходит для обработки произвольного пользовательского ввода. Еще и адовые ограничения на 1 запрос в секунду (хотите больше — поднимайте свой инстанс, что опять же приличные затраты т.к. ему там ресурсов дофига нужно). Ищет черт знает как при этом. Еще и отваливается постоянно, то ему надо юзер-агента правильного передавать (дефолтные агенты хттп библиотек не годятся, их сразу банят), то паузу между запросами побольше сделать, то еще хз что ему не нравится.
Более того, использовать геокодеры гугла и яндекса можно только на картах самого гугла и яндекса. Т.е. я не могу брать данные карты из OSM и рисовать поверх них точки на основе поиска адресов, взятых из яндекса.
Вот тут приятным сюрпризом оказался HERE Maps. Я про них раньше почти не слышал, у нас они как-то не очень популярны. Однако случайно наткнулся в интернете в ответе на вопрос «где взять бесплатный геокодер». Имеют бесплатный план с количеством запросов вполне достаточным для небольшого проекта. По России неплохо ищут, во всяком случае по крупным городам, по мелким не проверял. При этом, что важно, не имеют таких драконовских ограничений на отображение данных.

UFO landed and left these words here
>А главное зеркало overpass-api.de у нас ВНЕЗАПНО заблокировано Роскомпозором.
Блин. Я так и подозревал… А не подскажете, overpass разворачивается из исходников на своем сервере? И если да, то насколько сложно (докер)?
Там главное и самое сложное — это не сам сервис, а данные для него, и вычислительные ресурсы чтобы все это крутить. Нужно же постоянно скачивать многогигабайтные дампы с основного сайта OSM чтобы обеспечить актуальность информации.

Инструкции по развертыванию самого сервиса там вроде есть, но у меня так руки и не дошли этим заняться.
Ну, у меня ресурсы в наличии, по крайней мере для тестирования. А вот времени как раз и нет. Тот же Номинатим в этом плане привлекает именно тем, что можно пнуть докер, и получить что-то работающее (возможно без обновлений и прочего, но возможно и с ними).
eps тайлы осм свободны для любого применения, не зря же для их распространения собран большой CDN.
а вот статейку Илье надо будет переделать…
бегло его прочитал — документ сырой.
многие реалии пропущены, много чего не учтено.
надеюсь его будут доделывать.
сейчас это просто первая реакция — эмоциональная и не продуманная.
Тайлы свободны. Но OSMF оставляют за собой право забанить слишком активных пользователей. И при разработке платного приложения этот сценарий надо учитывать до запуска, а не после, когда приложение уже забанили, как это было с Pokemon GO.

К слову последнее время регулярно тормозят тайл-рендер сервера. И чтобы удержать эту нагрузку в разумных пределах было предложено банить самых активных пользователей.
UITcom будьте внимательны в своих тезисах. в осм нет тега «highway=unspecified» есть «highway=unclassified» т.е. дорога неклассифицированная. смысл появляется если понять систему классификации английских дорог с которой она и была срисована ^)
UFO landed and left these words here
Это цитата из моего поста, так что ошибка скорее всего моя. Вообще меня уже в ОСМ сообществе поправили, что unclassified используется и у нас (есть региональные соглашения о наименовании дорог в ОСМе, в каждой стране они свои). Правда все равно его часто используют неправильно, отчего ломаются навигаторы (начинают водить пешеходов по проезжей части).
unclassified впихнули в систему наших дорог и он имеет достаточно четкиерамки своего применения.

Пользуясь случаем спрошу, а есть ли стиль для mapbox схожий с яндекс.картами? На мой взгляд они самые читаемые.

Да, очень похоже, только, к сожалению, сам файл со стилями недоступен.
Доступен, но я не уверен, что могу его просто так отдать по причине лицензионной чистоты.
сборку рендеров осм можно посмотреть у эдвард17 она большая и достаточно свежая.
стили стоят денег :-\
для андроид есть библиотека векторных карт mapsforge от мапбокса.
а также есть опенсорс приложения османд и мапсми из которых можно взять рендеры (с согласованием лицензии и т.д.).
под каждый из вышеперечисленных рендеров есть конверторы для своего конвертирования карт осм.
У Osmand внезапно оказались какие-то странные проблемы с производительностью. Стоит добавить на карту буквально пару меток или полигонов, как она начинает ощутимо лагать при скролле даже на мощном смартфоне. Сообщество вроде про эту проблему в курсе, но сделать ничего не могут или не хотят. Давать пользователям такой неприятный опыт не хочется.
османд усложен.
возьми мапсфорж — там обещают заиметь векторные карты за десять строк.
Only those users with full accounts are able to leave comments. Log in, please.