我有一个移动网站,我有一个链接,可以使用链接格式在iphone和Android上打开谷歌地图本机应用程序,使用默认的开始和结束位置:http://maps.google.com/maps?saddr=XX&daddr=XX。
我的问题是,我希望能够将起始位置设置为当前位置,并且我希望它能够在Android和iphone浏览器中运行。根据我的经验,如果我将saddr留空,在android中默认为当前位置但在iphone上它只是将起始位置留空。如果我将saddr设置为“当前位置”,则将起始位置设置为iphone上的当前位置,但是在android上它无法识别位置。
我现在的解决方案是使用用户的geo lat / long坐标作为起始地址。这在两个平台上都能成功运行,但取决于用于获取坐标的方法,它可能不如用户在应用程序上的gps中的当前位置那样准确。我想知道是否有某种方法可以获得链接以打开原始应用程序并使用正确的“当前位置”作为起点。我知道我还可以有条件地检查用户代理并相应地创建链接,但我希望有更优雅的方式来做到这一点。
答案 0 :(得分:13)
我只需将以下字符串中的值替换为我的开始和目标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,如果您使用maps://而不是http://为url添加前缀,它将在手机上启动地图应用程序,该应用程序非常有效。像
这样的东西NSString *url = @"maps://maps.google.com/maps?saddr=START_ADD&daddr=DEST_ADD&ll=START_ADD";
[[UIApplication sharedApplication] openURL:[NSURL urlWithString:url]];
这就是我选择处理它的方式。在任一设备上都很容易使用各自的位置框架来获取当前的Lng / Lat。结果对我来说似乎也很准确,你可以指定你想要的结果准确度。更准确,电池消耗更多,有时需要更长时间才能获得,但这通常是您最终调整的结果,以便为您的实施获得最佳结果。
答案 1 :(得分:6)
查看url处理程序geo,告诉Browser使用本机App
<a href="geo:50.066274, 10.754427;">Location here!</a>
不要忘记桌面浏览器的后备支持
答案 2 :(得分:5)
我知道我还可以有条件地检查用户代理并相应地创建链接,但我希望会有更多 优雅的方式来做到这一点。
IS 是最优雅的解决方案。这两个平台的区别不同,两个平台的链接相同。在等式中添加Blackberry或Windows Phone,如果不检查用户代理,您将在实现相同行为方面遇到更多困难
答案 3 :(得分:1)
在Iphone中,您可以使用以下方法中的 CLLocationManagerDelegate 获取当前位置。
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
CLLocationCoordinate2D location = newLocation.coordinate;
Float x = location.latitude, y = location.longitude;
}