前言

=============================================================

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

  • 接入导航SDK,以百度为例,apk包体积能增加小几十兆之多,上一版本还是几兆的apk,迭代一版本直接几十兆了,落差之大,难以接受。

  • 虽说当下流量不值钱了,但是下载时长越久,客户丢失率越高。

  • 最关键的是,当下地图并非一家独大,客户应该有自主选择的权利,你集成了百度,但用户却钟爱于高德,这极为尴尬。

  • 且当下包括微信等一众主流App都是通过调用第三方地图来做的,这显然有一定道理,也是大势所趋。

  • 坑多,显然是干不过别人一个团队专门来做地图的,不如站在巨人的肩上。

综上所诉,

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

优点显而易见。

坐标系

==============================================================

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

主要有以下三种:

  • 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 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);

Android 地图导航调用百度地图、高德地图、腾讯地图,腾讯T3团队整理相关推荐

  1. Android 地图导航调用百度地图、高德地图、腾讯地图

    效果图 前言 为什么调用第三方呢?集成在App里面不行吗? 接入导航SDK,以百度为例,apk包体积能增加小几十兆之多,上一版本还是几兆的apk,迭代一版本直接几十兆了,落差之大,难以接受. 虽说当下 ...

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

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

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

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

  4. Android 地图导航调用百度地图、高德地图、腾讯地图,android面试题2018

    double lng = z * Math.cos(theta); double lat = z * Math.sin(theta); return new LatLng(lat, lng); } / ...

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

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

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

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

  7. c语言api获取百度地图,H5调用百度地图API获取地理位置

    //获取当前位置 var geolocation = new BMap.Geolocation(); geolocation.getCurrentPosition(function(r){ alert ...

  8. BIGEMAP(百度、高德、谷歌)离线地图二次开发

    (百度.高德.谷歌)离线地图二次开发 发布时间:2019-04-10 版权:               1.如何搭建离线地图开发环境               2.下载离线地图数据(金字塔瓦片数据 ...

  9. (百度、高德、谷歌)离线地图二次开发

    (百度.高德.谷歌)离线地图二次开发 发布时间:2019-04-10 版权: 相关链接:三维(3D)离线地图 二次开发                               1.如何搭建离线地图 ...

最新文章

  1. 2021年大数据HBase(十三):HBase读取和存储数据的流程
  2. python对数运算符号_科学网—Python中算数运算符之注意及np.logspace - 张伟的博文...
  3. ngx_lua与go高并发性能对比
  4. struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Dept实体类和对应的配置信息
  5. ASP.NET 与 MVC 模式
  6. Windows C++ 获取当前文件夹下有几个文件
  7. java基础知识简化
  8. visio阵列_什么软件可以画这种图,Visio怎么画?
  9. iOS支付知识及调试技巧:【支付流程 预授权 银行卡验证反洗钱敏感信息的脱敏规范】2、安全设计Checklist(短信验证码、图形验证码、密码管理、身份验证、会话安全、敏感信息、接口安全)
  10. 前中后序遍历的相互转化(附代码)
  11. WinSnap 截图工具绿色中文特别版
  12. 运放输入偏置电流方向_运放-输入偏置电流与输入失调电流
  13. 皮卡丘为什么不进化_皮卡丘为什么不进化?
  14. linux强制安装rpm依赖包,Yum下载rpm包、不分析依赖关系强制安装
  15. 协会分享 | 如何推动EOS区块链技术在高校的落地
  16. 网站服务器如何选择?
  17. Monitor的用法
  18. 银联开放平台操作指南合辑
  19. ABAP 未转换值和值的互相转换函数
  20. Web 应用安全发展的介绍

热门文章

  1. Linux查看lib加载路径
  2. 微信为什么不支持android4,解决android4.4.4手机不能正常调起微信支付问题
  3. 开机后黑屏看不到桌面_开机后黑屏看不到桌面怎么解决
  4. 假星探街头忽悠女子当模特骗其千余元
  5. kobe生涯数据 数据预处理
  6. C++ primer 第十章 泛型算法
  7. Android Studio DeviceFileExplorer 看不到文件列表问题
  8. JavaWeb Tomcat服务器与Servlet入门以及简单登录功能的实现
  9. [SQLAlchemy] 创建: 主键/索引/唯一约束/联合唯一约束/联合主键约束
  10. bad SQL grammer []; nested exception is java.sql.SQLSyntaxErrorException:ORA-00918:未明确定义列