目录
前言
原理
示例代码
1.百度地图
2.高德地图
前言
最近由于业务需求需要拉起百度地图和高德地图进行导航,
原理
百度和高德都给开发者提供了接口,开发者只需要调用接口传递起始坐标就可以了。
示例代码
1.百度地图
效果图:
代码:
try {
LatLng startLatLng = new LatLng(39.940387, 116.29446);
LatLng endLatLng = new LatLng(39.87397, 116.529025);
String uri = String.format("baidumap://map/direction?origin=%s,%s&destination=" +
"%s,%s&mode=driving&src=com.34xian.demo", startLatLng.latitude, startLatLng.longitude,
endLatLng.latitude, endLatLng.longitude);
Intent intent = new Intent();
intent.setData(Uri.parse(uri));
startActivity(intent);
}
catch (ActivityNotFoundException e) {
ToastUtil.showShort(this, "请安装百度地图");
}
注:代码坐标与效果图坐标不同(都是随机拾取的)
参数说明:
参数名称 | 描述 | 是否必选 | 格式(示例) |
origin | 起点名称或经纬度,或者可同时提供名称和经纬度,此时经纬度优先级高,将作为导航依据,名称只负责展示。如果没有origin的情况下,会使用用户定位的坐标点作为起点 | origin和destination二者至少一个有值(默认值是当前定位地址) | latlng:39.98871,116.43234 (注意:坐标先纬度,后经度) 名称和经纬度:name:天安门|latlng:39.98871,116.43234|addr:北京市东城区东长安街(注意:坐标先纬度,后经度) 建筑ID和楼层ID: name:天安门|latlng:39.98871,116.43234|building:10041552286161815796|floor:F1(注意:建筑ID和楼层ID必须同时提供,用于是内步行路线规划) 注意:仅有名称的情况下,请不要带“name:”,只需要origin=“起点名称” |
destination | 终点名称或经纬度,或者可同时提供名称和经纬度,此时经纬度优先级高,将作为导航依据,名称只负责展示。 | 同上 | latlng:39.98871,116.43234 (注意:坐标先纬度,后经度) 名称和经纬度:name:天安门|latlng:39.98871,116.43234|addr:北京市东城区东长安街(注意:坐标先纬度,后经度) 建筑ID和楼层ID: name:天安门|latlng:39.98871,116.43234|building:10041552286161815796|floor:F1(注意:建筑ID和楼层ID必须同时提供,用于是内步行路线规划) 注意:仅有名称的情况下,请不要带“name:”,只需要destination=“终点名称” |
mode | 导航模式, 可选transit(公交)、 driving(驾车)、 walking(步行)和riding(骑行) 默认:driving | 可选 | |
region | 城市名或县名 | 可选 | |
origin_region | 起点所在城市或县 | 可选 | |
destination_region | 终点所在城市或县 | 可选 | |
sy | 公交检索策略,只针对mode字段填写transit情况下有效,值为数字。 0:推荐路线 2:少换乘 3:少步行 4:不坐地铁 5:时间短 6:地铁优先 | 可选 | |
index | 公交结果结果项,只针对公交检索,值为数字,从0开始 | 可选 | |
target | 0 图区,1 详情,只针对公交检索有效 | 可选 | 默认0 |
car_type | 驾车路线规划类型 | 可选 | BLK:躲避拥堵(自驾) TIME:高速优先(自驾) DIS:不走高速(自驾) FEE:少收费(自驾) DEFAULT: 默认偏好; 默认使用地图中已保存的路线偏好(缺省值)。 除缺省值外,若用户已勾选车牌限行,其他类型都会默认增加车牌限行的偏好。 |
viaPoints | 途经点参数,内容为json格式,需要把内容encode后拼接到url中。 未编码的参数内容示例如下,其中name为名称,lat为纬度,lng为经度 { "viaPoints": [ { "name": "北京西站", "lat": 39.902463, "lng": 116.327737 }, { "name": "北京动物园", "lat": 39.945136, "lng": 116.346983 }, { "name": "清华大学", "lat": 40.011006, "lng": 116.338897 } ] } | 可选 | 10.2新增 |
src | 统计来源 | 必选 | 参数格式为:andr.companyName.appName 不传此参数,不保证服务 |
注意:
1、direction?region=北京&origin=39.98871,116.43234&destination=40.055878,116.307854mode=transit&index=0&target=1 index=0&target=1 加了这两个,进入某条线路的详情或图区,现在用于到站提醒调起特定线路。已经有index的情况下,target不填就是默认0;
2、仅仅发起检索,跳到搜索结果页, index, target则不是必须的;
3、带途经点的示例如下:[baidumap://map/direction?mode=driving&destination=上地&origin=西二旗&src=push&viaPoints={"viaPoints":[{"name":"北京西站","lat":39.902463,"lng":116.327737}]} baidumap://map/direction?mode=driving&destination=上地&origin=西二旗&src=push&viaPoints=%7B%22viaPoints%22%3A%5B%7B%22name%22%3A%22%E5%8C%97%E4%BA%AC%E8%A5%BF%E7%AB%99%22%2C%22lat%22%3A39.902463%2C%22lng%22%3A116.327737%7D%5D%7D]
2.高德地图
效果图:
代码:
try {
double gdLatitude = 39.92848272
double gdLongitude = 116.39560823
String uri = String.format("amapuri://route/plan/?dlat=%s&dlon=%s&dname=B&dev=0&t=0",
gdLatitude, gdLongitude);
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.setData(Uri.parse(uri));
intent.setPackage("com.autonavi.minimap");
startActivity(intent);
}
catch (ActivityNotFoundException e) {
ToastUtil.showShort(this, "请安装高德地图");
}
参数说明:
参数 | 说明 | 是否必填 |
route | 服务类型 | 是 |
sourceApplication | 第三方调用应用名称。如 amap | 是 |
sid | 起点的POIID | 否 |
slat | 起点纬度。如果不填写此参数则自动将用户当前位置设为起点纬度。 | 否 |
slon | 起点经度。如果不填写此参数则自动将用户当前位置设为起点经度。 | 否 |
sname | 起点名称 | 否 |
did | 终点的POIID | 否 |
dlat | 终点纬度 | 是 |
dlon | 终点经度 | 是 |
dname | 终点名称 | 否 |
dev | 起终点是否偏移(0:lat 和 lon 是已经加密后的,不需要国测加密; 1:需要国测加密) | 是 |
m | 驾车方式 =0(速度快)=1(费用少) =2(路程短)=3 不走高速 =4(躲避拥堵)=5(不走高速且避免收费) =6(不走高速且躲避拥堵) =7(躲避收费和拥堵) =8(不走高速躲避收费和拥堵)。 公交 =0(速度快)=1(费用少) =2(换乘较少)=3(步行少)=4(舒适)=5(不乘地铁) 由于与用户本地设置冲突,Android平台7.5.9版本起不支持该参数,偏好设置将以用户本地设置为准 | 是 |
t | t = 0(驾车)= 1(公交)= 2(步行)= 3(骑行)= 4(火车)= 5(长途客车) (骑行仅在V7.8.8以上版本支持) | 是 |
rideType | 仅当 t = 3 时该参数生效。rideType = elebike 电动车,rideType = bike/为空 自行车 (电动车规划仅在V8.65.0及以上版本支持) | 否 |