调用高德地图、百度地图客户端
16lz
2021-01-26
调用高德地图、百度地图客户端(Android版)
今天项目中要调用百度地图和高德地图的导航功能,上网搜了很多资料,介绍的都很局限,当然最好的学习方式是查看官方文档了。
百度地图URI:
http://lbsyun.baidu.com/index.php?title=uri/api/android
高德地图URI:
http://lbs.amap.com/api/amap-mobile/guide/android/navigation
当时搜资料时高德地图URI网上给的是过时,坑的我在开发者平台上找了好久。。。。
ok,我们现在来看看效果图和参数
百度地图:
高德地图:
言归正传,开始分享我的代码了,我写了一个工具类MapUtil,比较简单,各位可以根据上面看到的参数自行增减
public class MapUtil { /** * 获取打开百度地图应用 * @param context 上下文对象 * @param originLat 起点经度 * @param originLon 起点纬度 * @param desLat 终点经度 * @param desLon 终点纬度 * @return * * mode:导航模式,可选transit(公交)、driving(驾车)、walking(步行)和riding(骑行).默认:driving * */ public static void getBaiduMapUri(Context context,String originLat, String originLon,String desLat, String desLon){ String uri="baidumap://map/direction?origin=name:我的位置|latlng:"+originLat+","+originLon+"&destination=name:目的地|latlng:"+desLat+","+desLon+"&mode=driving"; Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); intent.setPackage("com.baidu.BaiduMap"); context.startActivity(intent); } /** * 启动高德App进行导航 * * @param slat 起点纬度。如果不填写此参数则自动将用户当前位置设为起点纬度。 * @param slon 起点经度。如果不填写此参数则自动将用户当前位置设为起点经度。 * @param dlat 终点纬度 * @param dlon 终点经度 * * dev 必填 是否偏移(0:lat 和 lon 是已经加密后的,不需要国测加密; 1:需要国测加密) * t 必填 t = 0(驾车)= 1(公交)= 2(步行)= 3(骑行)= 4(火车)= 5(长途客车)(骑行仅在V788以上版本支持) * */ public static void getGaoDeMapUri(Context context, String slat , String slon ,String dlat , String dlon){ String uri="amapuri://route/plan/?slat="+slat+"&slon="+slon+"&sname=我的位置&dlat="+dlat+"&dlon="+dlon+"&dname=目的地&dev=0&t=0"; Intent intent = new Intent("android.intent.action.VIEW", android.net.Uri.parse(uri)); intent.setPackage("com.autonavi.minimap"); context.startActivity(intent); } /** * 根据包名检测某个APP是否安装 * @param packageName 包名 * @return true 安装 false 没有安装 */ public static boolean isInstallByRead(String packageName) { return new File("/data/data/" + packageName).exists(); } /** * 百度地图定位经纬度转高德经纬度 * @param bd_lat * @param bd_lon * @return */ public static double[] bdToGaoDe(double bd_lat, double bd_lon) { double[] gd_lat_lon = new double[2]; double PI = 3.14159265358979324 * 3000.0 / 180.0; double x = bd_lon - 0.0065, y = bd_lat - 0.006; double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * PI); double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * PI); gd_lat_lon[0] = z * Math.cos(theta); gd_lat_lon[1] = z * Math.sin(theta); return gd_lat_lon; } /** * 高德地图定位经纬度转百度经纬度 * @param gd_lon * @param gd_lat * @return */ public static double[] gaoDeToBaidu(double gd_lon, double gd_lat) { double[] bd_lat_lon = new double[2]; double PI = 3.14159265358979324 * 3000.0 / 180.0; double x = gd_lon, y = gd_lat; double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * PI); double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * PI); bd_lat_lon[0] = z * Math.cos(theta) + 0.0065; bd_lat_lon[1] = z * Math.sin(theta) + 0.006; return bd_lat_lon; }}
使用说明:
//调用百度地图客户端 if(MapUtil.isInstallByRead("com.baidu.BaiduMap")){ MapUtil.getBaiduMapUri(this,"39.98871 ","116.43234","39.91441","116.40405"); }else{ Toast.makeText(MainActivity.this, "您尚未安装百度地图", Toast.LENGTH_LONG).show(); Uri uri = Uri.parse("market://details?id=com.baidu.BaiduMap"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); }//调用高德地图客户端 if (MapUtil.isInstallByRead("com.autonavi.minimap")){ MapUtil.getGaodeMapUri(this,"39.92848272","116.39560823","39.98848272","116.47560823"); }else{ Toast.makeText(MainActivity.this, "您尚未安装高德地图", Toast.LENGTH_LONG).show(); Uri uri = Uri.parse("market://details?id=com.autonavi.minimap"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);}
效果图
已安装百度地图和高德地图
百度地图
高德地图
未安装百度地图和高德地图(调用手机的应用商店进行下载)
好了,就分享到这了!!!
更多相关文章
- Android百度地图将经纬度转换为地址信息
- Android中调用外部地图程序
- 深入学习百度地图Android(安卓)SDK v4.0.0【第九关】检索功能
- flutter高德地图使用
- Android(安卓)高德地图 INVALID_USER_KEY 错误解决方案
- ArcGIS for Android示例解析之离线地图-----LocalTiledLayer
- Android(安卓)Studio 2.3.2 下载 - 百度网盘
- Android版百度地图的移动定位开发过程
- Android(安卓)实现模拟地图定位功能