C#高德地图坐标和百度坐标互相转换
public class CoordinateConvert
{
private static double xPi = 3.14159265358979324 * 3000.0 / 180.0;
public static readonly int MULTIPLE_LEVEL = 1000000;
private CoordinateConvert()
{
}
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));
}
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);
}
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; }
}