抽成工具類了,複製下來就能直接用了,直接看代碼吧;php
高德地圖Url Api: http://lbs.amap.com/api/amap-mobile/guide/android/navigationhtml
百度地圖Url Api:http://lbsyun.baidu.com/index.php?title=uri/api/androidandroid
/** * Created by ChenboCui on 2018/6/5. */ public class MapNaviUtils { public static final String PN_GAODE_MAP = "com.autonavi.minimap"; // 高德地圖包名 public static final String PN_BAIDU_MAP = "com.baidu.BaiduMap"; // 百度地圖包名 public static final String DOWNLOAD_GAODE_MAP = "http://www.autonavi.com/"; // 高德地圖下載地址 public static final String DOWNLOAD_BAIDU_MAP = "http://map.baidu.com/zt/client/index/"; // 百度地圖下載地址 /** * 檢查應用是否安裝 * @return */ public static boolean isGdMapInstalled(){ return isInstallPackage(PN_GAODE_MAP); } public static boolean isBaiduMapInstalled(){ return isInstallPackage(PN_BAIDU_MAP); } private static boolean isInstallPackage(String packageName) { return new File("/data/data/" + packageName).exists(); } /** * 百度座標系 (BD-09) 與 火星座標系 (GCJ-02)的轉換 * 即 百度 轉 谷歌、高德 * * @param latLng * @returns */ public static LatLng BD09ToGCJ02(LatLng latLng) { double x_pi = 3.14159265358979324 * 3000.0 / 180.0; double x = latLng.longitude - 0.0065; double y = latLng.latitude - 0.006; double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi); double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi); double gg_lat = z * Math.sin(theta); double gg_lng = z * Math.cos(theta); return new LatLng(gg_lat, gg_lng); } /** * 火星座標系 (GCJ-02) 與百度座標系 (BD-09) 的轉換 * 即谷歌、高德 轉 百度 * * @param latLng * @returns */ public static LatLng GCJ02ToBD09(LatLng latLng) { double x_pi = 3.14159265358979324 * 3000.0 / 180.0; double z = Math.sqrt(latLng.longitude * latLng.longitude + latLng.latitude * latLng.latitude) + 0.00002 * Math.sin(latLng.latitude * x_pi); double theta = Math.atan2(latLng.latitude, latLng.longitude) + 0.000003 * Math.cos(latLng.longitude * x_pi); double bd_lat = z * Math.sin(theta) + 0.006; double bd_lng = z * Math.cos(theta) + 0.0065; return new LatLng(bd_lat, bd_lng); } /** * 打開高德地圖導航功能 * @param context * @param slat 起點緯度 * @param slon 起點經度 * @param sname 起點名稱 可不填(0,0,null) * @param dlat 終點緯度 * @param dlon 終點經度 * @param dname 終點名稱 必填 */ public static void openGaoDeNavi(Context context,double slat, double slon, String sname, double dlat, double dlon, String dname){ String uriString = null; StringBuilder builder = new StringBuilder("amapuri://route/plan?sourceApplication=maxuslife"); if (0 == slat){ // //若是不傳起點(註釋下面這段),默認就是如今個人位置(手機當前定位) // AMapLocation location = LocationService.getInstance().getAMapLocation(); // if (LocationService.isSuccess(location)) { // builder.append("&sname=個人位置") // .append("&slat=").append(location.getLatitude()) // .append("&slon=").append(location.getLongitude()); // } }else { builder.append("&sname=").append(sname) .append("&slat=").append(slat) .append("&slon=").append(slon); } builder.append("&dlat=").append(dlat) .append("&dlon=").append(dlon) .append("&dname=").append(dname) .append("&dev=0") .append("&t=0"); uriString = builder.toString(); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setPackage(PN_GAODE_MAP); intent.setData(Uri.parse(uriString)); context.startActivity(intent); } /** * 打開百度地圖導航功能(默認座標點是高德地圖,須要轉換) * @param context * @param slat 起點緯度 * @param slon 起點經度 * @param sname 起點名稱 可不填(0,0,null) * @param dlat 終點緯度 * @param dlon 終點經度 * @param dname 終點名稱 必填 */ public static void openBaiDuNavi(Context context,double slat, double slon, String sname, double dlat, double dlon, String dname){ String uriString = null; //終點座標轉換 LatLng destination = new LatLng(dlat,dlon); LatLng destinationLatLng = GCJ02ToBD09(destination); dlat = destinationLatLng.latitude; dlon = destinationLatLng.longitude; StringBuilder builder = new StringBuilder("baidumap://map/direction?mode=driving&"); if (slat != 0){ //起點座標轉換 LatLng origin = new LatLng(slat,slon); LatLng originLatLng = GCJ02ToBD09(origin); slat = originLatLng.latitude; slon = originLatLng.longitude; builder.append("origin=latlng:") .append(slat) .append(",") .append(slon) .append("|name:") .append(sname); } builder.append("&destination=latlng:") .append(dlat) .append(",") .append(dlon) .append("|name:") .append(dname); uriString = builder.toString(); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setPackage(PN_BAIDU_MAP); intent.setData(Uri.parse(uriString)); context.startActivity(intent); } }
使用:git
public void test(View v){ new SingleSelectDialog.Builder(mContext) .setTestSize(16) .setTextColor(R.color.colorPrimaryDark) .setItems(R.array.navi_arrays, (dialog, which) -> { if (which == 0) { // 導航應用1高德 if (MapNaviUtils.isGdMapInstalled()) { MapNaviUtils.openGaoDeNavi(mContext,0,0,null,31.239666,121.499809,"上海外灘"); // MapUtils.openMap(mContext,"com.autonavi.minimap",new LatLng(31.33260711060764,121.54777721524306,"CCB")); }else { UIHelper.showToast("您還未安裝高德地圖!"); new AlertDialog.Builder(this) .setMessage("下載高德地圖?") .setPositiveButton("下載", (dialog1, which1) -> startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(MapNaviUtils.DOWNLOAD_GAODE_MAP)))) .setNegativeButton(R.string.cancel, null) .show(); } } else if (which == 1) { // 導航應用2百度 if (MapNaviUtils.isBaiduMapInstalled()){ MapNaviUtils.openBaiDuNavi(mContext,0,0,null,31.239666,121.499809,"上海外灘"); // MapUtils.openMap(mContext,"com.baidu.BaiduMap",new LatLng(31.33260715160764,121.54777723124306,"CCB")); }else { UIHelper.showToast("您還未安裝百度地圖!"); new AlertDialog.Builder(this) .setMessage("下載百度地圖?") .setNegativeButton("取消", null) .setPositiveButton("下載", (dialog12, which12) -> startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(MapNaviUtils.DOWNLOAD_BAIDU_MAP)))) .show(); } } }) .setHead("地圖應用") .show(); }