项目里遇到根据经纬度跳转第三方导航的需求,在网上找了一下,发现都是千篇一律的文章,而且不能正确显示目的地地址,无果后去百度和高德地图官网查找,位置十分隐蔽,给大家分享下
一、 调起高德地图APP
调起高德地图APP有两种方法:
-
一种是通过访问web的URI地址来实现,这样写的效果是,APP会跳转浏览器 访问H5页面的高德地图,如果设置
callnative
参数为1时,浏览器会询问你是否需要打开高德地图apphttps://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
-
另外一种就是通常使用到的直接跳转方法,直接通过高德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
百度地图通过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
三、百度,高德坐标的相互转换
/** 百度地图转高德地图坐标 */
- (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;
}