【问题标题】:Open Google Maps navigation directions with both coordinates and address使用坐标和地址打开谷歌地图导航方向
【发布时间】:2021-03-31 03:30:30
【问题描述】:

我们打开谷歌地图导航,我们使用纬度/经度坐标。问题是地址显示不正确,因为它是由谷歌地图根据坐标计算的。我找不到任何方法来提供我们已经拥有的地址以及坐标。

坐标实际上是基于 Google 地图搜索本身,但是当坐标转换回 Google 地图中的地址时,会显示不同的地址。

这段代码 sn-p 来自 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 for Android 文档不提供任何额外帮助。它说您只能提供地址或坐标,而这两者都不能真正为我们正常工作。

【问题讨论】:

    标签: android google-maps


    【解决方案1】:

    如果几年前我没记错的话,可以为该位置设置一个随机名称。它现在不起作用,但它是有道理的:否则,用户可能会通过在输入字段中显示一些地址而被误导,并通过完全不同的坐标导航。你是对的:对于随机地点转换 lat/lng 到地址,反之亦然会导致错误的结果,但似乎对于命名的、广为人知的地点,如“FamilyMart”(它在谷歌地图上显示为“默认”POI)转换非常准确.尝试使用“完整”地址:不仅是"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 地图。

    此外,您可以允许用户从意图调用的 Google 地图应用程序手动启动导航方向:

    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) lat/lng 坐标附近。

    【讨论】:

    • 谢谢。它并不完美,但我认为它运作良好。如果我有两个值,我当前的逻辑是使用名称和地址,否则我使用坐标。
    • @GuyKogus 不客气!无论如何,现在似乎没有其他方法可以使用 Intents。
    【解决方案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);
    

    【讨论】:

    • 这不会打开导航路线。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2018-05-09
    • 1970-01-01
    • 2021-03-25
    相关资源
    最近更新 更多