各个地图的坐标和GPS坐标计算方式是不同的,因此有时候需要进行坐标转化再进行定位,坐标转化算法如下:

//定义一些常量
var x_PI = 3.14159265358979324 * 3000.0 / 180.0;
var PI = 3.1415926535897932384626;
var a = 6378245.0;
var ee = 0.00669342162296594323;/*** 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换* 即 百度 转 谷歌、高德* @param bd_lon* @param bd_lat* @returns {*[]}*/
var bd09togcj02 = function bd09togcj02(bd_lon, bd_lat) {var bd_lon = +bd_lon;var bd_lat = +bd_lat;var x = bd_lon - 0.0065;var y = bd_lat - 0.006;var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_PI);var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_PI);var gg_lng = z * Math.cos(theta);var gg_lat = z * Math.sin(theta);return [gg_lng, gg_lat]
};/*** 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换* 即谷歌、高德 转 百度* @param lng* @param lat* @returns {*[]}*/
var gcj02tobd09 = function gcj02tobd09(lng, lat) {var lat = +lat;var lng = +lng;var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI);var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI);var bd_lng = z * Math.cos(theta) + 0.0065;var bd_lat = z * Math.sin(theta) + 0.006;return [bd_lng, bd_lat]
};/*** WGS84转GCj02(GPS转高德、谷歌)* @param lng* @param lat* @returns {*[]}*/
function wgs84togcj02(lng, lat) {var lat = +lat;var lng = +lng;if (out_of_china(lng, lat)) {return [lng, lat]} else {var dlat = transformlat(lng - 105.0, lat - 35.0);var dlng = transformlng(lng - 105.0, lat - 35.0);var radlat = lat / 180.0 * PI;var magic = Math.sin(radlat);magic = 1 - ee * magic * magic;var sqrtmagic = Math.sqrt(magic);dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);var mglat = lat + dlat;var mglng = lng + dlng;return [mglng.toFixed(6), mglat.toFixed(6)]}
};/*** GCJ02 转换为 WGS84(高德、谷歌转GPS)* @param lng* @param lat* @returns {*[]}*/
var gcj02towgs84 = function gcj02towgs84(lng, lat) {var lat = +lat;var lng = +lng;if (out_of_china(lng, lat)) {return [lng, lat]} else {var dlat = transformlat(lng - 105.0, lat - 35.0);var dlng = transformlng(lng - 105.0, lat - 35.0);var radlat = lat / 180.0 * PI;var magic = Math.sin(radlat);magic = 1 - ee * magic * magic;var sqrtmagic = Math.sqrt(magic);dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);var mglat = lat + dlat;var mglng = lng + dlng;return [lng * 2 - mglng, lat * 2 - mglat]}
};/*** 判断是否在国内,不在国内则不做偏移* @param lng* @param lat* @returns {boolean}*/
var out_of_china = function out_of_china(lng, lat) {var lat = +lat;var lng = +lng;// 纬度3.86~53.55,经度73.66~135.05 return !(lng > 73.66 && lng < 135.05 && lat > 3.86 && lat < 53.55);
};var transformlat = function transformlat(lng, lat) {var lat = +lat;var lng = +lng;var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;return ret
};var transformlng = function transformlng(lng, lat) {var lat = +lat;var lng = +lng;var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;return ret
};

