您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > GPS坐标换算为百度坐标
最近不少人加我扣扣索求坐标转换的方法,觉得有必要把代码共享出来给大家。其实这个方法也是在Google之后得到的(顺便啰嗦一句,很多程序猿真的有必要学习一下怎么利用搜索引擎了),也了解了坐标系的基本概念。进入正题,WGS坐标系是国际通用的一种地心坐标系,WGS本身也有多个版本(不赘述了),GCJ-02是国内官方采用的一种坐标系,国内许多坐标系也是基于GCJ-02变种而来的,比如百度坐标系BD-09。就这么简单介绍一下吧,坐标系本身的算法是比较复杂的,需要了解空间地理知识,百度文库里面也有一些坐标纠偏转换算法的相关论文,有兴趣的可以自己去研究。上代码:1.staticdoublepi=3.14159265358979324;2.staticdoublea=6378245.0;3.staticdoubleee=0.00669342162296594323;4.publicfinalstaticdoublex_pi=3.14159265358979324*3000.0/180.0;5.6.publicstaticdouble[]wgs2bd(doublelat,doublelon){7.double[]wgs2gcj=wgs2gcj(lat,lon);8.double[]gcj2bd=gcj2bd(wgs2gcj[0],wgs2gcj[1]);9.returngcj2bd;10.}11.12.publicstaticdouble[]gcj2bd(doublelat,doublelon){13.doublex=lon,y=lat;14.doublez=Math.sqrt(x*x+y*y)+0.00002*Math.sin(y*x_pi);15.doubletheta=Math.atan2(y,x)+0.000003*Math.cos(x*x_pi);16.doublebd_lon=z*Math.cos(theta)+0.0065;17.doublebd_lat=z*Math.sin(theta)+0.006;18.returnnewdouble[]{bd_lat,bd_lon};19.}20.21.publicstaticdouble[]bd2gcj(doublelat,doublelon){22.doublex=lon-0.0065,y=lat-0.006;23.doublez=Math.sqrt(x*x+y*y)-0.00002*Math.sin(y*x_pi);24.doubletheta=Math.atan2(y,x)-0.000003*Math.cos(x*x_pi);25.doublegg_lon=z*Math.cos(theta);26.doublegg_lat=z*Math.sin(theta);27.returnnewdouble[]{gg_lat,gg_lon};28.}29.30.publicstaticdouble[]wgs2gcj(doublelat,doublelon){31.doubledLat=transformLat(lon-105.0,lat-35.0);32.doubledLon=transformLon(lon-105.0,lat-35.0);33.doubleradLat=lat/180.0*pi;34.doublemagic=Math.sin(radLat);35.magic=1-ee*magic*magic;36.doublesqrtMagic=Math.sqrt(magic);37.dLat=(dLat*180.0)/((a*(1-ee))/(magic*sqrtMagic)*pi);38.dLon=(dLon*180.0)/(a/sqrtMagic*Math.cos(radLat)*pi);39.doublemgLat=lat+dLat;40.doublemgLon=lon+dLon;41.double[]loc={mgLat,mgLon};42.returnloc;43.}44.45.privatestaticdoubletransformLat(doublelat,doublelon){46.doubleret=-100.0+2.0*lat+3.0*lon+0.2*lon*lon+0.1*lat*lon+0.2*Math.sqrt(Math.abs(lat));47.ret+=(20.0*Math.sin(6.0*lat*pi)+20.0*Math.sin(2.0*lat*pi))*2.0/3.0;48.ret+=(20.0*Math.sin(lon*pi)+40.0*Math.sin(lon/3.0*pi))*2.0/3.0;49.ret+=(160.0*Math.sin(lon/12.0*pi)+320*Math.sin(lon*pi/30.0))*2.0/3.0;50.returnret;51.}52.53.privatestaticdoubletransformLon(doublelat,doublelon){54.doubleret=300.0+lat+2.0*lon+0.1*lat*lat+0.1*lat*lon+0.1*Math.sqrt(Math.abs(lat));55.ret+=(20.0*Math.sin(6.0*lat*pi)+20.0*Math.sin(2.0*lat*pi))*2.0/3.0;56.ret+=(20.0*Math.sin(lat*pi)+40.0*Math.sin(lat/3.0*pi))*2.0/3.0;57.ret+=(150.0*Math.sin(lat/12.0*pi)+300.0*Math.sin(lat/30.0*pi))*2.0/3.0;58.returnret;59.}复制代码我提供的是JAVA代码,简单注释一下:pi:圆周率。a:卫星椭球坐标投影到平面地图坐标系的投影因子。ee:椭球的偏心率。x_pi:圆周率转换量。transformLat(lat,lon):转换方法,比较复杂,不必深究了。输入:横纵坐标,输出:转换后的横坐标。transformLon(lat,lon):转换方法,同样复杂,自行脑补吧。输入:横纵坐标,输出:转换后的纵坐标。wgs2gcj(lat,lon):WGS坐标转换为GCJ坐标。gcj2bd(lat,lon):GCJ坐标转换为百度坐标。
本文标题:GPS坐标换算为百度坐标
链接地址:https://www.777doc.com/doc-2874656 .html