热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用GPS获取坐标并分析其在Google地图上的偏差

通过手机获取的GPS坐标在手机地图上存在约100-200米的偏差,但在GoogleMaps中搜索同一坐标时,定位非常精确。这种偏差可能出于安全或隐私考虑而被有意引入。此外,不同设备和环境下的GPS信号强度和精度也会影响最终的定位结果。

用手机获取GPS坐标 显示在手机地图偏差大约在100-200米左右,我把坐标放在 Maps.google.com 搜索坐标定位则相当精确。

可能是.....为了安全吧故意加的偏差

不过可以计算偏差使位置精确

代码如下

public class EvilTransform {static double pi &#61; 3.14159265358979324;static double a &#61; 6378245.0;static double ee &#61; 0.00669342162296594323;public static double mgLat;public static double mgLon;public static void transform( double wgLat, double wgLon){if (outOfChina(wgLat, wgLon)){mgLat &#61; wgLat;mgLon &#61; wgLon;return;}double dLat &#61; transformLat(wgLon - 105.0, wgLat - 35.0);double dLon &#61; transformLon(wgLon - 105.0, wgLat - 35.0);double radLat &#61; wgLat / 180.0 * pi;double magic &#61; Math.sin(radLat);magic &#61; 1 - ee * magic * magic;double sqrtMagic &#61; Math. sqrt(magic);dLat &#61; (dLat * 180.0) / (( a * (1 - ee)) / (magic * sqrtMagic) * pi);dLon &#61; (dLon * 180.0) / ( a / sqrtMagic * Math.cos(radLat) * pi);mgLat &#61; wgLat &#43; dLat;mgLon &#61; wgLon &#43; dLon;}static Boolean outOfChina( double lat, double lon){if (lon <72.004 || lon > 137.8347)return true;if (lat <0.8293 || lat > 55.8271)return true;return false;}static double transformLat( double x, double y){double ret &#61; -100.0 &#43; 2.0 * x &#43; 3.0 * y &#43; 0.2 * y * y &#43; 0.1 * x * y &#43; 0.2 * Math.sqrt(Math.abs(x));ret &#43;&#61; (20.0 * Math. sin(6.0 * x * pi) &#43; 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;ret &#43;&#61; (20.0 * Math. sin(y * pi) &#43; 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;ret &#43;&#61; (160.0 * Math. sin(y / 12.0 * pi) &#43; 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;return ret;}static double transformLon( double x, double y){double ret &#61; 300.0 &#43; x &#43; 2.0 * y &#43; 0.1 * x * x &#43; 0.1 * x * y &#43; 0.1 * Math.sqrt(Math.abs(x));ret &#43;&#61; (20.0 * Math. sin(6.0 * x * pi) &#43; 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;ret &#43;&#61; (20.0 * Math. sin(x * pi) &#43; 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;ret &#43;&#61; (150.0 * Math. sin(x / 12.0 * pi) &#43; 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0;return ret;}
}

  

转:https://www.cnblogs.com/freexiaoyu/p/3558966.html



推荐阅读
author-avatar
手机用户2502874905
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有