-(CGPoint )lonLat2HZXian80:(CGPoint ) lonLat
{
//---------------------------------------------------------------------------
CGPoint mercator;
double lat = lonLat.y;
double lon = lonLat.x;
double h=0;
double x1, y1, z1, x2, y2, z2, val1, val2;
EarthToSpace(lat, lon, h, &x1, &y1, &z1);
SpaceToSpace(&x1, &y1, &z1);
x2 = x1;
y2 = y1;
z2 = z1;
SpaceToEarth(&x2, &y2, &z2);
double a=6378140,b=298.25722101;//西安80的长轴和偏心率
BL_xy(x2, y2, &val1, &val2,a,b);//调用算法
mercator = CGPointMake(val2, val1);
return mercator;
}
#define PI 3.1415926535898
void SpaceToSpace(double *x, double *y, double *z)
{
double dx = -58.856730;
double dy = 128.775110;
double dz = 60.154780;
//单位是秒
double rx = -0.990792996807925;
double ry = -1.25796780033979;
double rz = 2.5622833026433;
//转换成弧度
double m = -0.000023677927;
rx = SecondToRadian(rx);
ry = SecondToRadian(ry);
rz = SecondToRadian(rz);
double X = *x;
double Y = *y;
double Z = *z;
*x = (1 + m) * (X + rz * Y - ry * Z) + dx;
*y = (1 + m) * (-rz * X + Y + rx * Z) + dy;
*z = (1 + m) * (ry * X - rx * Y + Z) + dz;
}
void EarthToSpace(double lat, double lon, double h, double *X, double *Y, double *Z)
{
double WGS84_A = 6378137;
//WGS-84椭球体短半轴b
double WGS84_B = 6356752.3142;
//WGS-84椭球偏心率e的平方
double WGS84_E2 = 0.0066943799013;
double a = WGS84_A;
double b = WGS84_B;
double e2 = WGS84_E2;
- 1
- 2
前往页