繁体   English   中英

从 android 和 iphone 上的默认起始位置的浏览器打开谷歌地图应用程序

[英]open google maps app from a browser with default start location on android and iphone

我有一个移动网站,我有一个链接,可以使用链接格式打开 iphone 和 android 上的谷歌地图本机应用程序,默认开始和结束位置: http://maps.google.com/maps?saddr=XX&daddr=二十

我的问题是,我希望能够将起始位置设置为当前位置,并且我希望它可以在 android 和 iphone 浏览器上工作。 根据我的经验,如果我将 saddr 留空,在 android 中,它默认为当前位置,但在 iphone 上它只是将起始位置留空。 如果我将saddr 设置为“当前位置”,这会将起始位置设置为iphone 上的当前位置,但在android 上它无法识别该位置。

我现在的解决方案是使用用户的地理纬度/经度坐标作为起始地址。 这在两个平台上都能成功运行,但取决于用于获取坐标的方法,它可能不如应用程序上 gps 的用户当前位置准确。 我想知道是否有某种方法可以获取链接以打开具有正确“当前位置”作为起点的本机应用程序。 我知道我也可以有条件地检查用户代理并相应地创建链接,但我希望有一种更优雅的方式来做到这一点。

我只需将以下字符串中的值替换为我的起始和目标 Lng/Lat

http://maps.google.com/maps?saddr=START_ADD&daddr=DEST_ADD&ll=START_ADD

然后我在 android 中像这样启动 url,这将让用户选择使用浏览器或他们的本机地图应用程序:

String url = "http://maps.google.com/maps?saddr=START_ADD&daddr=DEST_ADD&ll=START_ADD";

startActivity( new Intent(Intent.ACTION_VIEW).setData(Uri.parse(url)));  

对于 iOS,如果您在 url 前面加上 maps:// 而不是 http://,它将在手机上启动地图应用程序,该应用程序运行良好。 就像是

NSString *url = @"maps://maps.google.com/maps?saddr=START_ADD&daddr=DEST_ADD&ll=START_ADD";

[[UIApplication sharedApplication] openURL:[NSURL urlWithString:url]];

这就是我选择的处理方式。 在任一设备上使用各自的位置框架获取当前的 Lng/Lat 都非常容易。 结果对我来说似乎也总是很准确,您可以指定您想要结果的准确程度。 越准确,电池消耗越多,有时需要更长的时间才能获取,但这通常是您最终调整的内容,以获得最佳实施结果。

看看 url 处理程序 geo 告诉浏览器使用原生 App

<a href="geo:50.066274, 10.754427;">Location here!</a>

有一个可用的 polyfill 脚本,值得一试作为桌面浏览器的后备: https://github.com/prowestgis/dojo-geo-uri-polyfill

您也可以尝试 IOs 设备:

comgooglemaps://?parameters

或者:

comgooglemaps-x-callback://?parameters

https://developers.google.com/maps/documentation/urls/ios-urlscheme

我知道我也可以有条件地检查用户代理并相应地创建链接,但我希望有一种更优雅的方式来做到这一点。

最优雅的解决方案。 这两个平台差异太大,要使用两个平台的相同链接来执行此操作。 在等式中添加 Blackberry 或 Windows Phone,如果不检查用户代理,您将更难以实现相同的行为

在 Iphone 中,您可以通过以下方法使用CLLocationManagerDelegate获取当前位置。

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{

    CLLocationCoordinate2D location = newLocation.coordinate;
    Float x = location.latitude, y = location.longitude;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM