当前位置: 首页 > Web前端 > JavaScript

3DGIS坐标系测量

时间:2023-03-27 17:12:55 JavaScript

目录当前坐标系状态WGS84GCJ-02三坐标交汇处当前坐标系状态坐标系说明用户WGS84国际通用坐标,从GPS设备中提取数据的坐标系,国际地图提供商使用的坐标系GPS/谷歌卫星火星坐标(GCJ-02)中国标准,中国银行移动设备定位得到的坐标数据使用此坐标系,国家规定:在中国出版的各种地图系统(包括电子表格)必须至少使用GCJ-02进行地理位置是第一次加密。中国国内地图(腾讯高德阿里)百度坐标(BD-09)百度标准,百度SDK,百度地图。从火星坐标得到的坐标系再次加密。BIM和GIS开发的第一个百度WGS84BIM不同的地方就是坐标系的不同。GIS划分在一个球体上,使用经纬度坐标系。如何转换?https://www.cxyzjd.com/articl...三角函数的计算,参考StackOverflow:https://stackoverflow.com/que...functionlglt2xyz(lng,lat,radius){constphi=(180+lng)*(数学.PI/180);consttheta=(90-lat)*(Math.PI/180);返回{x:-radius*Math.sin(theta)*Math.cos(phi),y:radius*Math.cos(theta),z:radius*Math.sin(theta)*Math.sin(phi),};}使用THREEJS球坐标计算参考StackOverflow:https://stackoverflow.com/que...functioncalcPosFromLatLonRad(radius,lat,lon){varspherical=newTHREE.Spherical(radius,THREE.Math.degToRad(90-lon),THREE.Math.degToRad(lat));varvector=newTHREE.Vector3();vector.setFromS球形的(球形的);console.log(vector.x,vector.y,vector.z);returnvector;}GCJ-02火星坐标也是国测局的坐标系。一般来说,从国行设备上得到的坐标就是这个坐标。根据中国法律法规,目前还没有公开的API来实现向WGS84的转换,但有开源项目可供参考。这里是一个github仓库,阿里前端写的,有3.7Kstarhttps://github.com/wandergis/...三大坐标转换/***Wandergis于2015/7/8创建。*提供了百度坐标(BD-09),国测坐标(火星坐标,GCJ-02),和WGS-84坐标系之间的转换*///UMD魔码//如果模块没有依赖,以上模式可以简化为(function(root,factory){if(typeofdefine==="function"&&define.amd){//AMD。注册为匿名模块。define([],factory);}elseif(typeofmodule==="object"&&module.exports){//Node.不适用于严格的CommonJS,但//只有支持module.exports的类似CommonJS的环境,//像Node.module.exports=factory();}else{//浏览器全局变量(根是窗口)root.coordtransform=factory();}})(this,function(){//定义一些常量varx_PI=(3.14159265358979324*3000.0)/180.0;变量PI=3.1415926535897932384626;vara=6378245.0;varee=0.00669342162296594323(convertedwithBD-09coordinatesystemofMars-J)(withBD-09coordinatesystem即百度转谷歌,高德*@parambd_lng*@parambd_lat*@returns{*[]}*/varbd09togcj02=functionbd09togcj02(bd_lng,bd_lat){varbd_lng=+bd_lng;varbd_lat=+bd_lat;varx=bd_lng-0.0065;vary=bd_lat-0.006;varz=Math.sqrt(x*x+y*y)-0.00002*Math.sin(y*x_PI);vartheta=Math.atan2(y,x)-0.000003*Math.cos(x*x_PI);vargg_lng=z*Math.cos(theta);vargg_lat=z*Math.sin(theta);return[gg_lng,gg_lat];};/***mars坐标系(GCJ-02)与百度坐标系(BD-09)的转换*即谷歌、高德去百度*@paramlng*@paramlat*@returns{*[]}*/vargcj02tobd09=functiongcj02tobd09(lng,lat){varlat=+lat;varlng=+lng;varz=Math.sqrt(lng*lng+lat*lat)+0.00002*Math.sin(lat*x_PI);vartheta=Math.atan2(lat,lng)+0.000003*Math.cos(lng*x_PI);varbd_lng=z*Math.cos(theta)+0.0065;varbd_lat=z*Math.sin(theta)+0.006;返回[bd_lng,bd_lat];};/***WGS-84追GCJ-02*@paramlng*@paramlat*@returns{*[]}*/varwgs84togcj02=functionwgs84togcj02(lng,lat){varlat=+lat;varlng=+lng;if(out_of_china(lng,lat)){return[lng,lat];}else{vardlat=transformlat(lng-105.0,lat-35.0);vardlng=transformlng(lng-105.0,lat-35.0);varradlat=(lat/180.0)*圆周率;varmagic=Math.sin(radlat);魔法=1-ee*魔法*魔法;varsqrtmagic=Math.sqrt(魔法);dlat=(dlat*180.0)/(((a*(1-ee))/(magic*sqrtmagic))*PI);dlng=(dlng*180.0)/((a/sqrtmagic)*Math.cos(radlat)*PI);varmglat=lat+dlat;varmglng=lng+dlng;返回[mglng,mglat];}};/***将GCJ-02转换为WGS-84*@paramlng*@paramlat*@returns{*[]}*/vargcj02towgs84=functiongcj02towgs84(lng,lat){varlat=+lat;varlng=+lng;if(out_of_china(lng,lat)){return[lng,lat];}else{vardlat=transformlat(lng-105.0,lat-35.0);vardlng=transformlng(lng-105.0,lat-35.0);varradlat=(lat/180.0)*圆周率;varmagic=Math.sin(radlat);魔法=1-ee*魔法*魔法;varsqrtmagic=Math.sqrt(魔法);dlat=(dlat*180.0)/(((a*(1-ee))/(magic*sqrtmagic))*PI);dlng=(dlng*180.0)/((a/sqrtmagic)*Math.cos(radlat)*PI);varmglat=lat+dlat;varmglng=lng+dlng;返回[lng*2-mglng,lat*2-mglat];}};vartransformlat=functiontransformlat(lng,lat){varlat=+lat;varlng=+lng;varret=-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;返还;};vartransformlng=functiontransformlng(lng,lat){varlat=+lat;varlng=+lng;varret=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;返还;};/***判断国内不存在,国内不存在进行偏移*@paramlng*@paramlat*@returns{boolean}*/varout_of_china=functionout_of_china(lng,lat){varlat=+lat;varlng=+lng;//纬度3.86~53.55,经度73.66~135.05return!(lng>73.66&&lng<135.05&&lat>3.86&&lat<53.55);};返回{bd09togcj02:bd09togcj02,gcj02tobd09:gcj02tobd09,wgs84togcj02:wgs84togcj02,gcj02togcj02:gcj02togs84,};});