js 批量坐标转换经纬度_JS经纬度坐标转换
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经纬度坐标转换相关推荐
- js 批量坐标转换经纬度_如何批量转换为百度经纬度
展开全部 如何批量转换为百度e5a48de588b662616964757a686964616f31333339663933经纬度 摘要: 百度地图API的官网上提供了常用坐标转换的示例.但是,一次只 ...
- 坐标转换:墨卡托 经纬度
坐标转换:墨卡托 & 经纬度 var lonlat={x:114.514864,y:38.04232}; var mercator={x:12747736.346966475,y:458540 ...
- 经纬度与WGS84坐标转换
经纬度与WGS84坐标转换 经纬度与WGS84坐标转换 经纬度与WGS84坐标转换 本代码实现在WGS84系统的大地坐标(BLH)和空间直角坐标(XYZ)的互相转换,符合标准语法,可直接使用 Modu ...
- java 墨卡托转经纬度,坐标转换:墨卡托 经纬度
坐标转换:墨卡托 & 经纬度 var lonlat={x:114.514864,y:38.04232}; var mercator={x:12747736.346966475,y:458540 ...
- oracle经纬度精确查询位置,用NodeJS实现批量查询地理位置的经纬度接口
实现步骤 1. 查询接口 网站上这种类型的接口还不少,笔者直接找了百度地图的接口做,接口文档,调用的API是Geocoding API中的地理编码服务 请求示例:对北京市百度大厦进行地理编码查询 ht ...
- 百度地图根据经纬度计算距离php,详解js根据百度地图提供经纬度计算两点距离...
正常在使用百度地图时,我们可以通过BMap的实例对象提供的方法计算距离: var map = new BMap.Map('map_canvas'); map.getDistance(point1 ,p ...
- js实现地址转化经纬度以及经纬度转化地址
这是介绍的是高德地图api实现地址转化经纬度以及经纬度转化地址: 1. 首先,注册开发者账号,成为高德开放平台开发者 2. 登陆之后,在进入「应用管理」 页面「创建新应用」 3. 为应用添加 Key, ...
- 使用腾讯地图批量转换地址为经纬度坐标
前言 两年前写过一篇使用R+百度地图批量获取经纬度坐标的文章https://blog.csdn.net/lpwmm/article/details/79202592,后来挺多人反馈按照文档操作后无法获 ...
- JS 计算两个点(经纬度)的距离;判断某一点是否在某一区域范围内
JS 计算两个点(经纬度)的距离 经度相同,纬度不同 纬度每隔0.00001度,距离相差约1.1米. 纬度每隔0.0001度,距离相差约11米. 纬度每隔0.001度,距离相差约111米. 纬度每隔0 ...
最新文章
- Linux下uniq筛选
- 【s操作】上瘾了!继续轻松优雅的解决孩子的初中数学题,matlab入门新方法解题无压力...
- pytorch 不同设备下保存和加载模型,需要指定设备
- [洛谷P1438] 无聊的数列
- 解压android img文件怎么打开,解压压缩android img文件
- 入门级图论算法:洪水填充算法
- java clock计时_Java Clock类– java.time.Clock
- matlab分析傅里叶级数
- 最大流最小割经典例题_最大流最小割基本
- oem是代工还是贴牌_OEM与ODM两者之间有什么区别 如何区分代工生产和商标授权...
- C#编译时提示未能解析引用的程序(被引用项目编译成功,但引用项目编译时却不能正常引用)
- 拼音检索VS五笔检索---Javascript实现
- PHPExcel导入excel的内容以及表格里的图片
- DTI-ATS入门(1):DTI综述
- 关于Android证书MD5获取
- 微信公众号运营,这些运营技巧不能少
- mysql锁粒度是什么意思_mysql锁粒度是什么
- 南昌计算机高职公立学校,南昌公立大专院校排名,2021年南昌专科学校名单及排名榜...
- chrome 护眼夜间模式
- ① 尚品汇的后台管理系统【尚硅谷】【Vue】