Содержание
- Как задать ограничения для ключей API
- Сравнительное тестирование качества геокодирования
- Как подключается API от Яндекс
- Действие 3: Разрабатываем
- Действие 2: Поехали
- Тарифы и особенности сервисов
- Стандартные элементы управления
- Действие 4: Это конец / TL;DR
- Как задать собственный стиль для кнопки
- Создание карты
Как задать ограничения для ключей API
Ограничения повышают безопасность, поскольку с помощью ключа API можно будет отправлять только авторизованные запросы. Мы настоятельно рекомендуем следовать инструкциям по настройке ограничений для ключей API. Дополнительные сведения приводятся в .
При настройке ограничений ключа API вам потребуется указать цифровой отпечаток сертификата SHA-1 ключа, который использовался для подписи в приложении. Существует два типа сертификатов.
- Сертификат для отладки. Его следует использовать исключительно при тестировании приложений и работе с кодом до публикации. Не пытайтесь опубликовать приложение, подписанное с помощью сертификата для отладки. Этот сертификат создается автоматически при выполнении отладочной сборки приложения с помощью инструментов Android SDK.
- Сертификат для выпуска. Используйте этот сертификат, когда будете готовы разместить ваше приложение в магазине. Он создается с помощью инструментов Android SDK при выполнении сборки в процессе подготовки к выпуску.
Дополнительную информацию о цифровых сертификатах вы найдете в руководстве по .
Чтобы задать ограничение для ключа API, выполните следующие действия:
-
Откройте страницу Google Maps Platform > Credentials (Платформа Google Карт > Учетные данные).
- Выберите нужный ключ API. Откроется страница со свойствами ключа API.
- В разделе Key restrictions (Ограничения для ключа) установите следующие ограничения:
Ограничения для приложений:
- Выберите Приложения для Android.
- Нажмите + Название пакета и цифровой отпечаток.
- Укажите название пакета и цифровой отпечаток сертификата SHA-1. Пример:
com.example.android.mapexample
BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:91:AF:A1:66:6E:44:5D:75
Информацию о том, как получить цифровой отпечаток сертификата, вы можете найти в разделе .
Если же вы используете функцию подписания приложений в Google Play, вы можете найти цифровой отпечаток сертификата на странице подписания приложений в Play Console.
Ограничения для API:
- Нажмите Применить ограничения для ключа.
-
В раскрывающемся списке Выберите API нажмите Maps SDK для Android.
Если Maps SDK для Android там нет, его необходимо .
Нажмите Сохранить.
Сравнительное тестирование качества геокодирования
Страна | Город | Адрес | |
1 | Россия | Москва | Красная площадь д. 3 |
2 | Россия | Москва | 2-й Карачаровский проезд, 2 |
3 | Россия | Казань | Фатыха Амирхана 13 |
4 | Россия | Казань | 2я Центральная, 172А |
5 | Россия | Чистополь | Лобачевского, 57 |
6 | Россия | Новокузнецк | Ермака 16 |
7 | Россия | Улан-Удэ | Столбовая, 68 |
8 | Казахстан | Нурсултан | Кокжазык, 14 |
9 | Казахстан | Жезказган | Космонавтов, 10 |
10 | Беларусь | Минск | Переулок Стебенёва, 6 |
11 | Беларусь | Мозырь | Рыжкова, 4 |
12 | Украина | Киев | Суздальська вулиця 9 |
13 | Украина | Бучач | Богдана Хмельницького вулиця 6 |
14 | Венгрия | Budapest | Homokdomb 7 |
15 | США | CO, Fort Collins | East Oak Street, 411 |
ЯндексДадатаGraphHopperMapBoxOSM
Итоги рейтинга по заграничным адресам:
- По СНГ лидирует OSM, на втором месте – Яндекс, на третьем – .
- В Европе и США с задачей геокодирования лучше всего справляются OSM, GraphHopper и .
Как подключается API от Яндекс
Для того чтобы подключить API нужно внутрь тега прописать следующий код.
В первом примере мы подключаем полный пакет всех классов и методов ( GET запрос – )
Могут быть загружены как все компоненты API, так и отдельные пакеты, содержащие только необходимые компоненты. Это позволяет регулировать объем трафика, передаваемого клиентскому приложению.
В следующем примере подключены только пакеты и . Набор загружаемых пакетов задается параметром .
Так же есть возможность подгрузки компонентов в самом коде, когда это необходимо с помощью метода . В следующем примере мы с вами рассмотрим подключение балуна и хинта когда условие срабатывает.
Действие 3: Разрабатываем
Задача 1: отобразить карту
Сложностей не встретил, все есть в гайде.
Задача 2: отобразить пины
Нам нужен “MapObjectsActivity.java», то, что мы ищем, называется Placemarks. Смотрим в код, чтобы понять, что с ними делать.
Задача 3: построить маршрут
Наш друг тут — “MasstransitRoutingActivity.java”. Маршрут можно попросить разный: только на машине, только пешком, и так и сяк; наверняка можно еще учесть метро и другие разные штуки, но я недонырнул.
Дополнительная задача: позиционирование прямое и обратное. Надо же еще уметь определять местоположение. Прямое геокодирование — определять координаты по названию, обратное — определять название по координатам.
Для решения этой задачи придется вернуться в поиск — и найти документацию для js . Она кажется гораздо более подробной и объемной (я завидую). Нам необходим “HTTP geocoding request” — тут довольно понятно написано, что это и как его использовать. Дело за реализацией http запросов-ответов на мобилках.
Действие 2: Поехали
Находим Getting started и приступаем. В начале все просто.
На “Step 3. Set up the library” возникают вопросы. Вью и фабрику нужно обязательно стартовать и останавливать отдельно, иначе, как нам сообщают, ничего не будет работать. Почему? А что будет, если что-то стартану, а что-то нет, или стартану что-то позже? А если несколько вьюх, то для каждого надо фабрику, или это синглтон?
Возможно, это всего лишь QuickStart и дальше мы найдем подробное описание! (нет)
Давайте смотреть, что есть по документации. А все, ничего больше нет. Есть только сгенерированная документация с комментариями типа:
Спасибо, Яндекс.
Ладно, на гитхабе есть еще проект с примерами использования . Внутри каждого класса активити есть комментарии о том, что он делает и зачем нужен (после документации это просто подарок судьбы). Есть несколько сценариев: создание кастомного слоя карты, построение маршрута для автомобиля, работа с объектами на карте и некоторые другие.
Выглядит ли апи мощным? Да.
Понятно ли как им пользоваться в случаях, чуть более сложных, чем примеры? Нет.(
Как это понять? ¯_(ツ)_/¯ Нырять с головой в код, по итогу исследований продавать книжку о том, что нашел.
Тарифы и особенности сервисов
Название | Тариф | Комментарий |
Бесплатно до 25 000 запросов/сутки Если больше – коммерческие тарифы от 120 000 рублей в год за 1000 запросов в сутки |
Кроме количества запросов также ограничен лицензионным соглашением — результаты кодирования нельзя сохранять и использовать без карты (но можно кешировать), их нужно отображать только на картах Яндекса и только в рамках общедоступных сервисов (доступных всем или с открытой бесплатной регистрацией). | |
Бесплатно 10 000 запросов в сутки. Платные тарифы от 5000 рублей в год за 50 тысяч запросов в сутки. |
Оферта не позволяет его использовать полностью в автоматическом режиме — подсказки — только для уточнения данных, которые вводятся пользователем, прямо в форме где они вводятся. Обрабатывать собранные ранее массивы адресов в автоматическом режиме подсказками нельзя. Если не использовать автоматический режим, то этот сервис самый дешевый на рынке. На платных тарифах даёт массу полезной информации – цены на недвижимость, ближайшие станции метро, коды ФИАС и КЛАДР и тд |
|
5$ за тысячу запросов, бесплатного лимита нет. | Полностью платный сервис, поэтому я в своей работе его практически не использовал. Зато есть клиенты для Java, Python, Go и Node.js | |
Стоимость основана на использовании кредитов. Бесплатно вам дается 500 кредитов в день, что эквивалентно примерно 1666 запросам. Коммерческие тарифы от 48 евро в месяц за 5000 кредитов (16 666 запросов) в сутки |
У сервиса много других интересных функций помимо геокодирования: Routing API и Route Optimization API — автоматическое построение и оптимизация маршрутов Matrix API — построение логистической матрицы с учетом загруженности дорог Isochrone API — сервис, позволяющий построить зону, в которую можно доехать из заданной точки за фиксированное время. Map Matching API — сервис, который привязывает GPS-треки к дорогам, чтобы можно было построить историю передвижения. |
|
Бесплатно до 100 000 запросов в месяц. Свыше 100 000 – 0,75$ за каждую 1000 запросов | Удобный сервис, потому что имеет огромное количество официальных модулей для Swift, JS, Java, Python, Ruby. Плохо работает с Россией | |
OpenSource-решение, которое вы можете развернуть на своей машине бесплатно. |
Стандартные элементы управления
Теперь изменим код, чтобы на карте отображались :
- Панель инструментов со стандартным набором кнопок: перетягивание карты (drag), увеличение выделенной области, измерение расстояний.
- Переключатель отображаемого типа карты.
- Изменение коэффициента масштабирования.
ymaps.ready(init); function init() { var myMap = new ymaps.Map ('myMap', { center 55.75, 37.61, zoom 3, type 'yandex#satellite' }); myMap.controls .add('mapTools') // стандартные кнопки .add('typeSelector') // переключатель типа карты .add('zoomControl'); // изменение масштаба var myPlacemark = new ymaps.Placemark(55.75, 37.61, { iconContent 'Москва', balloonContent 'Столица России' }, { preset 'twirl#blueStretchyIcon' }); myMap.geoObjects.add(myPlacemark); }
Можно изменить стандартное расположение элементов управления:
myMap.controls .add('mapTools', {left5, bottom35}) // стандартные кнопки .add('typeSelector', {left5, top5}) // переключатель типа карты .add('zoomControl', {right5, top15}); // изменение масштаба
Добавить линейку масштаба и обзорную карту:
myMap.controls .add(new ymaps.control.ScaleLine()) // линейка масштаба .add(new ymaps.control.MiniMap({ // обзорная карта заданного типа type 'yandex#publicMap' }));
Действие 4: Это конец / TL;DR
Общие итоги:
Яндекс карты классные. Как ими пользоваться — непонятно.
Хорошая документация, чтобы “потрогать” сервис. Ужасная документация, чтобы что-то с ним сделать. Структура ссылок — “Хрен найдешь”, качество находки — “Вот колесо, оно катится. А далее вы сами легко сможете изобрести машину, ракету, подводную лодку”.
Основные моменты:
Как отобразить карту в проекте? Ссылка , тут всё просто.
Как добавить пин на карту? Ключевые слова Placemark, MapObjects. Искать в samples.
Как построить маршрут? Ключевое слово MasstransitRouting. Искать в samples.
Как сделать что-то еще? Искать в samples. Если там нет, то у вас проблемы.
Как задать собственный стиль для кнопки
В качестве иконки метки можно установить собственное изображение. Для этого необходимо задать следующие опции:
- — значение ‘default#image’ или ‘default#imageWithContent’ для меток соответственно без текста и с текстом поверх картинки;
- — URL графического файла значка;
- — размер значка в пикселах;
- — сдвиг значка в пикселах относительно точки привязки (задается, если “ножка” значка не находится в левом верхнем углу изображения;
- — для меток с текстом сдвиг текста относительно точки привязки метки.
Я предоставляю только часть информации, которая используется в большинстве случаев реализации карты. Вся подробная информация находится на сайте с документацией – https://tech.yandex.ru/maps/doc/jsapi/2.1/dg/concepts/geoobjects-docpage/
Создание карты
Создавать карту следует после того, как веб-страница загрузится целиком. Это значит, что контейнер для карты создан и к нему можно обращаться по id. Чтобы инициализировать карту после загрузки страницы, можно воспользоваться функцией ready().
ymaps.ready(init); function init() { var myMap = new ymaps.Map ('myMap', { center 55.75, 37.61, zoom 10 }); }
При инициализации карты, указав дополнительный параметр , мы можем задать тип нашей карты:
- yandex#map — тип карты «схема» (по умолчанию);
- yandex#satellite — тип карты «спутник»;
- yandex#hybrid — тип карты «гибрид»;
- yandex#publicMap — тип карты «народная карта»;
- yandex#publicMapHybrid — тип карты «народный гибрид».
ymaps.ready(init); function init() { var myMap = new ymaps.Map ('myMap', { center 55.75, 37.61, zoom 10, type 'yandex#hybrid' }); }