IOS 跳转导航地图

//手机自带地图

    //当前位置

    MKMapItem *mylocation = [MKMapItem mapItemForCurrentLocation];

    

    //前面填写纬度

    CLLocationCoordinate2D coords2 = CLLocationCoordinate2DMake(cell.model.coordinate.latitude, cell.model.coordinate.longitude);

    //目的地的位置

    MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:coords2 addressDictionary:nil]];

    

    toLocation.name =cell.model.title;

    

    NSArray *items = [NSArray arrayWithObjects:mylocation, toLocation, nil];

    NSDictionary *options = @{ MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving, MKLaunchOptionsMapTypeKey: [NSNumber numberWithInteger:MKMapTypeStandard], MKLaunchOptionsShowsTrafficKey:@YES };

    //打开苹果自身地图应用,并呈现特定的item

    [MKMapItem openMapsWithItems:items launchOptions:options];

    




//百度地图

    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {

        NSString *urlString = [[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=gcj02",cell.model.coordinate.latitude,cell.model.coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];

        

    }else{

        [HUDProgress showInView:self.navigationController.view withTitle:@"未安装百度地图,请前往AppStore安装" type:HUDProgressTypeError];

    }

 

    

    



 //高德地图

    NSString *urlString = [[NSString stringWithFormat:@"iosamap://navi?sourceApplication=%@&backScheme=%@&lat=%f&lon=%f&dev=0&style=2",cell.model.title,@"baidumap",cell.model.coordinate.latitude, cell.model.coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];

    


### 如何在 UniApp 中实现调用地图应用进行导航 #### 支持多平台的地图导航功能 为了实现在不同平台上(如 Android、iOS 应用程序以及微信小程序)调用本地安装的地图应用程序或内置地图服务来执行导航操作,在 UniApp 开发框架内提供了多种方式。 对于 **Android 和 iOS 平台的应用**: 当开发针对移动设备的应用时,可以通过检测用户终端上已经存在的第三方导航工具,并允许用户从中挑选用于启动导航的服务提供商。一旦选择了特定的地图服务商之后,则会把设定的目的地作为结束点传递给所选的应用来进行路径规划[^1]。 ```javascript // 检测并打开已安装的地图应用 function openMapApplication(destination) { const platform = uni.getSystemInfoSync().platform; if (platform === 'android') { // 对于安卓系统尝试通过intent协议唤起相应应用 let intentUrl = `geo:0,0?q=${encodeURIComponent(destination.address)}(${destination.name})`; plus.runtime.openURL(intentUrl); } else if (platform === 'ios') { // 苹果系统的处理逻辑 let mapScheme = ''; switch (selectedMapProvider.toLowerCase()) { // selectedMapProvider 是用户选择的地图供应商名称 case "baidu": mapScheme = `baidumap://map/marker?location=${destination.latitude},${destination.longitude}&title=${encodeURIComponent(destination.name)}`; break; case "gaode": mapScheme = `iosamap://navi?sourceApplication=yourAppName&lat=${destination.latitude}&lon=${destination.longitude}&dev=0&t=0`; break; default: console.error('不支持该地图提供者'); } try { plus.runtime.openURL(mapScheme); } catch(e){ alert(`未能找到${selectedMapProvider}地图`); } } } ``` 而对于 **微信小程序环境下的解决方案**, 可以直接利用微信自带的小程序组件`wx.chooseLocation()`获取地理位置信息后,再使用`wx.openLocation()`函数开启默认的地图查看器完成导航任务。 ```javascript // 微信小程序中的位置选取与导航 async function navigateInWeChatMiniProgram() { wx.getLocation({ type: 'gcj02', // 返回可以用于开放接口的位置坐标 success(res) { var latitude = res.latitude; var longitude = res.longitude; wx.chooseLocation({ // 用户可以选择目的地 success(locationRes) { wx.openLocation({ // 打开地图导航至选定地点 latitude: locationRes.latitude, longitude: locationRes.longitude, name: locationRes.name, address: locationRes.address }); }, fail(err) { console.log("chooseLocation failed", err); } }) }, fail(err) { console.log("getLocation failed", err); } }); } ``` 最后,在 **H5 页面场景下** 的处理方案则是基于浏览器特性去决定是直接链接到在线地图网站还是尝试激活用户的移动端原生地图客户端[^3]。 ```html <!-- HTML 部分 --> <button id="navigateButton">前往</button> <script> document.getElementById('navigateButton').addEventListener('click', () => guide()); function guide(){ navigator.geolocation.getCurrentPosition(position=>{ window.location.href=`https://${isMobile()? 'maps.' : ''}(chosenMapService).com/?q=${targetAddress}`; /* chosenMapService 变量应被设置为目标地图服务平台域名部分 */ },error=>console.warn(error)); } /* 判断当前访问环境是否来自移动设备 */ function isMobile(){return /Mobi/i.test(navigator.userAgent);} </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值