App内跳转到百度、高德第三方地图导航

项目里遇到根据经纬度跳转第三方导航的需求,在网上找了一下,发现都是千篇一律的文章,而且不能正确显示目的地地址,无果后去百度和高德地图官网查找,位置十分隐蔽,给大家分享下

一、 调起高德地图APP

调起高德地图APP有两种方法:

  • 一种是通过访问web的URI地址来实现,这样写的效果是,APP会跳转浏览器 访问H5页面的高德地图,如果设置 callnative参数为1时,浏览器会询问你是否需要打开高德地图app

    https://uri.amap.com/navigation?from=116.478346,39.997361,startpoint&to=116.3246,39.966577,endpoint&via=116.402796,39.936915,midwaypoint&mode=car&policy=1&src=mypage&coordinate=gaode&callnative=0
    

    WEB-URI方式跳转官方文档

  • 另外一种就是通常使用到的直接跳转方法,直接通过高德APP的URL_TYPE来实现,这种方法需要根据出发点的经纬库及目的地的经纬度,而且可以设置目的地的地址,如果目的地地址为空,地图上会显示未地图上的点

    //访问地址示例(直接发起导航)
    iosamap://navi?sourceApplication=applicationName&poiname=fangheng&poiid=BGVIS&lat=36.547901&lon=104.258354&dev=1&style=2
    
    //访问地址示例(路线规划)
    iosamap://path?sourceApplication=applicationName&sid=&slat=39.92848272&slon=116.39560823&sname=A&did=&dlat=39.98848272&dlon=116.47560823&dname=B&dev=0&t=0
    
    

    直接跳转高德APP官方文档

二、APP调起百度地图APP

百度地图通过URL_TYPE方式直接跳转百度地图APP,链接内可以设置目的地地址,百度地图设置目的地地址时文档上说的比较隐晦,需要以下面格式设置 destination=name:目的地地址|latlng:40.007623,116.360582,中间以竖线隔开

//访问地址示例(路线规划)
baidumap://map/direction?origin={
    
    {
    
    我的位置}}&destination=name:目的地地址|latlng:40.007623,116.360582&coord_type=bd09ll&mode=driving&src=ios.baidu.openAPIdemo

直接跳转百度APP官方文档

三、百度,高德坐标的相互转换


/** 百度地图转高德地图坐标 */
- (CLLocationCoordinate2D) bd_decrypt:(double)bd_lat bd_lon:(double)bd_lon
{
    
    
  double x = bd_lon - 0.0065, y = bd_lat - 0.006;
  double z = sqrt(x * x + y * y) - 0.00002 * sin(y * x_pi);
  double theta = atan2(y, x) - 0.000003 * cos(x * x_pi);
  CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(z * sin(theta), z * cos(theta));
  return coordinate;
}


/** 高德地图转百度地图坐标 */
- (CLLocationCoordinate2D) bd_decrypt:(double)gg_lat gg_lon:(double)gg_lon
{
    
    
  double x = gg_lon, y = gg_lat;
  double z = sqrt(x * x + y * y) + 0.00002 * sin(y * x_pi);
  double theta = atan2(y, x) + 0.000003 * cos(x * x_pi);
  
  CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(z * sin(theta)+0.006, z * cos(theta)+0.0065);
  return coordinate;
}

猜你喜欢

转载自blog.csdn.net/zhanglei5415/article/details/131461330