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;}