android 高德地图按照经纬度导航出现路线偏差 原因:坐标系不一致
发布日期:2021-07-01 00:00:03
浏览次数:2
分类:技术文章
本文共 2695 字,大约阅读时间需要 8 分钟。
前言
项目集成了三家加油站的数据 其中两家的导航没有问题 最后一家的导航出现了路线偏差 而且偏差有点严重 不修改是不行的
分析原因
可能是三家加油站用的坐标系不一样导致路线偏差 看了一下接口文档 果然是第三家用的是百度坐标系 而高德用的火星坐标系
1、GCJ-02火星坐标系,国测局02年发布的坐标体系,它是一种对经纬度数据的加密算法,即加入随机的偏差。高德、腾讯、Google中国地图使用。国内最广泛使用的坐标体系;
2、其他坐标体系:一般都是由GCJ-02进过偏移算法得到的。这种体系就根据每个公司的不同,坐标体系都不一样了。比如,百度的BD-09坐标、搜狗坐标等
解决方法
把百度坐标系转换成高德坐标系就可以了 封装的Utils代码如下
/** * @author lyudony * @date 2020/7/21. * description:坐标系转换工具 */public class GPSUtils { // 将百度地图经纬度转换为腾讯/高德地图经纬度 @NonNull public static double[] bd2gd(double lat, double lon) { try { if (lat != 0 && lon != 0) { double var4 = 0.006401062D; double var6 = 0.0060424805D; double[] var2 = null; for (int var3 = 0; var3 < 2; ++var3) { var2 = new double[2]; double var16 = lon - var4; double var18 = lat - var6; double[] var29 = new double[2]; double var24 = Math.cos(b(var16) + Math.atan2(var18, var16)) * (a(var18) + Math.sqrt(var16 * var16 + var18 * var18)) + 0.0065D; double var26 = Math.sin(b(var16) + Math.atan2(var18, var16)) * (a(var18) + Math.sqrt(var16 * var16 + var18 * var18)) + 0.006D; var29[1] = (c(var24)); var29[0] = (c(var26)); var2[1] = (c(lon + var16 - var29[1])); var2[0] = (c(lat + var18 - var29[0])); var4 = lon - var2[1]; var6 = lat - var2[0]; } return var2; } } catch (Throwable var28) { // ll.a(var28, "OffsetUtil", "B2G"); } return new double[]{lat, lon}; } private static double a = 3.141592653589793D; private static double a(double var0) { return Math.sin(var0 * 3000.0D * (a / 180.0D)) * 2.0E-5D; } private static double b(double var0) { return Math.cos(var0 * 3000.0D * (a / 180.0D)) * 3.0E-6D; } private static double c(double var0) { return (new BigDecimal(var0)).setScale(8, 4).doubleValue(); }}
使用方法:
double[] dou = GPSUtils.bd2gd(model.getGasAddressLongitude(), model.getGasAddressLatitude()); sb.append("androidamap://navi?sourceApplication=").append("amap"); sb.append("&name=").append(model.getGasName()); sb.append("&lon=").append(dou[0]) //经度 .append("&lat=").append(dou[1])//纬度 .append("&dev=").append("0") .append("&stype=").append("0");
如此就可以导航成功了! 如果导航还是出现偏差 请查看我的另一篇博文:
共勉
我要一步一步往上爬
在最高点乘着叶片往前飞 任风吹干流过的泪和汗 我要一步一步往上爬 等待阳光静静看着它的脸 小小的天有大大的梦想 我有属于我的天 任风吹干流过的泪和汗 总有一天我有属于我的天
转载地址:https://lvshichunqiu.blog.csdn.net/article/details/107494685 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月10日 13时06分19秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
@FeignClient注解的重复名称解决
2019-05-01
java.net.BindException: 无法指定被请求的地址
2019-05-01
scala list
2019-05-01
svn服务器安装
2019-05-01
spark 笔记1
2019-05-01
shell dirname basename
2019-05-01
未来已至,5G加持下的云游戏将走向何方?
2019-05-01
计算机网络 —— 网络层 1.
2019-05-01
Android 之 ContentProvider 与 ContentResolver
2019-05-01
【接口自动化】
2019-05-01
推荐一位川大零基础转行 Python 的人生勇士
2019-05-01
Python解惑之:True与False
2019-05-01
你要的微信小程序终于来了
2019-05-01
有了这些 Chrome 插件,效率提升10倍(建议收藏)
2019-05-01
Python 开发者都会遇到的错误:UnboundLocalError
2019-05-01
只有1%的程序员搞懂过浮点数陷阱
2019-05-01
一名 Google 工程师的大数据处理经验
2019-05-01
命名难,难于上青天
2019-05-01
没钱没公司,怎么做一款付费产品
2019-05-01