Как встроить google maps в приложение
В этой статье мы рассмотрим API-интерфейс Google Maps Android, который позволяет добавлять в приложение карты на основе Google Maps. API автоматически обрабатывает доступ к серверам Google Maps, загрузку данных, отображение карты и реакцию на жесты карты. Вы можете использовать вызовы API для добавления маркеров, многоугольников и наложений на базовую карту и для изменения вида пользователя определенной области карты. Эти объекты предоставляют дополнительную информацию для местоположений на карте и позволяют пользователю взаимодействовать с картой.
Мы создадим приложение, которое покажет некоторые функции, доступные в API. Мы не будем охватывать все, поскольку это займет несколько постов, но мы рассмотрим общие функции, такие как добавление карты в вид, изменение типа карты, добавление маркера на карту, чтобы отметить местоположение, и настройка камеры, которая будет влиять на то, как пользователь видит карту.
Завершенный проект можно скачать здесь .
Получить ключ API
Чтобы использовать Google Maps Android API, необходимо зарегистрировать проект приложения в консоли разработчиков Google и получить ключ API Google, чтобы добавить свое приложение.
Ключ API основан на краткой форме цифрового сертификата вашего приложения, известной как отпечаток SHA-1. Во время разработки и тестирования вы должны использовать отладочный сертификат (о котором мы вскоре поговорим), но при публикации приложения вы должны использовать сертификат выпуска (инструкции по созданию сертификата выпуска можно найти здесь ).
Инструменты Android SDK автоматически генерируют отладочный сертификат при первом создании отладочной сборки, поэтому все, что нам нужно сделать, это получить его. Файл называется debug.keystore и по умолчанию он хранится в том же каталоге, что и файлы виртуального устройства Android (AVD):
Чтобы просмотреть сведения о сертификате, выполните следующее:
Linux или OS X
Windows
Вы попадете на панель управления проектом, в центре экрана нажмите «Использовать API Google».
Выберите Google Maps Android API и нажмите кнопку « Включить API» , которая появится на следующей странице.
После включения API нажмите Перейти к учетным данным на левой панели.
В меню « Добавить учетные данные» выберите « Ключ API» .
Выберите ключ Android .
В следующем диалоговом окне вы можете изменить имя ключа, но я оставил его как ключ Android по умолчанию 1
Используйте кнопку Добавить имя пакета и отпечаток пальца , чтобы добавить имя пакета вашего приложения (я использовал com.echessa.mapdemo01 ) и ваш отпечаток SHA1. После нажатия кнопки « Создать» вам будет показан ключ API, который мы будем использовать в нашем приложении.
В Android Studio создайте новый проект, который я назвал моим MapDemo01 . Убедитесь, что у него есть имя пакета, которое соответствует тому, которое вы использовали при генерации ключа в консоли разработчика Google, в противном случае вам придется изменить имя пакета в консоли разработчика, чтобы оно соответствовало вашему приложению.
Выберите API 15 в качестве минимальной версии SDK. В следующем окне выберите « Пустое действие» (« Пустое действие», если вы используете Android Studio версии 1.3 или более ранней). Оставьте последнее окно по умолчанию и нажмите Готово .
Добавление карты
Добавьте следующее в файл build.gradle (Module: app) и синхронизируйте gradle.
В файле манифеста добавьте следующее как дочерний элемент тега application . Замените ваш ключ API в атрибуте value .
Добавьте следующее как дочерний элемент элемента manifest в файле manifest.
Google Maps Android API использует OpenGL ES версии 2 для визуализации карты. Если OpenGL ES версии 2 не установлен, ваша карта не появится. Рекомендуется включить приведенный выше код в файл манифеста, который уведомляет внешние службы об этом требовании. В частности, он не позволяет Google Play Store отображать ваше приложение на устройствах, которые не поддерживают OpenGL ES версии 2.
Примечание . В предыдущих версиях API служб Google Play в файл манифеста приходилось включать разрешения для внешнего хранилища и доступа к Интернету, это уже не так.
Если вы нацелены на версию 8.3 или более позднюю версию SDK служб Google Play, вам больше не нужно разрешение WRITE_EXTERNAL_STORAGE для использования Google Maps Android API.
Если вы ориентируетесь на более ранние версии SDK сервисов Google Play, вы должны запросить разрешение android.permission.WRITE_EXTERNAL_STORAGE .
Если ваше приложение ориентировано на уровень API 23 (Android 6.0), который требует использования разрешений во время выполнения, вы должны использовать версию 8.3 или более позднюю из SDK сервисов Google Play.
Карты представлены в API классами GoogleMap и MapFragment .
Чтобы добавить карту в ваше приложение, добавьте объект Fragment в Activity который будет обрабатывать карту. Вы можете сделать это в коде или XML-файлах макета. Мы будем использовать последний метод.
Измените activity_main.xml, как показано ниже:
Выше мы добавили фрагмент к действию и установили для его атрибута android:name com.google.android.gms.maps.MapFragment . Это присоединяет MapFragment к действию. Если вам требуется поддержка старых устройств, используйте com.google.android.gms.maps.SupportMapFragment из библиотеки поддержки.
Запустите приложение, и вы увидите карту, встроенную в вид.
Вид карты по умолчанию показывает вид Земли с камерой, центрированной по экватору и перпендикулярно поверхности. Вы можете настроить начальное состояние карты, изменив настройки, такие как положение камеры (включая: местоположение, масштаб, направление и наклон), тип карты, включая кнопки масштабирования или компаса на экране, жесты, которые пользователь может использовать для управления камера, включен ли облегченный режим (растровое изображение карты, которая поддерживает подмножество функций, предоставляемых полным API).
Вы можете настроить начальное состояние карты либо через XML, либо программно.
Обновите фрагмент в файле activity_main.xml :
Запустите приложение, чтобы увидеть изменения в начальном состоянии карты.
Выше мы включили настройки для положения камеры, такие как местоположение, масштаб, направление и наклон. cameraBearing устанавливает направление, в котором вертикальная линия на карте указывает, в градусах по часовой стрелке от севера. cameraTargetLat и cameraTargetLng устанавливают местоположение центра карты. cameraTilt устанавливает положение камеры на дуге между прямым положением по центру карты и поверхностью Земли. cameraZoom определяет масштаб карты, при больших уровнях масштабирования на экране может быть больше деталей, в то время как при меньших уровнях масштабирования на экране больше мира.
Мы устанавливаем mapType в normal который является типом карты по умолчанию. Другие доступные варианты описаны ниже.
- Нормальный: Типичная дорожная карта. Показаны дороги, некоторые искусственные объекты и важные природные объекты, такие как реки. Метки дорог и объектов также видны.
- Гибрид: добавлены спутниковые фотографии с дорожными картами. Метки дорог и объектов видны.
- Спутник: спутниковые фотографии. Метки дорог и объектов не видны.
- Местность: Топографические данные. Карта содержит цвета, контурные линии и метки, а также затенение перспективы. Некоторые дороги и метки также видны.
- Нет: нет плитки. Карта отображается как пустая сетка без загруженных плиток.
Последний набор настроек определяет, появятся ли на экране элементы управления компасом и масштабированием, а также включает / отключает некоторые жесты.
Установка состояния карты программно
Мы видели, как установить начальное состояние карты, используя файлы макетов XML, далее мы рассмотрим, как сделать то же самое в коде.
Измените activity_main.xml, как показано ниже, чтобы включить только базовый MapFragment . Мы добавим больше конфигурации на карту в коде.
В MainActivity мы реализуем интерфейс OnMapReadyCallback и OnMapReadyCallback использовать onMapReady обратного вызова onMapReady чтобы получить дескриптор объекта GoogleMap . Объект GoogleMap является внутренним представлением самой карты. Чтобы установить параметры просмотра карты, измените ее объект GoogleMap .
Измените определение класса:
Добавьте onMapReady обратного вызова onMapReady .
Вышеуказанный объект получает объект GoogleMap и устанавливает тип карты и положение камеры, а затем перемещает камеру в это положение.
Добавьте следующее в конец onCreate() . Мы вызываем getMapAsync() для фрагмента, чтобы зарегистрировать обратный вызов.
Запустите приложение, и вы должны увидеть карту с установленной конфигурацией.
Вы можете использовать animateCamera() вместо moveCamera() чтобы получить хороший эффект перемещения камеры на место при загрузке карты.
Добавление маркеров на карту
Вы можете добавить маркеры на карту, чтобы показать отдельные места. Вы можете настроить маркеры, изменив цвет по умолчанию или заменив значок маркера на собственное изображение. Вы также можете добавить информационные окна, которые обеспечивают дополнительный контекст для маркера.
Добавьте следующее в onMapReady() после оператора, который инициализирует объект CameraPosition .
Здесь мы создали три маркера. Первый имеет пользовательский значок, в то время как остальные будут иметь значок по умолчанию. Второй маркер использует snippet() для отображения большего количества данных в информационном окне при касании маркера. Два других будут отображать только текст заголовка.
Запустите приложение, чтобы увидеть изменения. Я закомментировал оператор, который устанавливает тип карты, так что он по умолчанию normal .
Отображение текущего местоположения пользователя
Вашему приложению может потребоваться показать местоположение пользователя на карте. Это можно сделать либо с помощью API местоположения сервисов Google Play, либо с помощью слоя «Мое местоположение» и кнопки «Мое местоположение», чтобы отобразить текущее местоположение пользователя на карте.
Слой «Мое местоположение» предоставляет простой способ отображения местоположения устройства на карте. Чтобы использовать это, вам нужно разрешение на местоположение.
Добавьте следующее разрешение в файл манифеста.
Здесь мы запрашиваем coarse данные о местоположении, но для большей точности вы можете запросить fine данные.
Для поддержки Android Marshmallow вам необходимо использовать разрешение местоположения во время выполнения . Вкратце, мы не будем вдаваться в разрешения времени выполнения, но ссылка выше показывает, как это сделать.
Добавьте следующее в onMapReady() после кода, который создает маркеры.
Запустите приложение, и вы увидите кнопку « Мое местоположение» в правом верхнем углу карты. При нажатии на кнопку камера центрирует карту по текущему местоположению устройства, если оно известно. Местоположение обозначено на карте маленькой синей точкой, если устройство неподвижно, или как шеврон, если устройство движется.
Слой My Location не возвращает никаких данных. Если вы хотите получить доступ к данным о местоположении программным способом, вам следует использовать API определения местоположения Google Play Services.
API определения местоположения сервисов Google Play является предпочтительным способом добавления информации о местоположении в ваше приложение Android. Он имеет другие функциональные возможности, не предоставляемые слоем «Мое местоположение», что позволяет вам:
- Определите местоположение устройства.
- Слушайте изменения местоположения.
- Определите способ транспортировки, если устройство движется.
- Создание и мониторинг предопределенных географических регионов, известных как геозоны.
Вывод
Мы только что коснулись возможностей API Карт Google, он предлагает множество других функций, включая отображение тепловых карт, рисование фигур на карте, преобразование объектов KML (расширение формата данных XML) в географические фигуры и их рендеринг. как слой поверх карты и многое другое. Чтобы узнать больше об API, ознакомьтесь с документацией .
В этом руководстве рассказывается, как добавить карту Google в приложение для Android. Карта содержит маркер, которым обозначается определенное место.
Следуйте руководству по созданию приложения для Android с помощью Maps SDK для Android. Рекомендуемая среда разработки – Android Studio.
Как получить код
Версия на языке Java:
Версия на языке Kotlin:
Как настроить проект
Чтобы создать проект в Android Studio, выполните следующие действия:
-
и установите Android Studio. в Android Studio.
Клонируйте или скачайте репозиторий с примерами Google Maps Android API версии 2 с сайта GitHub, если вы ещё не сделали этого.
Импортируйте обучающий проект:
- В Android Studio выберите Файл > Создать > Импортировать проект.
- Перейдите в каталог, где вы сохранили репозиторий с примерами Google Maps Android API версии 2 после его скачивания.
- Найдите проект MapWithMarker. Он расположен в следующем каталоге:
PATH-TO-SAVED-REPO/android-samples/tutorials/java/MapWithMarker (Java)
PATH-TO-SAVED-REPO/android-samples/tutorials/kotlin/MapWithMarker (Kotlin) - Выберите каталог проекта и нажмите ОК. Теперь Android Studio создаст ваш проект с использованием инструмента сборки Gradle.
Как получить ключ API и активировать нужные API
Для выполнения этого учебного проекта вам понадобится ключ Google API, который авторизован для Maps SDK for Android.
Более подробную информацию можно найти в полном руководстве по получению ключа API.
Как добавить ключ API в свое приложение
Добавьте приведенную ниже строку и укажите вместо YOUR_API_KEY ваш ключ API.
Плагин Secrets Gradle Plugin для Android копирует ключ API во время сборки приложения и делает его доступным в виде переменной сборки в манифесте Android, как объяснено ниже.
Как создать сборку и запустить приложение
- Подключите устройство Android к компьютеру. Выполните инструкции по активации параметров для разработчиков на устройстве Android и настройте систему для обнаружения этого устройства. Для настройки виртуального устройства вы также можете использовать Менеджер виртуального устройства Android (AVD). Выбирая эмулятор, убедитесь, что вы используете образ, который содержит интерфейсы Google API. Подробную информацию можно найти в руководстве по началу работы.
- В Android Studio выберите пункт меню Запустить или нажмите на значок воспроизведения, чтобы запустить свое приложение. В открывшемся окне выберите устройство.
Android Studio запустит Gradle для сборки приложения, а затем отобразит результаты на устройстве или в эмуляторе. Вы должны увидеть карту с маркером, указывающим на город Сидней на восточном берегу Австралии, как показано на этой странице.
Понимание кода
В этой части руководства описаны наиболее важные компоненты приложения MapWithMarker, чтобы вам было проще понять принципы создания таких приложений.
Проверка манифеста Android
Обратите внимание на перечисленные ниже элементы в файле AndroidManifest.xml своего приложения.
Добавьте элемент meta-data , чтобы указать версию сервисов Google Play, с которой было скомпилировано приложение.
Добавьте элемент meta-data с указанием своего ключа API. В примере, приведенном в этом руководстве, значение ключа API сопоставляется с определенной ранее переменной сборки ( MAPS_API_KEY ). Во время сборки приложения плагин Secrets Gradle Plugin для Android делает ключи в вашем файле local.properties доступными, используя переменные манифеста.
В файле build.gradle приведенная ниже строка осуществляет передачу ключа API в манифест Android.
Ниже приведен пример полного манифеста.
Добавление карты
Отобразите карту, используя Maps SDK для Android.
Добавьте элемент <fragment> в файл макета для объекта activity, activity_maps.xml . Этот элемент указывает, что фрагмент SupportMapFragment должен выступать в роли контейнера для карты и предоставить доступ к объекту GoogleMap . В учебном проекте используется версия библиотеки поддержки Android для фрагмента карты. Это обеспечивает обратную совместимость с более ранними версиями фреймворка Android.
В методе onCreate() своего объекта activity установите файл макета как представление контента. Получите дескриптор для фрагмента карты путем вызова метода FragmentManager.findFragmentById() . Затем используйте метод getMapAsync() , чтобы зарегистрировать обратный вызов карты.
Kotlin
Реализуйте интерфейс OnMapReadyCallback и переопределите метод onMapReady() , чтобы настроить карту, когда объект GoogleMap будет доступен.
Kotlin
По умолчанию Maps SDK для Android отображает содержимое информационного окна, когда пользователь касается маркера. Нет необходимости добавлять прослушиватель кликов для маркера, если вас полностью устраивает поведение по умолчанию.
Дальнейшие действия
Прочитайте статьи об объекте карты и о том, что можно делать с маркерами.
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
После темы получения координат вполне логично будет рассмотреть тему гуглокарт. Тема несложная и не особо большая, нам хватит пару уроков, чтобы ее рассмотреть.
Но перед тем, как начать творить и созидать, нам надо будет сделать две вещи.
1) В гугл-консоли включить службу карт и получить API-ключ для работы
2) Обеспечить доступ проекта к Google Play services
API ключ
Начнем с первого пункта. Для этого нам надо зайти в Google APIs Console.
Если у вас нет проекта, гугл предложит его создать.
Жмем Create project…
Проект создан. Слева выбираем Services и открывается список служб.
В этом списке ищем Google Maps Android API v2
Жмем на тумблер включения (OFF), принимаем соглашение и снова попадаем в список служб.
Но теперь служба должна быть включена
Все ок. Теперь идем за ключом.
Для этого слева сверху выбираем API Access и открывается такой экран.
На нем жмем кнопку Create new Android key и от нас требуют ввести SHA1-значение ключа, которым будет подписано приложение.
И даже дают инструкции, как это сделать с помощью утилиты keytool
Если вообще непонятно о чем речь, рекомендую прочесть Урок 123. Там я все подробно описал.
Но последние версии Eclipse позволяют получить SHA1 без всяких команд, достаточно зайти в настройки и там есть вся инфа
Берем содержимое поля SHA1 fingerprint
К нему через точку с запятой дописываем пакет приложения (в этом уроке это будет ru.startandroid.develop.p1391googlemaps), вставляем в поле и жмем Create.
Появился нужный нам ключ - строка API key.
Не закрывайте пока эту страницу, скоро этот созданный ключ нам понадобится при создании приложения.
Не забывайте проделать эти же манипуляции, когда будете подписывать приложение для публикации на маркете другим ключом.
Google Play services
Теперь второй пункт. Для работы с картой нам понадобится Google Play services.
Открываем SDK Manager и ищем там Extras > Google Play services (если планируете поддержку Android 2.2, то Google Play services for Froyo). Если еще не установлено, то устанавливайте.
После того, как скачалось, у себя на компе ищите папку по следующему пути: <android-sdk>/extras/google/google_play_services/libproject/google-play-services_lib/. Если вдруг не знаете, где лежит SDK, то это можно подсмотреть в настройках Eclipse, пункт Android, SDK Location:
Исходники из папки google-play-services_lib надо будет импортнуть в Workspace. Для этого в меню Eclipse жмем File > Import, выбираем Android > Existing Android Code into Workspace, находим google-play-services_lib папку, ставим галку, чтобы импорт был выполнен путем копирования (Copy projects into workspace) и жмем Finish.
Проект google-play-services_lib должен появиться в вашем Workspace
Предварительная подготовка завершена, можем создавать проект.
Project name: P1391_GoogleMaps
Build Target: Android 2.3.3
Application name: GoogleMaps
Package name: ru.startandroid.develop.p1391googlemaps
Create Activity: MainActivity
Настройка проекта
Теперь еще немного возни с проектом.
Заходим в свойства проекта и добавляем (кнопкой Add) ссылку на ранее импортированный google-play-services_lib проект.
В манифесте необходимо добавить следующее в тег application:
Первые данные, это наш ключ из гугл-консоли. Здесь вам надо в android:value поставить ваше значение API key, которое вы чуть ранее получили и оставили открытым в браузере. Этот ключ нужен, чтобы карта работала.
Вторые данные – это версия Google Play services. Думаю, что эта инфа о версии нужна, чтобы карта четко понимала, как и что ей доступно из этих сервисов.
Также, в манифесте в тег manifest нам надо добавить следующие разрешения:
Это доступ в инет, проверка доступности инета, сохранение кэша карт и доступ к гугл-веб-сервисам.
Если думаете работать с определением местоположения, то не забывайте про:
И туда же, в тег manifest такое требование:
Гугл-карты используют OpenGL ES версии 2. На девайсах, которые это не поддерживают, карта просто не отобразится. Поэтому ставим ограничение.
Теперь все. Далее продолжаем работу, как с обычным проектом.
В strings.xml добавим строки:
Экран main.xml:
Кнопка и фрагмент-карта
MainActivity.java:
В onCreate мы находим наш фрагмент с картой и получаем от него объект GoogleMap методом getMap. Учитывайте, что этот метод может вернуть null.
Кстати, в onCreate можно также повесить проверку, что на устройстве доступно Google Play services. Для этого надо вызвать метод isGooglePlayServicesAvailable() и он должен вернуть SUCCESS. Подробности в хелпе.
Метод init пока пустой.
В onClickTest мы устанавливаем тип карты методом setMapType
Всего существует 5 типов:
MAP_TYPE_NONE – карта не будет отображаться
MAP_TYPE_NORMAL – обычный режим, в нем карта стартует по умолчанию.
MAP_TYPE_TERRAIN – карта рельефа местности
MAP_TYPE_HYBRID – снимки со спутника + инфа о улицах и транспорте
Получить текущий тип можно методом getMapType.
Я буду проводить все тесты на реальном устройстве, т.к. эмуляторы по умолчанию не поддерживают Google Play services. Но если очень надо, то можно и на эмуляторе запустить после некоторых манипуляций. Об этом написано, например, здесь. Надо скачать два APK-файла и установить их на эмулятор.
Карта
Все сохраняем, запускаем приложение и видим карту в обычном режиме.
У меня при первом запуске карта была не видна, но были видны кнопки управления масштабом. В логах был такой текст: Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors). В этом случае убедитесь, что все верно сделано с получением ключа. Если проблема остается, то удалите приложение с устройства, сделайте в Eclipse очистку проекта (меню Project > Clean) и снова установите приложение - мне помогло.
Теперь карта отображает снимки со спутника
Посмотрим, что еще можно сделать с картой.
В обычном режиме карта умеет показывать даже схему этажей здания, если очень приблизиться зумом к этому зданию.
Вот, например схема 0-го этажа аэропорта Барселоны. Справа видно переключатель этажей.
Мы можем отключить программно эту возможность методом setIndoorEnabled.
Метод setBuildingsEnabled управляет отображением 3D зданий.
Управление
Управление картой жестами и кнопками также поддается настройке. Для этого необходимо вызвать метод getUiSettings и мы получим объект настроек интерфейса UiSettings.
У него куча методов, которые что-либо включают/выключают:
setMyLocationButtonEnabled – кнопка текущего местоположения (необходимо включить определение, метод setMyLocationEnabled(true))
У этих методов есть аналоги, которые начинаются с is вместо set и позволяют получить текущие значения.
На карту можно вешать слушателей. Перепишем метод init:
setOnMapClickListener вешает слушателя OnMapClickListener. Его метод onMapClick сработает при клике на карту и вернет объект LatLng с координатами (latitude, longitude), где было нажатие.
setOnMapLongClickListener вешает слушателя OnMapLongClickListener. Его метод onMapLongClick сработает при длительном нажатии на карту и вернет объект LatLng с координатами (latitude, longitude), где было нажатие.
setOnCameraChangeListener вешает слушателя OnCameraChangeListener. Его метод onCameraChange сработает при смене позиции камеры, т.е. при пролистывании карты, и вернет объект CameraPosition, который содержит информацию о текущем положении камеры.
CameraPosition имеет атрибуты:
- target, тип LatLng с полями-координатами: latitude, longitude. Это точка, на которую смотрит камера.
- bearing, угол поворота камеры от севера по часовой
- tilt, угол наклона камеры
- zoom, текущий уровень зума
Все сохраним, запустим приложение. Попробуйте выполнять короткие и длинные нажатия, вращать карту, перемещать ее, менять угол наклона: в логах будет выводиться вся инфа по этим операциям.
Камера
Теперь рассмотрим возможности программного изменения положения камеры.
Для этого нам необходимо будет создавать объект CameraUpdate и передавать его в один из методов:
animateCamera(CameraUpdate update, GoogleMap.CancelableCallback callback) – плавное перемещение и возможность указать слушателя CancelableCallback, который оповестит, что перемещение завершено (метод onFinish), либо прервано (метод onCancel).
animateCamera(CameraUpdate update, int durationMs, GoogleMap.CancelableCallback callback) – плавное перемещение, слушатель CancelableCallback и возможность указать время длительности перемещения в миллисекундах
Остается узнать, как получить объект CameraUpdate, который будет содержать информацию о перемещении камеры. Для этого используется CameraUpdateFactory.
Пойдем по порядку методов в хелпе.
newCameraPosition (CameraPosition cameraPosition) – созданный объект CameraUpdate будет содержать данные по перемещению камеры в указанную позицию с указанными настройками.
Тут снова появляется объект CameraPosition, все параметры которого мы уже чуть ранее рассмотрели при разговоре о событии смены камеры и который содержит всю инфу о положении камеры
Чтобы создать CameraPosition, используем CameraPosition.Builder. Перепишем метод onClickTest:
Создаем CameraPosition, указываем координаты (-27,133), зум (5 уровень), поворот карты (45 градусов), угол наклона (20 градусов). И передаем полученный объект в метод newCameraPosition, получая CameraUpdate, который в свою очередь передаем в метод animateCamera.
Все сохраним, запустим, жмем Test и наблюдаем плавное перемещение к Австралии. В процессе перемещения меняется уровень зума, угол наклона и поворот камеры.
newLatLng (LatLng latLng) - перемещение камеры к указанной точке.
Тут все просто. Перепишем метод onClickTest:
По нажатию на Test камера переместится в указанную точку.
newLatLngBounds (LatLngBounds bounds, int padding) – камера покажет указанную область с учетом отступа
Перепишем метод onClickTest:
Для указания области используется объект LatLngBounds, который создается из двух точек LatLng. Эти две точки будут являться левой нижней (югозападной) и верхней правой (северовосточной) точками созданной области.
Параметр padding это отступ (в пикселах) от краев экрана. Т.е., если указать ненулевой padding, то камера покажет указанную область карты не в весь экран, а с учетом этого отступа.
По нажатию на Test камера покажет Австралию с отступом в 100 пикселов от краев экрана.
newLatLngBounds (LatLngBounds bounds, int width, int height, int padding) – аналогичен предыдущему, но можно указать размеры прямоугольника на экране, в который будет помещена показанная область и отступ будет действовать внутри этой области.
newLatLngZoom (LatLng latLng, float zoom) – переместит камеру в указанную точку с указанным уровнем зума
scrollBy (float xPixel, float yPixel) – перемещение камеры на указанное кол-во пикселов
zoomBy (float amount) – изменение текущего уровня зума на указанное кол-во (если положительное - то приближение, если отрицательное - удаление).
zoomBy (float amount, Point focus) – смена текущего зума на указанное кол-во уровней, и применение итогового уровня к указанной точке на экране
zoomIn/zoomOut – увеличение/уменьшение уровня зума на единицу
zoomTo (float zoom) – установка указанного уровня зума
Объект GoogleMap имеет метод setPadding. Он устанавливает отступы от краев экрана. Это влияет на положение стандартных элементов управления карты, а также камера теперь будет считать центром карты эту новую ограниченную область и позиционироваться там.
На следующем уроке:
- размещаем на карте свои объекты
- в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
- ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
- новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Чтобы встроить кастомизированную карту на сайт или в приложение, взять данные из Google Maps, нужен API карт. Получить его может любой пользователь, имеющий платежный аккаунт. Однако платить за API не обязательно. В статье разобрали, как получить ключ и в каких случаях гугл-картами можно пользоваться бесплатно.
1. Что такое Google Maps API
Google Maps API — это интерфейс, который позволяет разработчикам встраивать на сайт или в приложение карты Google, а также получать с них данные.
В зависимости от платформы варианты подключения отличаются. Например, есть Maps JavaScript API, Maps SDK для Android и iOS, Maps Static API, Maps Embed API. Полный список смотрите в документации по платформе Google Maps.
2. Сколько стоит Google Maps API
С 2018 года на платформе Google API Maps работает модель оплаты по мере использования.
Код (SKU) состоит из API продукта и названия вызываемого сервиса или функции. В продукте может быть несколько кодов, к которым применяются разные тарифы. Стоимость также меняется в зависимости от объема использования: от 0 до 100 000; от 100 001 до 500 000; 500 001 и более вызовов.
Сумма вычисляется по формуле объем использования для каждого кода цена за одно использование . При этом на все аккаунты ежемесячно начисляется кредит $200, который пользователь может тратить на API карт.
Чтобы система стала понятнее, посмотрим пару примеров API и SDK.
Допустим, вы хотите использовать объект карты в мобильном приложении. Подключаете Maps SDK для Android или iOS и не платите ничего, потому что цена за загрузку одной карты установлена в размере $0,00.
Под загрузкой карты документация подразумевает каждое создание экземпляра объекта карты в приложении. Если пользователь приложения увеличивает масштаб, переключается между слоями карты, то это не считается загрузкой. При этом включение панорамы, например, оплачивается как отдельный код Dynamic Street View. Это актуально для Maps JavaScript API, Maps SDK для Android и iOS.
Стоимость динамической панорамы:
Другой пример — использование Maps JavaScript API для отображения динамической карты. Здесь каждая загрузка при объемах до 100 000 стоит $0,007, затем — $0,0056. Если количество загрузок карты в месяц превысит 500 000, то ставка будет другой — ее также нужно уточнять в отделе продаж.
Остальные условия использования Maps JavaScript API не отличаются от условий использования SDK для Android и iOS. Когда пользователи масштабируют карту или переключаются между слоями, это не считается загрузкой, вы ничего не платите. Но создание панорамы оплачивается отдельно по расценкам, приведенным в таблице выше.
Это статическая карта Нью-Йорка, которая отображается на странице сайта как обычное изображение. При этом вы можете отметить на ней любые места.
Изображение из документации Maps Static API
Каждый запрос к Maps Static API стоит $0,002 при объемах до 100 000 запросов в месяц. Если запросов будет от 100 001 до 500 000, то вы заплатите $0,0016 за каждый. Объемы свыше 500 000 запросов оплачиваются отдельно.
Следить за количеством запросов можно на вкладке «Общая информация» в своей учетной записи на Google Maps Platform. На дашборде есть чарт «Оплата», в котором указано использование кредита и платное использование.
За самый простой вариант карт платить не надо. Вы можете встроить карты на свой сайт без данных о пробках и другой подробной информации без использования API, бесплатно и без ограничений. Выглядит это вот так:
Чтобы встроить карту на сайт:
- Откройте Google Maps.
- Постройте маршрут, найдите район, который хотите отобразить на карте.
- В левом верхнем углу экрана нажмите на значок с тремя горизонтальными линиями.
- Выберите пункт «Ссылка/Код».
- Перейдите на вкладку «Встраивание карт».
- Измените размеры карты, если есть такая необходимость.
- Скопируйте код из поля и вставьте его в шаблон страницы на своем сайте.
Такое встраивание гугл-карт встречается на сайтах часто — например, так магазины показывают свое местоположение на картах. Но функциональность таких эмбедов очень ограничена.
Расценки на все типы API и SDK есть на отдельной странице в документации платформы Google Maps.
3. Как получить API key Google Maps бесплатно
Все пользователи платформы Google Maps получают ежемесячный кредит в размере $200. Деньги начисляются каждый месяц на аккаунты с включенной оплатой. Пока ваши расходы на использование карт покрываются этим кредитом, вы ничего не платите. Если вы потратите больше $200, то за дальнейшее использование платформы до конца месяца придется доплатить.
Получить дополнительные бонусы можно также с помощью системы общедоступных программ. Они поддерживают некоммерческие организации, кризисные центры, стартапы, СМИ, образовательные учреждения. Подробное описание каждой программы и условия участия вы найдете в документации.
4. Получение API ключа для Google Maps: пошаговая инструкция
Для получения API ключа нужна учетная запись Google. Если у вас ее нет, то создайте, заполнив эту форму. В ней нужно указать имя, фамилию, юзернейм и пароль.
Если у вас есть учетная запись Google:
- Перейдите на платформу Google Maps. В правом верхнем углу нажмите на кнопку Get Started.
- Появится диалоговое окно. Выберите пункт Maps и нажмите Continue.
- Выберите проект. Если проекта нет, создайте его. Для этого достаточно придумать название.
- В правом нижнем углу всплывающего окна нажмите Enable Billing (Включить оплату). Получить API Карт могут только аккаунты с включенной оплатой.
- Если у вас нет платежного аккаунта, нужно его создать. Выберите страну, примите условия использования и нажмите Agree and continue.
- Введите данные банковской карты. Чтобы проверить ее, Google снимет и сразу вернет 1 доллар. После подтверждения платежного аккаунта на его счет будет зачислен ежемесячный кредит в размере $200.
- После создания платежного аккаунта появится окно с предложением включить API Google Maps Platform. Нажмите «Далее». Скопируйте ключ и сохраните его в надежном месте.
- Ключ также можно получить вручную. Для этого откройте Google Cloud Platform и в левом меню выберите пункт «API и сервисы». Перейдите в раздел «Библиотека».
- В библиотеке представлены все доступные варианты API. Выберите тот, который нужен вам.
- Затем перейдите в раздел «Учетные данные» и нажмите «Создать учетные данные».
- Выберите ключ API. Через несколько секунд платформа покажет сгенерированный ключ. Сохраните его в надежном месте.
Чтобы повысить уровень безопасности, нужно настроить защиту ключа. Для этого перейдите в раздел «Учетные данные» и нажмите на API ключ в списке.
Откроется новое окно. Здесь можно ограничить использование ключа одним сайтом или приложением. Это гарантирует, что никто не сможет украсть ваш ключ и вставить карты на другом ресурсе.
5. Есть ли альтернативы Google Maps
Своя картографическая платформа есть у «Яндекса». API Яндекс.Карт делится на три составляющие: адреса и организации, карты, сервисы для логистики. Основные возможности:
- Геокодер — для определения координат по адресу пользователя. Например, можно использовать для проверки возможности доставки.
- Поиск по организациям — отдает все организации по указанному запросу.
- Интерактивные карты для сайта и мобильного приложения (Android, iOS).
- Статические карты.
- Построение оптимального маршрута из нескольких точек.
- Матрица расстояний для расчета популярных маршрутов с учетом текущей дорожной ситуации и прогноза.
- Получение деталей и геометрии маршрута по набору точек.
У «Яндекса» есть бесплатный API. Но на него распространяется ряд ограничений:
- Полученные данные должны отображаться на карте с логотипом «Яндекса». Менять и сохранять их нельзя.
- Карта размещается только на сайтах или в приложениях с публичным доступом, без платной регистрации или получения пользователями дополнительных прав.
- API не используется для управления транспортом и сотрудниками.
- Количество запросов должно быть меньше суточного лимита.
Если проект не выполняет хотя бы одно условие, то не может пользоваться бесплатным API. Если вы превышаете лимит запросов в сутки, то карты отключаются до конца дня, а затем снова начинают работать. На платных тарифах подход иной. При превышении лимита запросы тарифицируются отдельно. Стоимость платных тарифов разных продуктов можно посмотреть в справке «Яндекс.Карт».
«Яндекс.Карты» можно также использовать без прямой работы с API. Для простого встраивания есть конструктор карт. Он позволяет добавить метки, линии, прямоугольники, настроить их внешний вид. Готовую карту можно разместить на сайте или в приложении, сохранить в высоком разрешении и распечатать.
Виджет — карта объекта с его подробным описанием в карточке.
Геоссылка — специальное выделение ссылки, при клике на которую открывается карта с указанным адресом.
Еще один популярный картографический сервис — «2ГИС». Он предлагает разработчикам:
- API карт;
- API справочника организаций;
- Геокодирование;
- Транспортное API;
Mobile SDK c 3D-картами, поиском и маршрутизацией для приложений на Android и iOS.
API карт 2ГИС состоят из трех частей. Первая — Mobile SDK. Это карты в векторном формате, в которых можно изменять наклон, включать, перелеты и анимацию, добавлять свои стили.
Вторая часть — MapGL JS API. Это библиотека для добавления трехмерной карты в веб-приложения и сайты. Еще есть Static API. Это третья часть, которая показывает статическую карту «2ГИС» на сайтах и в приложениях без использования JavaScript. Вы сами выбираете, какими инструментами пользоваться.
«2ГИС» предоставляет бесплатный доступ к API и SDK. Но есть ограничения. К сожалению, их списка нет в открытом доступе. Из условий понятно лишь, что речь идет о помощи образовательным и исследовательским проектам. Подробности же можно узнать только при личном обращении.
Условия коммерческого использования API и SDK «2ГИС» также не раскрываются публично. Указано лишь, что цена зависит от способа применения и количества запросов. Точную стоимость могут сказать только после личного обращения с описанием проекта.
Менее известные аналоги
Если не подходит «Яндекс» и «2ГИС», можно посмотреть в сторону таких сервисов, как OsmAnd, Mapbox, JawgMaps, Here, GraphHopper.
OsmAnd — это сервис, который работает на основе открытых данных, собранных на платформе OpenStreetMap. Карту редактируют члены сообщества, волонтеры и картографы-энтузиасты. С помощью API можно определять местоположение, измерять расстояния, делать различные наложения.
Открытые данные из проекта OpenStreetMap также использует сервис GraphHopper. Его инструменты помогают оптимизировать маршруты и навигацию. Есть бесплатный тариф, стоимость платных пакетов начинается от 48 евро в месяц.
Mapbox — альтернатива Google Maps, которая создана специально для решения проблем разработчиков. Платформа предлагает механизмы для использования навигации, в том числе в дополненной реальности, поиска и геокодирования. Есть бесплатные тарифы с ограничениями на количество загрузок.
Here — картографическая платформа, которая решает разные задачи бизнеса: управление автопарком, предоставление маршрутизации, анализ трафика в реальном времени. Есть навигация с дополненной реальностью, высокоточные карты. Можно использовать бесплатные тарифы с ограничениями.
6. Заключение
Google Maps API — популярное решение для разработки, которое позволяет встроить карту на сайт или в приложение. Для создания ключа требуется платный аккаунт, однако пользоваться API можно бесплатно, если укладываться в лимиты. Полностью бесплатный вариант — встраивание карты через эмбед.
Пошаговый процесс получения Google Maps API можно посмотреть в этом видео:
Highload нужны авторы технических текстов. Вы наш человек, если разбираетесь в разработке, знаете языки программирования и умеете просто писать о сложном!
Откликнуться на вакансию можно здесь .
Читайте также: