效果图

前言

为什么调用第三方呢?集成在App里面不行吗?

  • 接入导航SDK,以百度为例,apk包体积能增加小几十兆之多,上一版本还是几兆的apk,迭代一版本直接几十兆了,落差之大,难以接受。
  • 虽说当下流量不值钱了,但是下载时长越久,客户丢失率越高。
  • 最关键的是,当下地图并非一家独大,客户应该有自主选择的权利,你集成了百度,但用户却钟爱于高德,这极为尴尬。
  • 且当下包括微信等一众主流App都是通过调用第三方地图来做的,这显然有一定道理,也是大势所趋。
  • 坑多,显然是干不过别人一个团队专门来做地图的,不如站在巨人的肩上。

综上所诉,优点显而易见。

坐标系

有地图就有经纬度,有经纬度就扯到坐标系,简单介绍一下坐标系。

主要有以下三种:

  • WGS84:一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。
  • GCJ02:由中国国家测绘局制订的地理信息系统的坐标系统,是由WGS84坐标系经过加密后的坐标系。
  • BD09:百度坐标系,在GCJ02坐标系基础上再次加密。其中BD09LL表示百度经纬度坐标,BD09MC表示百度墨卡托米制坐标。

更多的坐标知识介绍

百度使用的自家BD09LL坐标系,高德和腾讯都是GCJ02即火星坐标系,所以相互之间是需要转换的,不然会有位置偏移。

转换方法:

    /*** BD-09 坐标转换成 GCJ-02 坐标*/public static LatLng BD2GCJ(LatLng bd) {double x = bd.longitude - 0.0065, y = bd.latitude - 0.006;double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * Math.PI);double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * Math.PI);double lng = z * Math.cos(theta);double lat = z * Math.sin(theta);return new LatLng(lat, lng);}/*** GCJ-02 坐标转换成 BD-09 坐标*/public static LatLng GCJ2BD(LatLng bd) {double x = bd.longitude, y = bd.latitude;double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * Math.PI);double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * Math.PI);double tempLon = z * Math.cos(theta) + 0.0065;double tempLat = z * Math.sin(theta) + 0.006;return new LatLng(tempLat, tempLon);}

业务需求

还是简单描述一下业务需求,点击一个地址或者按钮或者地图上的一个点,弹窗选择第三方地图导航,点击选择后调用第三方地图进行导航。

1,点击按钮弹窗选择

    @OnClick({R.id.tv_navigation})public void onViewClicked(View view) {switch (view.getId()) {...case R.id.tv_navigation:showMapList();break;}}

2,弹窗

    private void showMapList() {final String[] mapNames = {"百度地图", "高德地图", "腾讯地图"};final String[] packageNames = {"com.baidu.BaiduMap", "com.autonavi.minimap", "com.tencent.map"};AlertDialog.Builder builder = new AlertDialog.Builder(this).setTitle("请选择地图").setItems(mapNames, (dialogInterface, i) -> {boolean installed = isInstalled(packageNames[i]);if (installed) {switch (i) {case 0:gotoBaiDuMap();break;case 1:gotoGaoDeMap();break;case 2:gotoTencentMap();break;}} else {ToastUtil.showCenterToast(mapNames[i] + "未安装");}});builder.create().show();}

调用之前判断一下是否安装:

    /*** 检测所选地图是否安装*/private boolean isInstalled(String packageName) {PackageManager manager = this.getPackageManager();List<PackageInfo> installedPackages = manager.getInstalledPackages(0);if (installedPackages != null) {for (PackageInfo info : installedPackages) {if (info.packageName.equals(packageName))return true;}}return false;}

3,调用地图

别忘了 申请权限。

百度地图

  • 参数说明:

参数以字符串拼接的方式即可,这里用StringBuffer拼接,比String易读些。

  • 调用示例:
    private void gotoBaiDuMap() {// 驾车导航StringBuffer sb = new StringBuffer("baidumap://map/navi").append("?coord_type=gcj02").append("&query=").append("长宁图书馆").append("&src=").append(this.getPackageName());Intent intent = new Intent();intent.setData(Uri.parse(sb.toString()));startActivity(intent);}

高德地图

  • 参数说明:
  • 调用示例:
    private void gotoGaoDeMap() {LatLng endPoint = BD2GCJ(new LatLng(31.220567, 121.395174));//转换坐标系StringBuffer sb = new StringBuffer("androidamap://navi").append("?sourceApplication=").append(getString(R.string.app_name)).append("&lat=").append(endPoint.latitude).append("&lon=").append(endPoint.longitude).append("&dev=0");Intent intent = new Intent();intent.addCategory(Intent.CATEGORY_DEFAULT);intent.setPackage("com.autonavi.minimap");intent.setData(Uri.parse(sb.toString()));startActivity(intent);}

腾讯地图

  • 参数说明:
  • 调用示例:
    private void gotoTencentMap() {LatLng startPoint = BD2GCJ(new LatLng(mLatitude, mLongitude));//坐标转换LatLng endPoint = BD2GCJ(new LatLng(31.220567, 121.395174));//坐标转换StringBuffer sb = new StringBuffer("qqmap://map/routeplan").append("?type=drive").append("&from=我的位置").append("&fromcoord=").append(startPoint.latitude).append(",").append(startPoint.longitude).append("&to=长宁图书馆").append("&tocoord=").append(endPoint.latitude).append(",").append(endPoint.longitude).append("&referer=你的key");Intent intent = new Intent();intent.setAction(Intent.ACTION_VIEW);intent.setData(Uri.parse(sb.toString()));startActivity(intent);}

注意,腾讯地图这里的from和to参数虽然可以省略,但是地图上就不显示地址了,默认是 地图上的点,而且referer参数需要申请开发者key。

文档

  • 百度地图
  • 高德地图
  • 腾讯地图

https://blog.csdn.net/Ever69/article/details/82427085

Android 地图导航调用百度地图、高德地图、腾讯地图相关推荐

  1. [html] 如何使用H5唤起原生地图APP(百度、高德、腾讯地图等)

    [html] 如何使用H5唤起原生地图APP(百度.高德.腾讯地图等) <iframe src="sinaweibo://qrcode"> 或 <a href=& ...

  2. android 跳转腾讯地图导航,Android 跳转到百度、高德、腾讯地图导航

    项目中遇到的一个需求,跳转外部App进行步行导航.分别是百度.高德.腾讯. 东西不难但是每次都要去官方文档找(有时候会更新一些字段). 所以在此做下记录和分享. 腾讯地图 try { LatLng l ...

  3. android 通过scheme唤起百度、高德、腾讯地图路线规划功能,唤起滴滴出行打车功能

    import android.content.Context; import android.content.Intent; import android.net.Uri;import java.ut ...

  4. android app调用第三方地图路线规划导航(百度,高德,腾讯)

    android app调用第三方地图路线规划导航(百度,高德,腾讯) 因为直接使用高德的sdk提供的导航被投诉说不准,所以需要接第三方. 把BAT系的地图都接上了,有兄弟找到其他的地图调用方法告诉下小 ...

  5. Android 地图导航调用百度地图、高德地图、腾讯地图,腾讯T3团队整理

    前言 ============================================================= 为什么调用第三方呢?集成在App里面不行吗? 接入导航SDK,以百度为 ...

  6. Android 地图导航调用百度地图、高德地图、腾讯地图,ffmpeg音视频开发实战5

    switch (view.getId()) { - case R.id.tv_navigation: showMapList(); break; } } 2,弹窗 ================== ...

  7. Flutter 跳转地图软件调起导航:百度、高德、腾讯、苹果

    一.说明 我们在应用开发中经常需要用到地图定位或导航的功能,而集成该功能的方式总的来说分为两类: 第 1 类:App 集成导航功能 这种方式的优点是可以进行深度地图定制,比如出行或外卖软件会有自己的定 ...

  8. APP跳转百度、高德、腾讯地图导航

    这个本来是一个很简单的需求,奈何我遇到了很奇葩的问题.最开始我用的是百度sdk中的跳转api,自己用小米和联想测试跳转没有问题,然而用户的魅蓝note5点击跳转没有任何响应,后来又陆续出现了华为met ...

  9. 分享一个关于Java调用百度、高德API、ArcGIS地图获取逆地理的代码

    百度地图和高德地图用户获取国内地址, 区别在于高德地图的精确度比百度地图要高一点, 百度经纬度和高德地图经纬度位置相反, 高德地图不支持国外地址, ArcGIS地图获取国外地址 1.首先需要到高德开发 ...

最新文章

  1. 高老师的架构设计_隽语集(CC_1201)
  2. 深度学习实现NBA球星颜值打分完整案例(二)
  3. java构造函数调用其他程序的顺序_java初始化构造函数调用顺序
  4. ThreadPoolExcutor 线程池 异常处理 (上篇)
  5. flutter在2019年会有怎样的表现?
  6. ae运动模糊怎么调整_如何快速成长为一名AE高手?
  7. MTK 驱动开发(39 )---待机流程
  8. Spring Cloud与微服务学习总结(3)——认证鉴权与API权限控制在微服务架构中的设计与实现(一)
  9. 【关键词排名点击软件】网站关键词挖掘常用的五个工具
  10. java j2ee j2se_j2ee与j2se对比
  11. 德阳计算机办公培训,德阳2017计算机办公软件培训
  12. PL/SQL Developer 9.0.1.1613
  13. magicbook的linux是哪个版本,荣耀MagicBook 2019预装Linux 影响使用吗
  14. 嵌入式linux备份flash,嵌入式Linux裸机开发(十一)——Nandflash
  15. 重庆航天职业技术学院计算机宿舍,2019年重庆航天职业技术学院寝室宿舍条件与学校食堂环境图片...
  16. Android 11源码 Framework修改默认usb连接模式为MTP模式
  17. 智慧车行预约小程序,汽车保养、维修、美容、检测预测小程序,前后端完整代码包括车行动态,养车常识,保养预约,维修预约,洗车美容预约
  18. windows设置显示隐藏文件
  19. 2022-2028全球丁二磺酸腺苷蛋氨酸行业调研及趋势分析报告
  20. 29. Compose实现瀑布流 StaggeredGrid

热门文章

  1. 小猿圈分享免费自学编程的10个网站
  2. 《HelloGitHub》第 81 期
  3. MATLAB 三维立体绘图
  4. deep learning编程作业总结1---喵咪识别
  5. Qt--3D中制作坐标系(5.12)
  6. 判断二维字符数组是否存在回文字符串例如:char a[] [10]={“asd“,“asa“,“werew“,“yuyu“}; 提示存在回文字符串,回文字符串对称
  7. 浙江电信网速测试皮肤软件,浙江电信网速测试(进入中国电信官方测速网站)
  8. MATLAB中实现特定像素区域处理
  9. JavaEE 企业级分布式高级架构师(十七)ElasticSearch全文检索(1)
  10. 计算机查看流量记录,教你用路由器查看电脑数据流量使用情况的方法