启动高德地图
/**
* 启动高德App进行导航
*
* @param sourceApplication 必填 第三方调用应用名称。如 amap
* @param dname 非必填 目的地名称
* @param dlat 必填 终点纬度
* @param dlon 必填 终点经度
* @param dev 必填 是否偏移(0:lat 和 lon 是已经加密后的,不需要国测加密; 1:需要国测加密)
* @param style 必填 预设的导航方式 t = 0(驾车)= 1(公交)= 2(步行)= 3(骑行)= 4(火车)= 5(长途客车)
*/
public static void goToNaviActivity(String sourceApplication, String poiname, double lat, double lon, String dev, String style) {
//启动路径规划页面
String uri = "amapuri://route/plan/?dlat="+ dlat+"&dlon="+dlon+"&dname="+ dname+"&dev=1&t=0";
Intent intent = new Intent("android.intent.action.VIEW", android.net.Uri.parse(uri));
intent.setPackage("com.autonavi.minimap");
context.startActivity(intent);
}
注:上述是官方的方法,但是在部分手机上出现崩溃,方案:将uri开头的“amapuri”改为“androidamap”即可!
启动高德其他页面 详见官方文档很详细:
http://lbs.amap.com/api/amap-mobile/guide/android/navigation
启动腾讯地图
/**
* 启动腾讯地图App进行导航
* @param address 目的地
* @param lat 必填 纬度
* @param lon 必填 经度
*/
public static void gotoTengxun(Context context, String address, double lat, double lon) {
// 启动路径规划页面
Intent naviIntent = new Intent("android.intent.action.VIEW", android.net.Uri.parse("qqmap://map/routeplan?type=drive&from=&fromcoord=&to="+ address + "&tocoord=" + lat + "," + lon + "&policy=0&referer=appName"));
context.startActivity(naviIntent);
}
启动腾讯地图其他页面,详见官方文档:
http://lbs.qq.com/uri_v1/guide-route.html
启动百度地图
/**
* 启动百度App进行导航
* @param address 目的地
* @param lat 必填 纬度
* @param lon 必填 经度
*/
public static void goToBaiduActivity(Context context, String address, double lat, double lon) {
double[] doubles = gcj02_To_Bd09(lat, lon);
//启动路径规划页面
Intent naviIntent = new Intent("android.intent.action.VIEW", android.net.Uri.parse("baidumap://map/direction?origin="+ doubles[] +","+ doubles[] +"&destination="+ address +"&mode=driving"));
context.startActivity(naviIntent);
}
启动百度其他页面详见官方文档:
http://lbsyun.baidu.com/index.php?title=uri/api/android
补充:
WGS84坐标系:即地球坐标系,国际上通用的坐标系。但是国家规定不能直接使用WGS84地理坐标系。
GCJ02坐标系:即火星坐标系,WGS84坐标系经加密后的坐标系。高德 腾讯采用的就是这个。
BD09坐标系:即百度坐标系,GCJ02坐标系经加密后的坐标系。
/**
* 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 将 GCJ-02 坐标转换成 BD-09 坐标
*
* @param lat
* @param lon
*/
public static double[] gcj02_To_Bd09(double lat, double lon) {
double x = lon, y = lat;
double z = Math.sqrt(x * x + y * y) + * Math.sin(y * x_pi);
double theta = Math.atan2(y, x) + * Math.cos(x * x_pi);
double tempLat = z * Math.sin(theta) + ;
double tempLon = z * Math.cos(theta) + ;
double[] gps = {tempLat, tempLon};
return gps;
}