js大地坐标与经纬度坐标互转
js大地坐标与经纬度坐标互转
//高斯投影坐标反算成经纬度
function GaussToBL(X,Y){let ProjNo;let ZoneWide; 带宽let output = new Array(2);let longitude1,latitude1, longitude0, X0,Y0, xval,yval;//latitude0,let e1,e2,f,a, ee, NN, T,C, M, D,R,u,fai, iPI;iPI = 3.14159265358979324/180.0; 3.1415926535898/180.0;// a = 6378245.0; f = 1.0/298.3; //54年北京坐标系参数a=6378140.0; f=1.0/298.257; //80年西安坐标系参数ZoneWide = 6; 6度带宽ProjNo = parseInt(X/1000000) ; //查找带号longitude0 = (ProjNo-1) * ZoneWide + ZoneWide / 2;longitude0 = longitude0 * iPI ; //中央经线X0 = ProjNo*1000000+500000;Y0 = 0;xval = X-X0; yval = Y-Y0; //带内大地坐标e2 = 2*f-f*f;e1 = (1.0-Math.sqrt(1-e2))/(1.0+Math.sqrt(1-e2));ee = e2/(1-e2);M = yval;u = M/(a*(1-e2/4-3*e2*e2/64-5*e2*e2*e2/256));fai = u+(3*e1/2-27*e1*e1*e1/32)*Math.sin(2*u)+(21*e1*e1/16-55*e1*e1*e1*e1/32)*Math.sin(4*u) +(151*e1*e1*e1/96)*Math.sin(6*u)+(1097*e1*e1*e1*e1/512)*Math.sin(8*u);C = ee*Math.cos(fai)*Math.cos(fai);T = Math.tan(fai)*Math.tan(fai);NN = a/Math.sqrt(1.0-e2*Math.sin(fai)*Math.sin(fai));R = a*(1-e2)/Math.sqrt((1-e2*Math.sin(fai)*Math.sin(fai))*(1-e2*Math.sin(fai)*Math.sin(fai))*(1-e2*Math.sin(fai)*Math.sin(fai)));D = xval/NN;//计算经度(Longitude) 纬度(Latitude)longitude1 = longitude0+(D-(1+2*T+C)*D*D*D/6+(5-2*C+28*T-3*C*C+8*ee+24*T*T)*D*D*D*D*D/120)/Math.cos(fai);latitude1 = fai -(NN*Math.tan(fai)/R)*(D*D/2-(5+3*T+10*C-4*C*C-9*ee)*D*D*D*D/24+(61+90*T+298*C+45*T*T-256*ee-3*C*C)*D*D*D*D*D*D/720);//转换为度 DDoutput[0] = longitude1 / iPI;output[1] = latitude1 / iPI;return output;
}//经纬度=>高斯投影
function BLToGauss(longitude, latitude){let ProjNo=0;let ZoneWide; 带宽let ret=Array(2);let longitude1,latitude1, longitude0,latitude0, X0,Y0, xval,yval;let a,f, e2,ee, NN, T,C,A, M, iPI;iPI = 0.0174532925199433; 3.1415926535898/180.0;ZoneWide = 6; 6度带宽// a=6378245.0; f=1.0/298.3; //54年北京坐标系参数a=6378140.0; f=1/298.257; //80年西安坐标系参数ProjNo = parseInt(longitude / ZoneWide) ;longitude0 = ProjNo * ZoneWide + ZoneWide / 2;longitude0 = longitude0 * iPI ;latitude0 = 0;longitude1 = longitude * iPI ; //经度转换为弧度latitude1 = latitude * iPI ; //纬度转换为弧度e2=2*f-f*f;ee=e2*(1.0-e2);NN=a/Math.sqrt(1.0-e2*Math.sin(latitude1)*Math.sin(latitude1));T=Math.tan(latitude1)*Math.tan(latitude1);C=ee*Math.cos(latitude1)*Math.cos(latitude1);A=(longitude1-longitude0)*Math.cos(latitude1);M=a*((1-e2/4-3*e2*e2/64-5*e2*e2*e2/256)*latitude1-(3*e2/8+3*e2*e2/32+45*e2*e2*e2/1024)*Math.sin(2*latitude1)+(15*e2*e2/256+45*e2*e2*e2/1024)*Math.sin(4*latitude1)-(35*e2*e2*e2/3072)*Math.sin(6*latitude1));xval = NN*(A+(1-T+C)*A*A*A/6+(5-18*T+T*T+72*C-58*ee)*A*A*A*A*A/120);yval = M+NN*Math.tan(latitude1)*(A*A/2+(5-T+9*C+4*C*C)*A*A*A*A/24+(61-58*T+T*T+600*C-330*ee)*A*A*A*A*A*A/720);X0 = 1000000*(ProjNo+1)+500000;Y0 = 0;xval = xval+X0; yval = yval+Y0;ret[0]=xval;ret[1]=yval;return ret;
}export default {GaussToBL,BLToGauss,
}
js大地坐标与经纬度坐标互转相关推荐
- WGS84 / BD09 / GCJ02 / MapBar 经纬度坐标互转
WGS84 / BD09 / GCJ02 / MapBar 经纬度坐标互转 Geolocataion converting between WGS84, BD09 and GCJ02. WGS84 / ...
- java实现CGS2000大地坐标和WGS84经纬度坐标互转,亲测准确
WGS84转CGS2000 中央子午线需要根据实际设置,参数为经度,纬度,输出值为经度(x),纬度(y) public static Point WGS84ToCGS2000(double longi ...
- Js 根据经纬度坐标计算方位角
azimuthUtils 项目源码链接如下:Gitee项目链接 介绍 利用经纬度坐标,求解方位角[JS实现] 安装教程 本实现只用到了一个库 Threejs,Threejs主要用于实现3D场景,本实现 ...
- 百度地图经纬度和像素坐标互转
百度地图经纬度和像素坐标互转 1.经纬度转像素坐标 // 投影实例 const projection = map.getMapType().getProjection()// 地图div宽高 cons ...
- 经纬度转直角坐标c语言,坐标转换从经纬度坐标到大地坐标及源码(7页)-原创力文档...
PAGE PAGE #/ 7 坐标转换从经纬度坐标到大地坐标及源码 利用网络上开源的资料,可以很容易的实现从经纬度坐标向各种投影坐标 的转换,美国地质调查局开发 USGS勺GCTP就是很好的东西之一, ...
- 经纬度计算距离html,js版谷歌地图计算两经纬度坐标点的距离
球面上两点间大圆劣弧的距离html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JS计算两个经纬度坐标与正北方向夹角
/** * 获取两个经纬度坐标正北方向夹角 * @param {Array} o_latlngs 原点经纬度坐标 [经度, 纬度] * @param {Array} latlngs 经纬度坐标 * @ ...
- WGS84经纬度坐标转北京54高斯投影地方坐标流程
坐标系统之间的坐标转换既包括不同的参心坐标之间的转换,或者不同的地心坐标系之间的转换,也包括参心坐标系与地心坐标系之间的转换以及相同坐标系的直角坐标与大地坐标之间的坐标转换,还有大地坐标与高斯平面坐标 ...
- d3.js 获取当前像素坐标_Cesium开发入门篇 | 06坐标系及坐标变换
Cesium中常用的坐标 1.屏幕坐标(像素) 即二维笛卡尔平面坐标,我们通过鼠标点击直接获取的坐标就是屏幕坐标了,单位是像素值,也可以通过new Cesium.Cartesian2(x, y)创建. ...
- 百度地图根据经纬度坐标,显示汽车行驶轨迹
继上一篇:百度地图根据经纬度坐标,显示轨迹 又进行了些许优化.将固定点为变为汽车行驶轨迹并添加点位. 上一篇链接:https://blog.csdn.net/qq_36865945/article/d ...
最新文章
- servlet单实例多线程 ---线程安全问题是由实例变量造成的,只要在Servlet里面的任何方法里面都不使用实例变量,那么该Servlet就是线程安全的。(所有建议不要在servlet中定义成员变
- 内存映像分析工具Eclipse Memory Analyzer
- linux杀java线程,如何在Linux下找出大量占用CPU的java线程
- Winform ComboBox控件高亮显示
- 数据库元数据数据字典查询_9_列出给定表的所有约束
- 每天一道LeetCode-----给定二维数组代表海域和岛屿,计算有多少个孤岛
- 转载:闲话权限设计三层境界
- STM32 资料整理贴
- 海思uboot启动流程详细分析(二)
- .NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存
- 订单生产计划表范本,生产计划表范本
- 根据php经纬度百度地图打点,PHP使用百度地图获取指定地址坐标:经纬度(图文+视频)...
- 安装kali步骤(超级超级详细)
- 衣橱管理APP——《衣橱管家》页面设计
- 上帝视角看区块链项目
- 多因子选选股MATLAB代码,MatlabCode 多因子模型构建。多因子模型是量化选股中最重要的一类模型 联合开发网 - pudn.com...
- 实用帖!分享5个素材丰富的资源网站
- linux启动一个进程吗,你知道,当你在 Linux 上启动一个进程时会发生什么嘛?
- 解决Chrome 无法保存密码问题
- linux多网卡配置ip地址(linux一个网卡配置多个ip)