【问题标题】:How to open a mobile device's map app when a user clicks on a link?当用户点击链接时如何打开移动设备的地图应用程序?
【发布时间】:2012-03-30 02:58:24
【问题描述】:

我有一个网络应用程序,如果用户点击一个链接,它应该打开一个地图。我能想到的最佳解决方案是使用target="_blank" 属性为谷歌地图打开一个新标签/窗口。

但我认为最好打开设备的地图应用而不是谷歌地图。

我知道当用户点击带有指向tel:<the phone number> 的href 属性的电话号码时,您可以让用户的电话应用弹出。我想知道地图应用程序是否也可以这样做。

有没有办法让锚标签在用户点击时打开移动设备的地图应用?

【问题讨论】:

  • 可能重复的问题:stackoverflow.com/questions/4642481/… 或者如果不是,那么一些有用的信息
  • 现在是 2016 年,这个问题还有更好的答案吗?请让我知道自 2012 年以来情况是否发生了变化。

标签: html mobile


【解决方案1】:

您可以在链接中使用RFC 5870指定的GEO URI Scheme "geo:latitude,longitude",例如

<a href="geo:124.028582,-29.201930" target="_blank">Click here for map</a>

还有comgooglemaps:,它启动Google Maps app for iOS,例如:

comgooglemaps://?center=40.765819,-73.975866&zoom=14&views=traffic

在哪里

  • center:这是地图视口中心点。格式化为latitude,longitude 的逗号分隔字符串。
  • mapmode:设置显示的地图类型。可以设置为:standard 或streetview。如果未指定,将使用当前应用程序设置。
  • views:打开/关闭特定视图。可设置为:satellite、traffic 或 transit。可以使用逗号分隔符设置多个值。如果参数未指定值,则清除所有视图。
  • zoom:指定地图的缩放级别。

正如 techtheatre 所说,您可以使用常规 Apple Maps 链接来触发 Apple Maps:

//maps.apple.com/?q=Raleigh,NC

离开协议将自动选择要使用的正确协议,因此如果您想要一个动态链接,您可以创建一些条件代码,根据您使用的系统更改google.com 和apple.com 之间的链接继续。

【讨论】:

  • 很遗憾,Apple 设备(至少在 iOS 5.0.1 上)不支持此 url 结构。我认为解决方案需要检测用户代理并为每个设备提供适当的链接。
  • 我现在无法让其中任何一个工作。猜猜它们在 2014 年不再受支持。
【解决方案2】:

实际上...现在 Apple 拥有自己的地图应用程序,他们不再捕获 Google 地图链接并将其路由到地图应用程序(默认情况下...虽然这可以在设备上更改)。因此,您现在必须进行一些嗅探以确定设备是 Android 还是 Apple。如果您为正确的移动操作系统使用正确的链接,设备将捕获意图,而不是使用浏览器,而是进入地图应用程序。

如果是安卓,链接如下:

https://maps.google.com/?q=Houston,+TX

如果是苹果,链接如下:

http://maps.apple.com/?q=Houston,+TX

这当然是一件痛苦的事,希望 W3c 最终能够标准化地图触发器(例如 tel: 用于电话号码)。祝你好运!

【讨论】:

  • 很好的回应!很适合我。
  • 您也可以在google URL中添加“maps:”前缀,Android或iOS移动设备会打开原生地图应用(iOS地图、google maps或wathever),例如:maps:maps.google.com/… (在这种情况下,如果您不感兴趣,请使用答案中的链接)
【解决方案3】:

是的,数据类型等标签对我也不起作用。我使用了来自 Google 的直接链接(您可以选择“共享点”,它会提供指向该位置的直接 html)。

它将在浏览器中打开谷歌地图。

