Приложение Google Maps для Android предоставляет несколько намерений, которые вы можете использовать для запуска Google Maps в режимах отображения, поиска, навигации или просмотра улиц. Если вы хотите встроить карту в свое приложение, обратитесь к Руководству по началу работы с Google Maps Android API .
Обзор
Намерения позволяют вам начать действие в другом приложении, описав простое действие, которое вы хотите выполнить (например, «отобразить карту» или «показать направление к аэропорту») в объекте Intent
. Приложение Google Maps для Android поддерживает несколько различных намерений, что позволяет запускать приложение Google Maps и выполнять одно из четырех действий:
- Отображение карты в указанном месте и уровне масштабирования.
- Ищите местоположения или места и отображайте их на карте.
- Запросите направление из одного места в другое. Направления можно вернуть для трех видов транспорта: на машине, пешком, на велосипеде.
- Отображение панорамных изображений в Google Street View.
На этой странице описываются намерения, которые вы можете использовать с приложением Google Maps для Android. Дополнительные сведения о намерениях и фильтрах намерений или намерениях, общих для платформы Android , см. в документации для разработчиков Android.
Запросы намерений
Чтобы запустить Google Maps с намерением, вы должны сначала создать объект Intent
, указав его действие, URI и пакет.
- Действие : все намерения Google Maps вызываются как действие просмотра —
ACTION_VIEW
. - URI : намерения Google Maps используют закодированный URL-адрес , указывающий желаемое действие, а также некоторые данные для выполнения действия.
- Package : вызов
setPackage("com.google.android.apps.maps")
гарантирует, что приложение Google Maps для Android обрабатывает Intent. Если пакет не установлен, система определит, какие приложения могут обрабатыватьIntent
. Если доступно несколько приложений, пользователя могут спросить, какое приложение он хотел бы использовать.
После создания Intent
вы можете запросить у системы запуск соответствующего приложения несколькими способами. Обычный метод — передать Intent
методу startActivity()
. Система запустит необходимое приложение — в данном случае Google Maps — и запустит соответствующую Activity
.
Джава
// Create a Uri from an intent string. Use the result to create an Intent. Uri gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988"); // Create an Intent from gmmIntentUri. Set the action to ACTION_VIEW Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); // Make the Intent explicit by setting the Google Maps package mapIntent.setPackage("com.google.android.apps.maps"); // Attempt to start an activity that can handle the Intent startActivity(mapIntent);
Котлин
// Create a Uri from an intent string. Use the result to create an Intent. val gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988") // Create an Intent from gmmIntentUri. Set the action to ACTION_VIEW val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) // Make the Intent explicit by setting the Google Maps package mapIntent.setPackage("com.google.android.apps.maps") // Attempt to start an activity that can handle the Intent startActivity(mapIntent)
Если система не может определить приложение, которое может ответить на намерение, ваше приложение может аварийно завершить работу. По этой причине вы должны сначала убедиться, что принимающее приложение установлено, прежде чем представлять одно из этих намерений пользователю.
Чтобы убедиться, что приложение доступно для получения намерения, вызовите resolveActivity()
в объекте Intent
. Если результат не нулевой, существует по крайней мере одно приложение, которое может обработать намерение, и можно безопасно вызывать startActivity()
. Если результат равен null
, вы не должны использовать намерение и, если возможно, вы должны отключить функцию, которая вызывает намерение.
Джава
if (mapIntent.resolveActivity(getPackageManager()) != null) { ... }
Котлин
mapIntent.resolveActivity(packageManager)?.let { ... }
Например, чтобы отобразить карту Сан-Франциско, вы можете использовать следующий код:
Джава
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); if (mapIntent.resolveActivity(getPackageManager()) != null) { startActivity(mapIntent); }
Котлин
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") mapIntent.resolveActivity(packageManager)?.let { startActivity(mapIntent) }
Строки запроса в кодировке URL
Все строки, передаваемые в Google Maps Intent, должны иметь кодировку URI. Например, строка «1st & Pike, Seattle» должна стать 1st%20%26%20Pike%2C%20Seattle
. Пробелы в строке можно закодировать с помощью %20 или заменить знаком плюс (+).
Вы можете использовать метод android.net.Uri
parse()
для кодирования ваших строк. Например:
Джава
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4192?q=" + Uri.encode("1st & Pike, Seattle"));
Котлин
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4192?q=" + Uri.encode("1st & Pike, Seattle"))
Отображение карты
Используйте geo:
намерение для отображения карты в указанном месте и уровне масштабирования.
geo:latitude,longitude?z=zoom
Параметры
-
latitude
иlongitude
задают центральную точку карты. -
z
дополнительно устанавливает начальный уровень масштабирования карты. Допустимые значения варьируются от 0 (весь мир) до 21 (отдельные здания). Верхний предел может варьироваться в зависимости от картографических данных, доступных в выбранном местоположении.
Примеры
Джава
// Creates an Intent that will load a map of San Francisco Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Котлин
// Creates an Intent that will load a map of San Francisco val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Поиск местоположения
Используйте это намерение для отображения поисковых запросов в пределах указанного окна просмотра. Когда запрос имеет один результат, вы можете использовать это намерение, чтобы отобразить булавку в определенном месте или адресе, таком как ориентир, предприятие, географический объект или город.
geo:latitude,longitude?q=query geo:0,0?q=my+street+address geo:0,0?q=latitude,longitude(label)
Параметры
Помимо параметров, используемых для отображения карты, Поиск поддерживает следующие параметры:
q
определяет места, которые нужно выделить на карте. Параметрq
обязателен для всех поисковых запросов. Он принимает местоположение как название места или адрес. Строка должна быть закодирована в URL , поэтому такой адрес, как "City Hall, New York, NY", должен быть преобразован в City+Hall,New+York,NY.label
позволяет установить пользовательскую метку в месте, указанном на карте.label
должна быть указана как строка.
Категориальный поиск
Если вы укажете общий поисковый запрос, Google Maps попытается найти место рядом с указанными вами широтой/долготой, которое соответствует вашим критериям. Если местоположение не указано, Google Maps попытается найти близлежащие списки. Например:
Джава
// Search for restaurants nearby Uri gmmIntentUri = Uri.parse("geo:0,0?q=restaurants"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent); // Search for restaurants in San Francisco Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=restaurants"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Котлин
// Search for restaurants nearby val gmmIntentUri = Uri.parse("geo:0,0?q=restaurants") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent) // Search for restaurants in San Francisco val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=restaurants") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Вы можете дополнительно сместить результаты поиска, указав параметр масштабирования вместе со строкой запроса. В приведенном ниже примере добавление масштаба 10 будет пытаться найти рестораны на уровне города, а не поблизости.
Джава
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?z=10&q=restaurants"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Котлин
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?z=10&q=restaurants") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Поиск местоположения
При поиске определенного адреса будет отображаться булавка в этом месте.
Джава
Uri gmmIntentUri = Uri.parse("geo:0,0?q=1600 Amphitheatre Parkway, Mountain+View, California"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Котлин
val gmmIntentUri = Uri.parse("geo:0,0?q=1600 Amphitheatre Parkway, Mountain+View, California") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
В приведенном выше примере широта/долгота задаются равными 0
, 0
, но адрес передается в виде строки запроса. При поиске очень конкретного местоположения широта и долгота не требуются. Однако, если вы не знаете точного адреса, вы можете попытаться исказить результаты поиска, указав координату. Например, поиск по адресу «Главная улица» даст слишком много результатов.
Джава
// Searching for 'Main Street' will return too many results Uri gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street");
Котлин
// Searching for 'Main Street' will return too many results val gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street")
Добавление широты/долготы к URI намерения приведет к смещению результатов в сторону определенной области:
Джава
// Searches for 'Main Street' near San Francisco Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=101+main+street"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Котлин
// Searches for 'Main Street' near San Francisco val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=101+main+street") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Когда вы знаете, что ваш поиск вернет одно значение, вы можете передать необязательную метку. Метки должны быть указаны как строка и будут отображаться под маркером карты. Обратите внимание, что метки доступны только в том случае, если q
указано как координата широта/долгота.
Джава
// Display a label at the location of Google's Sydney office Uri gmmIntentUri = Uri.parse("geo:0,0?q=Google+Sydney@-33.8666,151.1957"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Котлин
// Display a label at the location of Google's Sydney office val gmmIntentUri = Uri.parse("geo:0,0?q=-33.8666,151.1957(Google+Sydney)") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
В качестве альтернативы почтовому адресу или широте/долготе вы можете отобразить булавку в известном месте с помощью кода плюса .
Джава
// Display the location of Google, San Francisco using a global plus code. Uri gmmIntentUri = Uri.parse("http://plus.codes/849VQJQ5+XX"); // Equivalently, define the same location using a local plus code gmmIntentUri = Uri.parse("https://plus.codes/QJQ5+XX,San%20Francisco"); // Construct and use the Intent as in the examples above
Котлин
// Display the location of Google, San Francisco using a global plus code. var gmmIntentUri = Uri.parse("http://plus.codes/849VQJQ5+XX") // Equivalently, define the same location using a local plus code gmmIntentUri = Uri.parse("https://plus.codes/QJQ5+XX,San%20Francisco") // Construct and use the Intent as in the examples above
Запускаем пошаговую навигацию
Используйте это намерение, чтобы запустить навигацию Google Maps с пошаговыми инструкциями по указанному адресу или координате. Направления всегда даются от текущего местоположения пользователя.
google.navigation:q=a+street+address google.navigation:q=latitude,longitude
Параметры
q
: устанавливает конечную точку для навигационного поиска. Это значение может быть широтой, координатами долготы или адресом в формате запроса. Если это строка запроса, которая возвращает более одного результата, будет выбран первый результат.mode
устанавливает метод транспортировки. Режим является необязательным и может быть установлен на один из:-
d
для вождения (по умолчанию) -
b
для езды на велосипеде -
l
для двухколесного транспорта -
w
для прогулок
-
avoid
задает функции, которых маршрут должен стараться избегать. Избегать необязательно и может быть установлено одно или несколько из следующих значений:-
t
для дорожных сборов -
h
для шоссе -
f
для паромов
-
Примеры
В приведенном ниже Intent
будет запрашиваться пошаговая навигация к зоопарку Таронга в Сиднее, Австралия:
Джава
Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Котлин
val gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Если вы предпочитаете не платить за проезд или ездить на пароме, вы можете запросить маршрут, который пытается избежать этих вещей.
Джава
Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Котлин
val gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Если вы предпочитаете немного потренироваться, вместо этого вы можете запросить велосипедные маршруты.
Джава
Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&mode=b"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Котлин
val gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&mode=b") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Если вы предпочитаете моторизованный двухколесный транспорт, вы можете запросить, чтобы в маршруте были указаны узкие дороги и тропы, недоступные для автомобилей. Приведенное ниже intent
возвращает маршрут в Индии.
Джава
Uri gmmIntentUri = Uri.parse("google.navigation:q=Connaught+Place,+New+Delhi,Delhi&mode=l"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Котлин
val gmmIntentUri = Uri.parse("google.navigation:q=Connaught+Place,+New+Delhi,Delhi&mode=l") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Отображение панорамы просмотра улиц
Используйте намерение google.streetview
для запуска Google Street View. Google Street View обеспечивает панорамный вид из определенных мест по всей зоне покрытия . Пользовательские фотосферы и специальные коллекции Просмотра улиц также доступны.
google.streetview:cbll=latitude,longitude&cbp=0,bearing,0,zoom,tilt google.streetview:panoid=id&cbp=0,bearing,0,zoom,tilt
Параметры
Все URI google.streetview
должны включать параметр cbll
или panoid
.
cbll
принимает широту и долготу как значения, разделенные запятыми (46.414382,10.013988
). Приложение отобразит панораму, сфотографированную ближе всего к этому месту. Поскольку изображения в Просмотре улиц периодически обновляются, а фотографии могут каждый раз делаться с немного разных позиций, возможно, что ваше местоположение может быть привязано к другой панораме при обновлении изображений.panoid
— это идентификатор конкретной панорамы. Карты Google будут использовать идентификатор панорамы, если указаны иpanoid
, иcbll
. Идентификаторы панорамы доступны приложению Android из объектаStreetViewPanoramaLocation
.cbp
— необязательный параметр, который регулирует начальную ориентацию камеры. Параметрcbp
принимает 5 значений, разделенных запятыми, и все они являются необязательными. Наиболее важными значениями являются второе, четвертое и пятое, которые задают азимут, масштабирование и наклон соответственно. Первое и третье значения не поддерживаются и должны быть установлены на0
.-
bearing
: указывает направление камеры по компасу в градусах по часовой стрелке от севера. Истинный север равен 0, восток равен 90, юг равен 180, запад равен 270. Значения, переданные в пеленг, будут перенесены; то есть 0°, 360° и 720° указывают в одном направлении. Подшипник определяется как второе из пяти значений, разделенных запятыми. -
zoom
: Устанавливает уровень масштабирования камеры. Уровень масштабирования по умолчанию установлен на 0. Масштаб, равный 1, удваивает увеличение. Масштаб фиксируется между 0 и максимальным уровнем масштабирования для текущей панорамы. Это означает, что любое значение, выходящее за пределы этого диапазона, будет установлено на ближайшее предельное значение, попадающее в этот диапазон. Например, значение -1 будет равно 0. Масштаб — это четвертое из пяти значений, разделенных запятыми. -
tilt
: указывает угол, вверх или вниз, камеры. Диапазон составляет от -90 до 0 и 90, где 90 смотрит прямо вниз, 0 по центру горизонта и -90 смотрит прямо вверх.
-
Примеры
Ниже приведены несколько примеров использования намерения Просмотра улиц.
Джава
// Displays an image of the Swiss Alps Uri gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent); // Uses a PanoID to show an image from Maroubra beach in Sydney, Australia Uri gmmIntentUri = Uri.parse("google.streetview:panoid=Iaa2JyfIggYAAAQfCZU9KQ"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent); // Opens Street View between two Pyramids in Giza. The values passed to the // cbp parameter will angle the camera slightly up, and towards the east. Uri gmmIntentUri = Uri.parse("google.streetview:cbll=29.9774614,31.1329645&cbp=0,30,0,0,-15"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Котлин
// Displays an image of the Swiss Alps val gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent) // Uses a PanoID to show an image from Maroubra beach in Sydney, Australia val gmmIntentUri = Uri.parse("google.streetview:panoid=Iaa2JyfIggYAAAQfCZU9KQ") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent) // Opens Street View between two Pyramids in Giza. The values passed to the // cbp parameter will angle the camera slightly up, and towards the east. val gmmIntentUri = Uri.parse("google.streetview:cbll=29.9774614,31.1329645&cbp=0,30,0,0,-15") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)