news 2026/10/1 9:28:51

WGS84转CGS2000 国家大地坐标系转换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
WGS84转CGS2000 国家大地坐标系转换
publicstaticPointWGS84ToCGS2000(doublexCoordinates,doubleyCoordinates)//参数 经度,纬度{// 数值过低可能是因为行政区代码错误导致的if(xCoordinates<=0.0000001||yCoordinates<=0.0000001){returnnull;}intProjNo=0;Pointpoint=newPoint(xCoordinates,yCoordinates);if(CheckIsWGS84Coordinates(xCoordinates,yCoordinates)){point=Wgs84ToCgs2000(point,ProjNo);}else{if(!String.valueOf(point.getX()).startsWith(String.valueOf(ProjNo))){//point = CoordinateTrans.Xian80ToWgs84(point, null);//point = ShapeAreaHelper.TransCoordinatesFrom84To2000(point, ProjNo);}}returnpoint;}/** * 84经纬度坐标转2000平面坐标 * @param sourcePoint * @param ProjNo * @return */publicstaticPointWgs84ToCgs2000(PointsourcePoint,intProjNo){if(sourcePoint==null){//throw new Exception("sourcePoint");}PointtargetPoint=GaussProjCal(sourcePoint,ProjNo);returntargetPoint;}/** * 高斯投影正算 * @param sourcePoint * @param ProjNo * @return */publicstaticPointGaussProjCal(PointsourcePoint,intProjNo){Pointpoint=GaussProjCal(sourcePoint.getX(),sourcePoint.getY(),EarthParam.CGS2000.A,EarthParam.CGS2000.F,ProjNo);returnpoint;}privatestaticPointGaussProjCal(doublelongitude,doublelatitude,doublea,doublef,intProjNo){//int ProjNo = 0;intZoneWide;////带宽doublelongitude1,latitude1,longitude0,latitude0,X0,Y0,xval,yval;doublee2,ee,NN,T,C,A,M,iPI;iPI=Math.PI/180;////3.1415926535898/180.0;ZoneWide=3;////3度带宽//a = 6378245.0; f = 1.0 / 298.3; //54年北京坐标系参数//a=6378140.0; f=1/298.257; //80年西安坐标系参数//a=6378137m;f=1/298.257223563;//WGS-84坐标系if(ProjNo==0){ProjNo=(int)Math.round(longitude/ZoneWide);}longitude0=ProjNo*ZoneWide;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=1000000L*(ProjNo)+500000L;Y0=0;xval=xval+X0;yval=yval+Y0;returnnewPoint(xval,yval);}/** * 判断是否wgs84坐标 * @param xCoordinates * @param yCoordinates * @return */publicstaticbooleanCheckIsWGS84Coordinates(doublexCoordinates,doubleyCoordinates){booleanres=false;if(xCoordinates<360&&xCoordinates!=0&&yCoordinates<360&&yCoordinates!=0){res=true;}returnres;}/** * 保留三位小数 * @param para * @return */publicdoublegetBigDecimal(doublepara){BigDecimalb=newBigDecimal(para);//3 为保留小数位数 四舍五入doublepi1=b.setScale(3,java.math.BigDecimal.ROUND_HALF_UP).doubleValue();returnpi1;}/** * 保留三位小数 * 测试方法 * @return */@Testvoidtest4(){/*String path = "E:\\dev\\cgdb\\CompressedPackage\\DB\\20220331154011253\\420322郧西县\\1716641\\(420322)郧西县_20220331154011253.db"; //DBUtil.setConnection(path); Integer integer = DBUtil.selectTBCount(path); System.out.println(integer);*/Pointpoint=WGS84ToCGS2000(111.591111974096,32.3265852655767);doublebigDecimal=getBigDecimal(point.getX());doublebigDecimal1=getBigDecimal(point.getY());System.out.println(bigDecimal);System.out.println(bigDecimal1);System.out.println("X:"+point.getX()+" Y:"+point.getY());}
publicclassEarthParam{/** * 长轴 eg:6378137 *///private double A;/** * 扁心率 eg:1 / 298.257223563 *///private double F;publicclassCGS2000{/** * 精确 = */publicstaticfinaldoubleA=6378137;/** * 模糊 like */publicstaticfinaldoubleF=1.0/298.257222101;}publicclassWGS84{/** * 精确 = */publicstaticfinaldoubleA=6378137;/** * 模糊 like */publicstaticfinaldoubleF=1.0/298.257223563;}publicclassXIAN80{/** * 精确 = */publicstaticfinaldoubleA=6378140;/** * 模糊 like */publicstaticfinaldoubleF=1.0/298.25722101;}publicclassBJ54{/** * 精确 = */publicstaticfinaldoubleA=6378245.0;/** * 模糊 like */publicstaticfinaldoubleF=1.0/298.257;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 9:28:32

YashanDB数据质量提升:从建表约束到监控的5种实用方法

真正把YashanDB的数据质量搞上去&#xff0c;靠的不是事后补救&#xff0c;而是从设计、写入、清洗、监控全链路一起使劲。我接触YashanDB也有段时间了&#xff0c;刚开始踩了不少坑——表结构随便建、应用层不设防、重复数据堆成山&#xff0c;等报表跑出来才发现数字对不上&a…

作者头像 李华
网站建设 2026/10/1 9:27:55

Squaretest实战:让IDEA自动生成可运行的Mockito单元测试

1. 为什么说“写完测试还能跑通”才是真本事我先描述一个场景&#xff0c;你看看是不是似曾相识&#xff1a;UserService里有个方法registerUser&#xff0c;内部依赖UserMapper做数据库写入、EmailClient发欢迎邮件、KafkaProducer发注册事件&#xff0c;还要做用户名唯一性校…

作者头像 李华
网站建设 2026/10/1 9:27:04

PermissionError 报错根治:pip 权限不足与虚拟环境解决方案

兄弟&#xff0c;看到PermissionError: [Errno 13] Permission denied这一行&#xff0c;是不是瞬间头皮发麻&#xff1f;别急&#xff0c;这基本上是每个玩 Python 的人都会碰到的一道坎&#xff0c;尤其是当你满心欢喜地 clone 了一个开源项目&#xff0c;准备用pip install …

作者头像 李华
网站建设 2026/10/1 9:26:23

跨平台二进制兼容实战:Wine、FEX-Emu与DXMT分层翻译解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/1 9:26:15

人力资源管理系统用例分析:登录、考勤到招聘的设计要点

简介&#xff1a;这是一份人力资源管理系统用例分析文档&#xff0c;主要面向软件工程课程设计、毕业设计或企业HR系统前期的需求分析工作。文档以用例图为抓手&#xff0c;系统梳理了登录、员工管理、考勤管理等模块的参与角色与功能流程&#xff0c;并延伸至招聘管理模块。其…

作者头像 李华
网站建设 2026/10/1 9:25:23

Java服务端OFD处理实战:解析、生成与踩坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华