C#高德地图坐标和百度坐标互相转换

128 阅读1分钟

C#高德地图坐标和百度坐标互相转换

public class CoordinateConvert
    {

        private static double xPi = 3.14159265358979324 * 3000.0 / 180.0;
        public static readonly int MULTIPLE_LEVEL = 1000000;

        private CoordinateConvert()
        {
        }

        /**
         * 将火星坐标转变成百度坐标
         *
         * @param marsCoordinate 火星坐标(高德、腾讯地图坐标等)
         * @return 百度坐标
         */

        public static CoordinateDto marsToBaidu(CoordinateDto marsCoordinate)
        {
            double x = marsCoordinate.getLongitude;
            double y = marsCoordinate.getLatitude;
            double z = Math.Sqrt(x * x + y * y) + 0.00002 * Math.Sin(y * xPi);
            double theta = Math.Atan2(y, x) + 0.000003 * Math.Cos(x * xPi);
            return new CoordinateDto(dataDigit(6, z * Math.Cos(theta) + 0.0065),
                dataDigit(6, z * Math.Sin(theta) + 0.006));
        }

        /**
         * 将百度坐标转变成火星坐标
         *
         * @param baiduCoordinate 百度坐标(百度地图坐标)
         * @return 火星坐标(高德、腾讯地图等)
         */
        public static CoordinateDto baiduToMars(CoordinateDto baiduCoordinate)
        {
            double x = baiduCoordinate.getLongitude - 0.0065;
            double y = baiduCoordinate.getLatitude - 0.006;
            double z = Math.Sqrt(x * x + y * y) - 0.00002 * Math.Sin(y * xPi);
            double theta = Math.Atan2(y, x) - 0.000003 * Math.Cos(x * xPi);
            return new CoordinateDto(dataDigit(6, z * Math.Cos(theta)), dataDigit(6, z * Math.Sin(theta)));
        }

        public static CoordinateDto baiduToMars(double longitude, double latitude)
        {
            CoordinateDto baiduCoordinate = new CoordinateDto(longitude, latitude);
            return baiduToMars(baiduCoordinate);
        }

        /**
         * 对double类型数据保留小数点后多少位
         *
         * @param digit 位数
         * @param input 输入
         * @return 保留小数位后的数
         */
        public static double dataDigit(int digit, double input)
        {

            return Math.Round(input, digit, MidpointRounding.AwayFromZero);
        }

    }


  
public class CoordinateDto
    {
        public CoordinateDto()
        {

        }
        public CoordinateDto(double longitude, double latitude)
        {
            this.longitude = longitude;
            this.latitude = latitude;

        }
        /**
         * 经度
         */
    private double longitude;

        /**
         * 纬度
         */
    private double latitude;

        public double getLongitude { get => longitude; set => longitude = value; }
        public double getLatitude { get => latitude; set => latitude = value; }
    }