Открыть маршруты навигации Google Maps с координатами и адресом

Мы открываем навигацию Google Maps, мы используем координаты широты и долготы. Проблема в том, что адрес отображается неправильно, потому что он рассчитывается Google Maps на основе координат. Я не могу найти способ предоставить адрес, который у нас уже есть, наряду с координатами.

Координаты фактически основаны на самом поиске Google Maps, но когда координаты преобразуются обратно в адрес в Google Maps, отображается другой адрес.

Этот фрагмент кода исходит из приложения Flutter, но он все равно должен быть довольно понятным.

final intent = AndroidIntent(
  action: 'action_view',
  data:
      'google.navigation:q=${destination.latitude},${destination.longitude}&mode=d',
  package: 'com.google.android.apps.maps',
);

Пункт назначения:

{
    "lat": 35.6533691,
    "lng": 139.7694851,
    "address": "5-1 Toyomicho, Chuo City, Tokyo 104-0055, Japan",
    "name": "FamilyMart"
}

Документация Google Maps Intents для Android не предлагает никакой дополнительной помощи. В нем говорится, что вы можете предоставить либо адрес, либо координаты, и ни один из них не работает у нас правильно.

1
0
1 459
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

String strUri = "http://maps.google.com/maps?q=loc:" + latitude + "," + longitude + " (" + yourLocationName + ")";
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(strUri));
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);

Это не открывает направления навигации.

Guy Kogus 21.12.2020 15:17
Ответ принят как подходящий

Если я правильно помню, несколько лет назад можно было задать произвольное имя для локации. Сейчас это не работает, но имеет смысл: иначе пользователя можно ввести в заблуждение, показав ему какой-то адрес в полях ввода, и ориентироваться по совсем другим координатам. Вы правы: для случайного преобразования места широта/долгота в адрес и наоборот может привести к неправильному результату, но кажется, что для названных, широко известных мест, таких как «FamilyMart» (он отображается как POI «по умолчанию» на Google Maps) преобразование довольно точное . Попробуйте использовать «полный» адрес: не только значение адреса из строки "address": "5-1 Toyomicho, Chuo City, Tokyo 104-0055, Japan",, но и название места из строки "name": "FamilyMart", объединенное с ним. Что-то вроде того:

"FamilyMart, 5-1 Toyomicho, Chuo City, Tokyo 104-0055, Japan"

и попробуйте запустить режим навигации с помощью «классического» намерения следующим образом:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
                Uri.parse("google.navigation:mode=d&q = "+Uri.encode("FamilyMart, 5-1 Toyomicho, Chuo City, Tokyo 104-0055, Japan")));
startActivity(intent);

или

final intent = AndroidIntent(
  action: 'action_view',
  data:
      'google.navigation:q=${FULL_ADDRESS}&mode=d',
  package: 'com.google.android.apps.maps',
);

Если не получается, то либо ориентироваться по координатам (без красивой подписи к названию локации), либо писать свой фрагмент, по аналогии со стандартными Google Maps.

Кроме того, вы можете разрешить пользователю запускать Направления навигации вручную из приложения Google Maps, вызываемого намеренно:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
                Uri.parse("geo:35.6533691+139.7694851?z=19&q = "+Uri.encode("FamilyMart, 5-1 Toyomicho, Chuo City, Tokyo 104-0055, Japan")));
startActivity(intent);

Он устанавливает карту в центре "FamilyMart, 5-1 Toyomicho, Chuo City, Tokyo 104-0055, Japan", которая находится на карте, видимой на экране при уровне масштабирования 19, рядом с центром в (35.6533691,139.7694851) координатах широты и долготы.

Спасибо. Это не идеально, но я думаю, что это работает хорошо. Моя текущая логика будет заключаться в использовании имени и адреса, если у меня есть оба значения, в противном случае я использую координаты.

Guy Kogus 05.01.2021 14:36

@GuyKogus Добро пожаловать! Во всяком случае, кажется, что теперь с Intents нет других способов.

Andrii Omelchenko 05.01.2021 15:08

Другие вопросы по теме