package com.hgq.correct;
/**
 * 经纬度纠偏工具类
 * [一句话功能简述]<p>
 * [功能详细描述]<p>
 * @author PeiYu
 * @version 1.0, 2012-8-24
 * @see
 * @since gframe-v100
 */
public class MapFix
{
    private double casm_f = 0.0;
    private double casm_rr = 0.0;
    private double casm_t1 = 0.0;
    private double casm_t2 = 0.0;
    private double casm_x1 = 0.0;
    private double casm_x2 = 0.0;
    private double casm_y1 = 0.0;
    private double casm_y2 = 0.0;
    private MapFix()
    {
        casm_rr = 0.0;
        casm_t1 = 0.0;
        casm_t2 = 0.0;
        casm_x1 = 0.0;
        casm_y1 = 0.0;
        casm_x2 = 0.0;
        casm_y2 = 0.0;
        casm_f = 0.0;
    }
    private static MapFix instance;
    public static MapFix getInstance()
    {
        if (instance == null)
        {
            instance = new MapFix();
        }
        return instance;
    }
    /**
     * 纠偏
     * @param x 经度
     * @param y 纬度
     * @return [0]纠偏后经度   [1]纠偏后纬度
     */
    public double[] fix(double x , double y)
    {
        double[] res = new double[2];
        try
        {
            double num = x * 3686400.0;
            double num2 = y * 3686400.0;
            double num3 = 0.0;
            double num4 = 0.0;
            double num5 = 0.0;
            MapPoint point = wgtochina_lb(1, (int) num, (int) num2, (int) num5, (int) num3, (int) num4);
            double num6 = point.getX();
            double num7 = point.getY();
            num6 /= 3686400.0;
            num7 /= 3686400.0;
            res[0] = num6;
            res[1] = num7;
        }
        catch (Exception ex)
        {
            System.out.println(ex);
        }
        return res;
    }
    private void IniCasm(double w_time , double w_lng , double w_lat)
    {
        casm_t1 = w_time;
        casm_t2 = w_time;
        double num = (int) (w_time / 0.357);
        casm_rr = w_time - (num * 0.357);
        if (w_time == 0.0)
        {
            casm_rr = 0.3;
        }
        casm_x1 = w_lng;
        casm_y1 = w_lat;
        casm_x2 = w_lng;
        casm_y2 = w_lat;
        casm_f = 3.0;
    }
    private double random_yj()
    {
        double num = 314159269.0;
        double num2 = 453806245.0;
        casm_rr = (num * casm_rr) + num2;
        double num3 = (int) (casm_rr / 2.0);
        casm_rr -= num3 * 2.0;
        casm_rr /= 2.0;
        return casm_rr;
    }
    private double Transform_jy5(double x , double xx)
    {
        double num = 6378245.0;
        double num2 = 0.00669342;
        double num3 = Math.sqrt(1.0 - ((num2 * yj_sin2(x * 0.0174532925199433)) * yj_sin2(x * 0.0174532925199433)));
        return ((xx * 180.0) / (((num / num3) * Math.cos(x * 0.0174532925199433)) * 3.1415926));
    }
    private double Transform_jyj5(double x , double yy)
    {
        double num = 6378245.0;
        double num2 = 0.00669342;
        double d = 1.0 - ((num2 * yj_sin2(x * 0.0174532925199433)) * yj_sin2(x * 0.0174532925199433));
        double num4 = (num * (1.0 - num2)) / (d * Math.sqrt(d));
        return ((yy * 180.0) / (num4 * 3.1415926));
    }
    private double Transform_yj5(double x , double y)
    {
        double num = ((((300.0 + (1.0 * x)) + (2.0 * y)) + ((0.1 * x) * x)) + ((0.1 * x) * y))
                + (0.1 * Math.sqrt(Math.sqrt(x * x)));
        num += ((20.0 * yj_sin2(18.849555921538762 * x)) + (20.0 * yj_sin2(6.283185307179588 * x))) * 0.6667;
        num += ((20.0 * yj_sin2(3.141592653589794 * x)) + (40.0 * yj_sin2(1.0471975511965981 * x))) * 0.6667;
        return (num + (((150.0 * yj_sin2(0.26179938779914952 * x)) + (300.0 * yj_sin2(0.10471975511965979 * x))) * 0.6667));
    }
    private double Transform_yjy5(double x , double y)
    {
        double num = ((((-100.0 + (2.0 * x)) + (3.0 * y)) + ((0.2 * y) * y)) + ((0.1 * x) * y))
                + (0.2 * Math.sqrt(Math.sqrt(x * x)));
        num += ((20.0 * yj_sin2(18.849555921538762 * x)) + (20.0 * yj_sin2(6.283185307179588 * x))) * 0.6667;
        num += ((20.0 * yj_sin2(3.141592653589794 * y)) + (40.0 * yj_sin2(1.0471975511965981 * y))) * 0.6667;
        return (num + (((160.0 * yj_sin2(0.26179938779914952 * y)) + (320.0 * yj_sin2(0.10471975511965979 * y))) * 0.6667));
    }
    private MapPoint wgtochina_lb(int wg_flag , int wg_lng , int wg_lat , int wg_heit , int wg_week , int wg_time)
    {
        MapPoint point = null;
        if (wg_heit <= 0x1388)
        {
            double num = wg_lng;
            num /= 3686400.0;
            double x = wg_lat;
            x /= 3686400.0;
            if (num < 72.004)
            {
                return point;
            }
            if (num > 137.8347)
            {
                return point;
            }
            if (x < 0.8293)
            {
                return point;
            }
            if (x > 55.8271)
            {
                return point;
            }
            if (wg_flag == 0)
            {
                IniCasm((double) wg_time, (double) wg_lng, (double) wg_lat);
                point = new MapPoint();
                point.setLatitude((double) wg_lng);
                point.setLongitude((double) wg_lat);
                return point;
            }
            casm_t2 = wg_time;
            double num3 = (casm_t2 - casm_t1) / 1000.0;
            if (num3 <= 0.0)
            {
                casm_t1 = casm_t2;
                casm_f++;
                casm_x1 = casm_x2;
                casm_f++;
                casm_y1 = casm_y2;
                casm_f++;
            }
            else if (num3 > 120.0)
            {
                if (casm_f == 3.0)
                {
                    casm_f = 0.0;
                    casm_x2 = wg_lng;
                    casm_y2 = wg_lat;
                    double num4 = casm_x2 - casm_x1;
                    double num5 = casm_y2 - casm_y1;
                    double num6 = Math.sqrt((num4 * num4) + (num5 * num5)) / num3;
                    if (num6 > 3185.0)
                    {
                        return point;
                    }
                }
                casm_t1 = casm_t2;
                casm_f++;
                casm_x1 = casm_x2;
                casm_f++;
                casm_y1 = casm_y2;
                casm_f++;
            }
            double xx = Transform_yj5(num - 105.0, x - 35.0);
            double yy = Transform_yjy5(num - 105.0, x - 35.0);
            double num9 = wg_heit;
            xx = ((xx + (num9 * 0.001)) + yj_sin2(wg_time * 0.0174532925199433)) + random_yj();
            yy = ((yy + (num9 * 0.001)) + yj_sin2(wg_time * 0.0174532925199433)) + random_yj();
            point = new MapPoint();
            point.setX((num + Transform_jy5(x, xx)) * 3686400.0);
            point.setY((x + Transform_jyj5(x, yy)) * 3686400.0);
        }
        return point;
    }
    private double yj_sin2(double x)
    {
        double num = 0.0;
        if (x < 0.0)
        {
            x = -x;
            num = 1.0;
        }
        int num2 = (int) (x / 6.28318530717959);
        double num3 = x - (num2 * 6.28318530717959);
        if (num3 > 3.1415926535897931)
        {
            num3 -= 3.1415926535897931;
            if (num == 1.0)
            {
                num = 0.0;
            }
            else if (num == 0.0)
            {
                num = 1.0;
            }
        }
        x = num3;
        double num4 = x;
        double num5 = x;
        num3 *= num3;
        num5 *= num3;
        num4 -= num5 * 0.166666666666667;
        num5 *= num3;
        num4 += num5 * 0.00833333333333333;
        num5 *= num3;
        num4 -= num5 * 0.000198412698412698;
        num5 *= num3;
        num4 += num5 * 2.75573192239859E-06;
        num5 *= num3;
        num4 -= num5 * 2.50521083854417E-08;
        if (num == 1.0)
        {
            num4 = -num4;
        }
        return num4;
    }
}
 最近下载更多
