项目的需求是显示定位信息和商家地址信息
点击导航跳转到百度或者高德地图的导航功能、前提判断一下是否安装第三方应用
首先先去找对应地图的API文档,
百度地图导航API
高德地图导航API
然后大致说下实现的功能吧、 先说主要的导航功能和url参数、
//百度
private void goToBaidu(){
Intent intent = Intent.getIntent("intent://map/direction?destination=latlng:" + latLng + "|name:" + address + "&mode=driving&src=某某公司#Intent;" + "scheme=bdapp;package=com.baidu.BaiduMap;end");
startActivity(intent);
}
URL接口:baidumap://map/direction
destination : 终点名称或经纬度
经纬度和名称:
latlng:39.9761,116.3282|name:中关村 (注意:坐标先纬度,后经度)
mode : 导航模式 //driving 驾车
不填起点默认当然定位位置
//高德
private void goToGaode(String lat, String lon) {
bd_decrypt(Double.parseDouble(lat), Double.parseDouble(lon));
StringBuffer stringBuffer = new StringBuffer("androidamap://route?sourceApplication=").append("amap");
stringBuffer.append("&dlat=").append(gg_lat)
.append("&dlon=").append(gg_lon)
.append("&dname=").append(address)
.append("&dev=").append(0)
.append("&t=").append(0);
Intent intent = new Intent("android.intent.action.VIEW", android.net.Uri.parse(stringBuffer.toString()));
intent.setPackage("com.autonavi.minimap");
startActivity(intent);
}
route:服务类型
sourceApplication:第三方调用应用名称
dlat:终点纬度
dlon:终点经度
dname:终点名称
dev:起终点是否偏移(0:lat 和 lon 是已经加密后的,不需要国测加密; 1:需要国测加密)
t:t = 0(驾车)= 1(公交)= 2(步行)= 3(骑行)= 4(火车)= 5(长途客车)
这样就可以调起第三方地图了。
下面是一些小功能:
判断是否安装地图应用
//com.autonavi.minimap/com.baidu.BaiduMap
private boolean checkApkExist(Context context, String packageName) {
if (packageName == null || "".equals(packageName))
return false;
try {
ApplicationInfo info = context.getPackageManager().getApplicationInfo(packageName,
PackageManager.GET_UNINSTALLED_PACKAGES);
return true;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
百度和高德坐标系切换
//高德转百度
void bd_encrypt(double gg_lat, double gg_lon, double bd_lat, double bd_lon) {
double x = gg_lon, y = gg_lat;
double z = sqrt(x * x + y * y) + 0.00002 * sin(y * Math.PI);
double theta = atan2(y, x) + 0.000003 * cos(x * Math.PI);
bd_lon = z * cos(theta) + 0.0065;
bd_lat = z * sin(theta) + 0.006;
}
//百度转高德
void bd_decrypt(double bd_lat, 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 * Math.PI);
double theta = atan2(y, x) - 0.000003 * cos(x * Math.PI);
gg_lon = z * cos(theta);
gg_lat = z * sin(theta);
}
点击定位按钮切换到当前位置
LatLng ll = new LatLng(mBaiduMap.getLocationData().latitude, mBaiduMap.getLocationData().longitude);
MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
mBaiduMap.animateMapStatus(update);