资讯详情

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

    public static Point WGS84ToCGS2000(double xCoordinates, double yCoordinates)//参数 经度,纬度     { 
                // 由于行政区码错误可能导致数值过低         if (xCoordinates <= 0.0000001 || yCoordinates <= 0.0000001) { 
                    return null;         }         int ProjNo = 0;         Point point = new Point(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);             }         }         return point;     }          /** * 84经纬度坐标转2000平面坐标 * @param sourcePoint * @param ProjNo * @return */     public static Point Wgs84ToCgs2000(Point sourcePoint, int ProjNo) { 
         if (sourcePoint == null) { 
         //throw new Exception("sourcePoint"); } Point targetPoint = GaussProjCal(sourcePoint, ProjNo); return targetPoint; } /** * 高斯投影正算 * @param sourcePoint * @param ProjNo * @return */ public static Point GaussProjCal(Point sourcePoint, int ProjNo) { 
         Point point = GaussProjCal(sourcePoint.getX(), sourcePoint.getY(), EarthParam.CGS2000.A, EarthParam.CGS2000.F, ProjNo); return point; } private static Point GaussProjCal(double longitude, double latitude, double a, double f, int ProjNo) { 
         //int ProjNo = 0; int ZoneWide; 带宽 double longitude1, latitude1, longitude0, latitude0, X0, Y0, xval, yval; double e2, 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; return new Point(xval, yval); } /** * 判断是否wgs84坐标 * @param xCoordinates * @param yCoordinates * @return */ public static boolean CheckIsWGS84Coordinates(double xCoordinates, double yCoordinates) { 
         boolean res = false; if (xCoordinates < 360 && xCoordinates != 0 && yCoordinates < 360 && yCoordinates != 0) { 
         res = true; } return res; } /** * 保留三位小数 * @param para * @return */ public double getBigDecimal(double para) { 
         BigDecimal b = new BigDecimal(para); //3 为保留小数位数 四舍五入 double pi1 = b.setScale(3, java.math.BigDecimal.ROUND_HALF_UP).doubleValue(); return pi1; } /** * 保留三位小数 * 测试方法 * @return */ @Test void test4() { 
         /*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);*/ Point point = WGS84ToCGS2000(111.591111974096, 32.3265852655767); double bigDecimal = getBigDecimal(point.getX()); double bigDecimal1 = getBigDecimal(point.getY()); System.out.println(bigDecimal); System.out.println(bigDecimal1); System.out.println("X:" + point.getX() + " Y:" + point.getY()); } 
public class EarthParam { 
       

    /** * 长轴 eg:6378137 */
    //private double A;

    /** * 扁心率 eg:1 / 298.257223563 */
    //private double F;

    public class CGS2000{ 
       
        /** * 精确 = */
        public static final double A = 6378137;
        /** * 模糊 like */
        public static final double F = 1.0 / 298.257222101;
    }

    public class WGS84{ 
       
        /** * 精确 = */
        public static final double A = 6378137;
        /** * 模糊 like */
        public static final double F = 1.0 / 298.257223563;
    }

    public class XIAN80{ 
       
        /** * 精确 = */
        public static final double A = 6378140;
        /** * 模糊 like */
        public static final double F = 1.0 / 298.25722101;
    }

    public class BJ54{ 
       
        /** * 精确 = */
        public static final double A = 6378245.0;
        /** * 模糊 like */
        public static final double F = 1.0 / 298.257;
    }

标签: cgs传感器plc继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台