GPS坐标对应地图坐标偏移问题相关推荐

  1. C#.net 地图控件开发 (一) 控件坐标与地图坐标

    1.       控件坐标与地图坐标的转换 控件坐标是以左上角为基准点(原点0,0),往右为X轴正方向,往下为Y轴正方向的.而地图坐标则是以左下角为基准点,往右为X轴正方向,往上为Y轴正方向,并且可以 ...

  2. Google地球(GPS)坐标之地图坐标偏移

    这个问题涉及国家的法律问题,很重要.根据我国相关法律,在国内发行的任何民用中国地图产品不准使用真实的坐标,必须加入一定的偏移量(大约600米),据说这一做法是"出于国家安全方面的考虑&quo ...

  3. android gps 火星坐标,GPS真实坐标与火星地图坐标/百度地图坐标的转换

    #include #include #include static const uint32_t GPSBaud = 9600; TinyGPSPlus gps; HardwareSerial ss( ...

  4. gps转百度地图坐标 java,GPS坐标与百度地图坐标转换

    空间坐标公式: image.png 上述四个方程式中待测点坐标x. y. z 和Vto为未知参数,其中di=c△ti (i=1.2.3.4). di (i=1.2.3.4) 分别为卫星1.卫星2.卫星 ...

  5. GPS转换百度地图坐标websocket(stomp)实现动态打点

    序        这会已经下班乐,本来觉得这个好像没有什么新东西.最后决定还是趁现在下班写写是因为要让大家看看单技术组合使用的意义.这里就是在上次springBoot+thymeleaf+layui后 ...

  6. react-native原生GPS与高德地图坐标,百度地图坐标系的转换

    问题 今天用react-native原生GPS拿到得定位信息,如图: 之前高德地图取到的定位数据为(显示带有longtitude,latitude===的log)准确的 121.518828125,3 ...

  7. 谈谈火星坐标与地图坐标的那点坑

    火星 火星坐标?你在逗我玩儿?没错,哈哈,在天朝总有一些词我们要去学习的. 1.火星坐标是个什么鬼? 我们知道在具有地图显示的app里,一定会用到定位功能,通常情况下,我们的手机都自带GPS模块,如果 ...

  8. java 地图坐标转换_百度地图坐标和高德地图坐标转换代码 Java实现

    最近做项目需要百度地图坐标转换到高德地图坐标,高德官方也给出了转换接口(百度地图也给出了转换接口) http://lbs.amap.com/api/javascript-api/reference/l ...

  9. 高德地图、百度地图、腾讯地图坐标相互转换

    高德地图.百度地图.腾讯地图坐标相互转换 1.WGS-84原始坐标系,一般用国际GPS纪录仪记录下来的经纬度,通过GPS定位拿到的原始经纬度,Google和高德地图定位的的经纬度(国外)都是基于WGS ...

最新文章

  1. Mybatis 强大的结果映射器ResultMap
  2. word光标一直闪动_6个一分钟就能学会的Word实用小技巧,你会几个?【Word教程】...
  3. 【报告分享】2020年中国金融科技企业领袖观点洞察报告.pdf(附下载链接)
  4. linux系统找运行指令,Linux系统常用指令总结
  5. 双系统 android 华硕,华硕发布Duet TD300,首款真正Windows+安卓双系统笔记本
  6. php中connect,PHP中的ftp_connect()函数
  7. Linux 系统安装配置PHP服务(源码安装)
  8. 霍夫斯特拉大学计算机科学专业排名,Hofstra University霍夫斯特拉大学介绍及排名信息...
  9. 以代码为实例讲解sizeof函数易混淆的用法
  10. 锐捷 重启计算机,win7系统锐捷客户端总是提示重启计算机后才能使用的解决方法...
  11. 计算机课评课意见,计算机中心:开展听课评课力推信息化教学
  12. 群晖linux怎么进入u盘,黑群晖菜鸟安装教程(一)制作U盘引导及软洗白!
  13. 计算机二级word真题书娟,计算机二级word试题.docx
  14. mysql limit 0_MySQL 8.0 关于LIMIT的知识点理解
  15. 基于Android studio个人财务记账管理系统
  16. 逻辑运算符与或非(基础学习)
  17. java跨境电商ERP系统源码 亚马逊跨境电商全套源码SaaS系统
  18. 无线路由器的基础配置(一)
  19. lol国服维护可以玩别的服务器吗,LOL:除了艾欧尼亚,其他服务器都只能算是“郊区”吗?...
  20. 如何开发一个基于 Vue 的 ui 组件库

热门文章

  1. 信号完整性和电源完整性基本介绍
  2. win7右键计算机没有注册类,win7系统提示没有注册类别的解决方法
  3. AutoCAD Civil 3D贴图
  4. python 椭圆曲线加法_椭圆曲线上点的运算
  5. 工具类产品适合在微信公众号上运营吗?
  6. 安全芯片的用途及新场景
  7. 用ps增加照片的气氛--镜头光晕
  8. gdb调试查看内存数据
  9. python tkinter滚动条不起作用_水平滚动条在Tkin中不起作用
  10. 路由器不同网段虚拟服务器设置,局域网中不同网段互访?静态路由表必须要学会设置...