var GPS ={

PI :3.14159265358979324,

x_pi :3.14159265358979324 * 3000.0 / 180.0,

delta :function(lat, lon) {//Krasovsky 1940

// //a = 6378245.0, 1/f = 298.3

//b = a * (1 - f)

//ee = (a^2 - b^2) / a^2;

var a = 6378245.0; //a: 卫星椭球坐标投影到平面地图坐标系的投影因子。

var ee = 0.00669342162296594323; //ee: 椭球的偏心率。

var dLat = this.transformLat(lon - 105.0, lat - 35.0);var dLon = this.transformLon(lon - 105.0, lat - 35.0);var radLat = lat / 180.0 * this.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) * this.PI);

dLon= (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * this.PI);return {'lat': dLat, 'lon': dLon};

},//WGS-84 to GCJ-02

gcj_encrypt : function(wgsLat, wgsLon) {if (this.outOfChina(wgsLat, wgsLon))return {'lat': wgsLat, 'lon': wgsLon};var d = this.delta(wgsLat, wgsLon);return {'lat' : wgsLat + d.lat,'lon' : wgsLon +d.lon};

},//GCJ-02 to WGS-84

gcj_decrypt : function(gcjLat, gcjLon) {if (this.outOfChina(gcjLat, gcjLon))return {'lat': gcjLat, 'lon': gcjLon};var d = this.delta(gcjLat, gcjLon);return {'lat': gcjLat - d.lat, 'lon': gcjLon -d.lon};

},//GCJ-02 to WGS-84 exactly

gcj_decrypt_exact : function(gcjLat, gcjLon) {var initDelta = 0.01;var threshold = 0.000000001;var dLat = initDelta, dLon =initDelta;var mLat = gcjLat - dLat, mLon = gcjLon -dLon;var pLat = gcjLat + dLat, pLon = gcjLon +dLon;var wgsLat, wgsLon, i = 0;while (1) {

wgsLat= (mLat + pLat) / 2;

wgsLon= (mLon + pLon) / 2;var tmp = this.gcj_encrypt(wgsLat, wgsLon)

dLat= tmp.lat -gcjLat;

dLon= tmp.lon -gcjLon;if ((Math.abs(dLat) < threshold) && (Math.abs(dLon) 0) pLat = wgsLat; else mLat =wgsLat;if (dLon > 0) pLon = wgsLon; else mLon =wgsLon;if (++i > 10000) break;

}//console.log(i);

return {'lat': wgsLat, 'lon': wgsLon};

},//GCJ-02 to BD-09

bd_encrypt : function(gcjLat, gcjLon) {var x = gcjLon, y =gcjLat;var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * this.x_pi);var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * this.x_pi);

bdLon= z * Math.cos(theta) + 0.0065;

bdLat= z * Math.sin(theta) + 0.006;return {'lat' : bdLat,'lon': bdLon};

},//BD-09 to GCJ-02

bd_decrypt : function(bdLat, bdLon) {var x = bdLon - 0.0065, y = bdLat - 0.006;var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * this.x_pi);var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * this.x_pi);var gcjLon = z *Math.cos(theta);var gcjLat = z *Math.sin(theta);return {'lat' : gcjLat, 'lon': gcjLon};

},//WGS-84 to Web mercator

//mercatorLat -> y mercatorLon -> x

mercator_encrypt : function(wgsLat, wgsLon) {var x = wgsLon * 20037508.34 / 180.;var y = Math.log(Math.tan((90. + wgsLat) * this.PI / 360.)) / (this.PI / 180.);

y= y * 20037508.34 / 180.;return {'lat' : y, 'lon': x};/*if ((Math.abs(wgsLon) > 180 || Math.abs(wgsLat) > 90))

return null;

var x = 6378137.0 * wgsLon * 0.017453292519943295;

var a = wgsLat * 0.017453292519943295;

var y = 3189068.5 * Math.log((1.0 + Math.sin(a)) / (1.0 - Math.sin(a)));

return {'lat' : y, 'lon' : x};

//*/},//Web mercator to WGS-84

//mercatorLat -> y mercatorLon -> x

mercator_decrypt : function(mercatorLat, mercatorLon) {var x = mercatorLon / 20037508.34 * 180.;var y = mercatorLat / 20037508.34 * 180.;

y= 180 / this.PI * (2 * Math.atan(Math.exp(y * this.PI / 180.)) - this.PI / 2);return {'lat' : y, 'lon': x};/*if (Math.abs(mercatorLon) < 180 && Math.abs(mercatorLat) < 90)

return null;

if ((Math.abs(mercatorLon) > 20037508.3427892) || (Math.abs(mercatorLat) > 20037508.3427892))

return null;

var a = mercatorLon / 6378137.0 * 57.295779513082323;

var x = a - (Math.floor(((a + 180.0) / 360.0)) * 360.0);

var y = (1.5707963267948966 - (2.0 * Math.atan(Math.exp((-1.0 * mercatorLat) / 6378137.0)))) * 57.295779513082323;

return {'lat' : y, 'lon' : x};

//*/},//two point's distance

distance : function(latA, lonA, latB, lonB) {var earthR = 6371000.;var x = Math.cos(latA * this.PI / 180.) * Math.cos(latB * this.PI / 180.) * Math.cos((lonA - lonB) * this.PI / 180);var y = Math.sin(latA * this.PI / 180.) * Math.sin(latB * this.PI / 180.);var s = x +y;if (s > 1) s = 1;if (s < -1) s = -1;var alpha =Math.acos(s);var distance = alpha *earthR;returndistance;

},

outOfChina :function(lat, lon) {if (lon < 72.004 || lon > 137.8347)return true;if (lat < 0.8293 || lat > 55.8271)return true;return false;

},