最近下载更多
                
                paleyxb     LV1
                5月21日
            
            
        
                微信网友_6885411333754880     LV1
                2024年2月28日
            
            
        
                cxlone515     LV1
                2022年8月7日
            
            
        
                1158583576     LV1
                2022年7月28日
            
            
        
                615715427     LV1
                2022年2月10日
            
            
        
                ninilulu     LV1
                2021年12月25日
            
            
        
                ruchusd     LV1
                2021年11月22日
            
            
        
                简单     LV2
                2021年11月13日
            
            
        
                shiqingwen     LV1
                2021年9月16日
            
            
        
                usernull    
                2021年8月10日
            
            
                    暂无贡献等级
            
         最近浏览更多
最近浏览更多
                
                paleyxb     LV1
                5月21日
            
            
        
                微信网友_6885411333754880     LV1
                2024年2月28日
            
            
        
                edpwyg     LV14
                2023年10月21日
            
            
        
                yangzhoubing    
                2023年6月9日
            
            
                    暂无贡献等级
            
        
                微信网友_6403022672744448    
                2023年3月24日
            
            
                    暂无贡献等级
            
        
                xiexiaoming05     LV14
                2022年11月16日
            
            
        
                wangjing11    
                2022年10月19日
            
            
                    暂无贡献等级
            
        
                cxlone515     LV1
                2022年8月7日
            
            
        
                1158583576     LV1
                2022年7月28日
            
            
        
                luisfabiano     LV2
                2022年4月2日
            
            
        
 
     
                