【讨论】:

    【解决方案4】:

    对我来说,最好的答案是标准化地图标签,例如“MAP:”。

    然后要使地址调用映射,请在其前面加上MAP:。

    所以要告诉朋友某物在哪里,请使用类似:Map: 123 any street PA 98234。

    然后,当点击地址时(对于电话,点击),将调用默认的地图应用程序。

    从评论中添加:

    这个想法是用于电子邮件和短信,但是如果你想要一个代码示例,这适用于 android:

    try
    {
        String uri = "geo:0,0?q=" + Address;
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        getApplicationContext().startActivity(intent);
    }
    catch (SecurityException es)
    {
        if (LOG) Log.e("Dbg", "Map failed", es);
    }
    catch (ActivityNotFoundException e)
    {
        if (LOG) Log.e("Dbg", "Map failed", e);
    }
    

    【讨论】:

    • 这个想法是用于电子邮件和短信,但是如果你想要一个代码示例,这适用于 android:try { String uri = "geo:0,0?q=" + Address;意图意图;意图=新意图(意图.ACTION_VIEW,Uri.parse(uri));意图.addFlags(意图.FLAG_ACTIVITY_NEW_TASK); getApplicationContext().startActivity(intent); } catch (SecurityException es) { if (LOG) Log.e("Dbg", "Map failed", es); } catch (ActivityNotFoundException e) { if (LOG) Log.e("Dbg", "Map failed", e); }
    【解决方案5】:

    这是我针对此问题的 jQuery 解决方案。我希望能够检测到要打开的正确地图。在 2019 年,微格式仍然不会自动为手机制作链接。

    我使用了这篇文章 https://medium.com/@colinlord/opening-native-map-apps-from-the-mobile-browser-afd66fbbb8a4 中的解决方案,但对其进行了修改以使其具有最新性和动态性。

    并且,修改了代码,以便在我的 html 中有一个地址块。该地址被剥离为基础并发送到相应的地图应用程序。

    HTML

    <span class="map-link">6555 Hollywood Blvd<br/>Hollywood, CA 90028</span>
    

    JavaScript

    $(document).on('click','.map-link',function() {
        var address = $(this).html();
        address = $('<div/>')
          .html(address)
          .text() // strip tags
          .replace(/\s\s+/g, " "); // remove spaces
        address = encodeURIComponent(address);
        if ((navigator.platform.indexOf('iPhone') != -1) || (navigator.platform.indexOf('iPad') != -1) || (navigator.platform.indexOf('iPod') != -1)){/* if we're on iOS, open in Apple Maps */
            window.open('http://maps.apple.com/?q=' + address);
        } else { /* else use Google */
            window.open('https://maps.google.com/maps?q=' + address);
        }
    });
    

    CSS

    .map-link { text-decoration: underline; text-decoration-style: dotted;cursor: pointer ;}
    .map-link:hover { text-decoration-style:solid;}
    

    【讨论】:

      【解决方案6】:

      不需要任何花哨的东西。您可以像这样简单地双重链接地址。

      <a href='https://maps.google.com/?q=addressgoeshere'>
        <a href='https://maps.apple.com/maps?q=addressgoeshere'>
          Address</a></a>
      

      在 Android 上,这将打开 Google 地图应用,在 iOS 上,这将打开 Apple 地图应用。 (未在 Windows 手机上测试)

      【讨论】:

      • 嵌套的锚元素不是有效的 HTML。
      • 这到底是怎么工作的?它打开正确的应用程序只是一个巨大的巧合吗?
      • 这是最好的答案!非常非常简单! (它只在 2021 年 7 月对我有用)......我认为它不是有效的 HTML 并不重要......我想补充一点:“addressgoeshere”的格式应该是这样的:@ 987654322@
      【解决方案7】:

      在 2020 使用这些子域:https://maps.app.goo.gl/pQAhDLJDNaYQJ9Np7

      您可以在分享地点时从您的地图应用获取它。

      适用于浏览器/Android/Iphone

      【讨论】:

      【解决方案8】:

      在这里参加一个旧聚会。但是,我在 2021 年仍在为此苦苦挣扎:D

      看来使用下面的链接

      http://maps.apple.com/?q=Houston,+TX
      

      在苹果设备上打开苹果地图,在非苹果设备上打开谷歌地图。谢谢苹果!

      【讨论】:

        【解决方案9】:

        这个简单的链接非常适合我

        <a href='https://www.google.com/maps/place/{{device?.gps_lat}},{{device?.gps_long}}' target="_blank">
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-09
          • 2017-04-29
          • 2020-03-31
          • 1970-01-01
          相关资源
          最近更新 更多