我宁愿认为这不会那么难以找到,但是看起来很难找到一个很棒的跨设备文章,就像你期望的那样。
我想创建一个链接,打开移动设备的浏览器并浏览谷歌地图或打开地图应用程序(Apple地图或谷歌地图)并直接启动路线,即:从当前位置开始,在给定点结束(纬度/经度)。
我可以测试两个设备(在browserstack旁边),Android和iPhone。
以下链接仅适用于Android:
<a href="http://maps.google.com/maps?daddr=lat,long&ll=">Take me there!</a>
点击iPhone Chrome浏览器中的此链接,奇怪地在桌面版中打开谷歌地图,并在移动应用上播放广告...
这只适用于iOS,打开Apple Maps,要求我输入一个起始位置(我可以选择“当前位置”)并启动route =所需行为。在Android上单击此链接完全失败:
<a href="maps://maps.google.com/maps?daddr=lat,long&ll=">Take me there!</a>
注意maps:// protocol。
是否有一种优雅的交叉设备方式来创建这样的链接?一个适用于所有主流手机的链接?
谢谢
更新:找到解决方案(有点)
这就是我想出来的。这不是我想象的,尽管它正在发挥作用。
var ua = navigator.userAgent.toLowerCase(),
plat = navigator.platform,
protocol = '',
a,
href;
$.browser.device = ua.match(/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera/i) ? ua.match(/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera/i)[0] : false;
if ($.browser.device) {
switch($.browser.device) {
case 'iphone':
case 'ipad':
case 'ipod':
function iOSversion() {
if (/iP(hone|od|ad)/.test(navigator.platform)) {
// supports iOS 2.0 and later: <http://bit. ly/TJjs1V>
var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
}
}
var ver = iOSversion() || [0];
if (ver[0] >= 6) {
protocol = 'maps://';
}
else {
protocol = 'http://maps.google.com/maps';
}
break;
case 'android':
default:
protocol = 'http://maps.google.com/maps';
break;
}
a.attr('href', protocol + href)
maps://
协议是苹果地图应用程序的网址方案,它只能在ios 6或更高版本上开始工作。有办法测试是否安装了gmaps,然后选择了如何处理url,但这对我的意图来说太多了。所以我最后使用上述参数创建了地图:// OR maps.google.com/ link。
**更新**
遗憾的是,$ .browser.device自jquery 1.9起不起作用(来源 - http://api.jquery.com/jquery.browser)
嗯,我没有多少手机,所以我不知道如果这可行,但只是从html / javascript的角度来看,你可以根据用户的设备打开一个不同的网址吗?
<a style="cursor: pointer;" onclick="myNavFunc()">Take me there!</a>
function myNavFunc(){
// If it's an iPhone..
if( (navigator.platform.indexOf("iPhone") != -1)
|| (navigator.platform.indexOf("iPod") != -1)
|| (navigator.platform.indexOf("iPad") != -1))
window.open("maps://maps.google.com/maps?daddr=lat,long&ll=");
else
window.open("http://maps.google.com/maps?daddr=lat,long&ll=");
}
我发现这是全面的:
<a href="https://www.google.com/maps/place/1+Fake+Street,+City+Province/State>Get Directions</a>
对于台式机/笔记本电脑,用户必须在加载地图时点击“方向”,但从我的测试开始,所有移动设备都会毫不费力地在Google地图应用中加载该链接。
有趣的是,http://maps.apple.com
链接将直接在iOS设备上的Apple Maps中打开,或者以其他方式重定向到Google Maps(然后在Android设备上截获),因此您可以制作一个谨慎的URL,在这两种情况下使用“Apple Maps”网址如下:
http://maps.apple.com/?daddr=1600+Amphitheatre+Pkwy,+Mountain+View+CA
或者,您可以直接使用Google地图网址(不使用/maps
网址组件)在Android设备上直接在Google地图中打开,也可以在iOS设备上的Google地图移动网络中打开:
http://maps.google.com/?daddr=1+Infinite+Loop,+Cupertino+CA
刚刚碰到这个问题,在这里找到所有的答案,我采取了上面的一些代码,并制作了简单的js功能,适用于Android和iPhone(它几乎支持所有Android和iphone)。
function navigate(lat, lng) {
// If it's an iPhone..
if ((navigator.platform.indexOf("iPhone") !== -1) || (navigator.platform.indexOf("iPod") !== -1)) {
function iOSversion() {
if (/iP(hone|od|ad)/.test(navigator.platform)) {
// supports iOS 2.0 and later
var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
}
}
var ver = iOSversion() || [0];
var protocol = 'http://';
if (ver[0] >= 6) {
protocol = 'maps://';
}
window.location = protocol + 'maps.apple.com/maps?daddr=' + lat + ',' + lng + '&ll=';
}
else {
window.open('http://maps.google.com?daddr=' + lat + ',' + lng + '&ll=');
}
}
html:
<a onclick="navigate(31.046051,34.85161199999993)" >Israel</a>
这适用于所有设备[iOS,Android和Window Mobile 8.1]。
看起来不是最好的方式......但不能更简单:)
<a href="bingmaps:?cp=18.551464~73.951399">
<a href="http://maps.apple.com/maps?q=18.551464, 73.951399">
Open Maps
</a>
</a>
if (navigator.geolocation) { //Checks if browser supports geolocation
navigator.geolocation.getCurrentPosition(function (position) {
var latitude = position.coords.latitude; //users current
var longitude = position.coords.longitude; //location
var coords = new google.maps.LatLng(latitude, longitude); //Creates variable for map coordinates
var directionsService = new google.maps.DirectionsService();
var directionsDisplay = new google.maps.DirectionsRenderer();
var mapOptions = //Sets map options
{
zoom: 15, //Sets zoom level (0-21)
center: coords, //zoom in on users location
mapTypeControl: true, //allows you to select map type eg. map or satellite
navigationControlOptions:
{
style: google.maps.NavigationControlStyle.SMALL //sets map controls size eg. zoom
},
mapTypeId: google.maps.MapTypeId.ROADMAP //sets type of map Options:ROADMAP, SATELLITE, HYBRID, TERRIAN
};
map = new google.maps.Map( /*creates Map variable*/ document.getElementById("map"), mapOptions /*Creates a new map using the passed optional parameters in the mapOptions parameter.*/);
directionsDisplay.setMap(map);
directionsDisplay.setPanel(document.getElementById('panel'));
var request = {
origin: coords,
destination: 'BT42 1FL',
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function (response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
}
});
});
}
不,从iOS开发人员的角度来看,我知道有两个链接会打开iPhone上的地图应用程序
在iOS 5及更低版本:http://maps.apple.com?q=xxxx
在iOS 6及以上版本:http://maps.google.com?q=xxxx
这只是在Safari上。 Chrome会引导您访问Google地图网页。
除此之外,你需要使用一个基本上胜过目的的URL方案,因为没有android会知道该协议。
您可能想知道,为什么Safari会打开地图应用,Chrome会将我引导到网页?
好吧,因为safari是由apple制作的浏览器内置,可以检测上面的URL。 Chrome是“另一个应用”,必须符合iOS生态系统。因此,它与其他应用程序通信的唯一方法是使用URL方案。
基于documentation,origin
参数是可选的,它默认为用户的位置。
... Defaults to most relevant starting location, such as user location, if available. If none, the resulting map may provide a blank form to allow a user to enter the origin....
例如:https://www.google.com/maps/dir/?api=1&destination=Pike+Place+Market+Seattle+WA&travelmode=bicycling
对我来说,这适用于桌面,IOS和Android。
无论使用何种平台,URL语法都是相同的
String url = "https://www.google.com/maps/search/?api=1&query=" + latitude + ","+
longitude;
在Android或iOS中,URL在地图应用中启动Google地图,如果未安装Google地图应用,则URL会在浏览器中启动Google地图并执行请求的操作。
在任何其他设备上,URL都会在浏览器中启动Google地图并执行请求的操作。
这里是官方文档https://developers.google.com/maps/documentation/urls/guide的链接
简单的网址:
https://www.google.com/maps/dir/?api=1&destination=lat,lng
此网址专门用于路由。
参考:https://developers.google.com/maps/documentation/urls/guide#directions-action