啟動高德地圖
/**
* 啟動高德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;
}