transformLat :function(x, y) {var ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 *Math.sqrt(Math.abs(x));

ret+= (20.0 * Math.sin(6.0 * x * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0 / 3.0;

ret+= (20.0 * Math.sin(y * this.PI) + 40.0 * Math.sin(y / 3.0 * this.PI)) * 2.0 / 3.0;

ret+= (160.0 * Math.sin(y / 12.0 * this.PI) + 320 * Math.sin(y * this.PI / 30.0)) * 2.0 / 3.0;returnret;

},

transformLon :function(x, y) {var ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 *Math.sqrt(Math.abs(x));

ret+= (20.0 * Math.sin(6.0 * x * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0 / 3.0;

ret+= (20.0 * Math.sin(x * this.PI) + 40.0 * Math.sin(x / 3.0 * this.PI)) * 2.0 / 3.0;

ret+= (150.0 * Math.sin(x / 12.0 * this.PI) + 300.0 * Math.sin(x / 30.0 * this.PI)) * 2.0 / 3.0;returnret;

}

};

js 批量坐标转换经纬度_JS经纬度坐标转换相关推荐

  1. js 批量坐标转换经纬度_如何批量转换为百度经纬度

    展开全部 如何批量转换为百度e5a48de588b662616964757a686964616f31333339663933经纬度 摘要: 百度地图API的官网上提供了常用坐标转换的示例.但是,一次只 ...

  2. 坐标转换:墨卡托 经纬度

    坐标转换:墨卡托 & 经纬度 var lonlat={x:114.514864,y:38.04232}; var mercator={x:12747736.346966475,y:458540 ...

  3. 经纬度与WGS84坐标转换

    经纬度与WGS84坐标转换 经纬度与WGS84坐标转换 经纬度与WGS84坐标转换 本代码实现在WGS84系统的大地坐标(BLH)和空间直角坐标(XYZ)的互相转换,符合标准语法,可直接使用 Modu ...

  4. java 墨卡托转经纬度,坐标转换:墨卡托 经纬度

    坐标转换:墨卡托 & 经纬度 var lonlat={x:114.514864,y:38.04232}; var mercator={x:12747736.346966475,y:458540 ...

  5. oracle经纬度精确查询位置,用NodeJS实现批量查询地理位置的经纬度接口

    实现步骤 1. 查询接口 网站上这种类型的接口还不少,笔者直接找了百度地图的接口做,接口文档,调用的API是Geocoding API中的地理编码服务 请求示例:对北京市百度大厦进行地理编码查询 ht ...

  6. 百度地图根据经纬度计算距离php,详解js根据百度地图提供经纬度计算两点距离...

    正常在使用百度地图时,我们可以通过BMap的实例对象提供的方法计算距离: var map = new BMap.Map('map_canvas'); map.getDistance(point1 ,p ...

  7. js实现地址转化经纬度以及经纬度转化地址

    这是介绍的是高德地图api实现地址转化经纬度以及经纬度转化地址: 1. 首先,注册开发者账号,成为高德开放平台开发者 2. 登陆之后,在进入「应用管理」 页面「创建新应用」 3. 为应用添加 Key, ...

  8. 使用腾讯地图批量转换地址为经纬度坐标

    前言 两年前写过一篇使用R+百度地图批量获取经纬度坐标的文章https://blog.csdn.net/lpwmm/article/details/79202592,后来挺多人反馈按照文档操作后无法获 ...

  9. JS 计算两个点(经纬度)的距离;判断某一点是否在某一区域范围内

    JS 计算两个点(经纬度)的距离 经度相同,纬度不同 纬度每隔0.00001度,距离相差约1.1米. 纬度每隔0.0001度,距离相差约11米. 纬度每隔0.001度,距离相差约111米. 纬度每隔0 ...

最新文章

  1. Linux下uniq筛选
  2. 【s操作】上瘾了!继续轻松优雅的解决孩子的初中数学题,matlab入门新方法解题无压力...
  3. pytorch 不同设备下保存和加载模型,需要指定设备
  4. [洛谷P1438] 无聊的数列
  5. 解压android img文件怎么打开,解压压缩android img文件
  6. 入门级图论算法:洪水填充算法
  7. java clock计时_Java Clock类– java.time.Clock
  8. matlab分析傅里叶级数
  9. 最大流最小割经典例题_最大流最小割基本
  10. oem是代工还是贴牌_OEM与ODM两者之间有什么区别 如何区分代工生产和商标授权...
  11. C#编译时提示未能解析引用的程序(被引用项目编译成功,但引用项目编译时却不能正常引用)
  12. 拼音检索VS五笔检索---Javascript实现
  13. PHPExcel导入excel的内容以及表格里的图片
  14. DTI-ATS入门(1):DTI综述
  15. 关于Android证书MD5获取
  16. 微信公众号运营,这些运营技巧不能少
  17. mysql锁粒度是什么意思_mysql锁粒度是什么
  18. 南昌计算机高职公立学校,南昌公立大专院校排名,2021年南昌专科学校名单及排名榜...
  19. chrome 护眼夜间模式
  20. ① 尚品汇的后台管理系统【尚硅谷】【Vue】

热门文章

  1. 极致、简约、专业、优质的在线简历
  2. 细胞生物学-3-细胞质膜
  3. html期末作业代码网页设计——个人生活记录设计(3页) 学生网站模板
  4. 业务与信令-第3章数据业务的信令
  5. 关于今天智能避障机器人的实验
  6. 提供免费样机模板素材的好网站推荐
  7. 服务器虚拟化优缺点总结
  8. 飞行器系统行业研究及十四五规划分析报告
  9. 中职组网络安全C模块全漏洞脚本讲解包含4个漏洞的脚本
  10. 《Practical Machine Learning A New Look at Anomaly Detection》摘抄+笔记