免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 13340|回复: 4
收起左侧

[经验共享] 北京54坐标和经纬度坐标转换算法(C++)

[复制链接]

7656

主题

1175

铜板

2299

好友

技术员

为地信喝彩!

积分
106237
QQ
发表于 2010-9-22 11:13 | 显示全部楼层 |阅读模式
这段代码,提供给大家,大家能学习下。


//坐标正算
lbxy(double l, double b, double *x, double *y, int l0)
{
double sa,sb,sep,sn,sy2,st,sm,sx,hb;
double xx,yy,hd,sd;

//判断值的范围
if (l > 360 || l < 0 || b > 360 || b < 0)
{
  *x = l;
  *y = b;
  return;
}

l  = l-l0;
sa = 6378245;   
sb = 6356863.019;
sep= 0.006738525415;
hd = b*PI;
hb = hd/180.0;
st = tan(hb);
      
sn=pow(sa,(double)2)/sqrt(pow(sa,(double)2)*pow(cos(hb),(double)2)
  +pow(sb,(double)2)*pow(sin(hb),(double)2));

sy2=sep*pow(cos(hb),(double)2);
sd = cos(hb)*l*PI;
sm = sd/180.0;
sx = 111134.861*b-(32005.78*sin(hb)+133.924*pow(sin(hb),(double)3)+0.697*pow(sin(hb),(double)5))*cos(hb);
xx = sx+sn*st*(0.5*pow(sm,(double)2)+1.0/24.0*(5.0-pow(st,(double)2)+9.0*sy2)*pow(sm,(double)4));
yy = sn*(sm+1.0/6.0*(1.0-pow(st,(double)2)+sy2)*pow(sm,(double)3)+1.0/120.0*(5.0-18.0*pow(st,(double)2)+pow(st,(double)4))*pow(sm,(double)5));
*x = xx;
*y = yy+500000;
}

//坐标反算
xylb(double l0, double x, double y, double *l, double *b)
{
double bf,vf,nf,ynf,tf,yf2,hbf;
double sa,sb,se2,sep2,mf;
double w1,w2,w,w3,w4;
double pi = 3.1415926;

x = x/1000000.0;
y = y - 500000.0;

bf = 9.04353692458*x-0.00001007623*pow(x,2.0)-0.00074438304*pow(x,3.0)-0.00000463064*pow(x,4.0)+0.00000505846*pow(x,5.0)-0.00000016754*pow(x,6.0);
hbf = bf * pi/ 180.0;
sa = 6378245.0;
sb = 6356863.019;
se2 = 0.006693421623;
sep2 = 0.006738525415;

w1 = sin(hbf);
w2 = 1.0 - se2 * pow(w1,(double)2);
w = sqrt(w2);
mf = sa*(1.0-se2)/pow(w,(double)3);
w3 = cos(hbf);

w4 = pow(sa,(double)2)*pow(w3,(double)2) + pow(sb,(double)2)*pow(w1,(double)2);
nf = pow(sa,(double)2) / sqrt(w4);

ynf = y/nf;
vf = nf/mf;
tf = tan(hbf);

yf2 = sep2 * pow(w3, (double)2);

*b = bf - 1.0/2.0 * vf * tf * (pow(ynf,(double)2)-1.0/12.0*(5.0+3.0*pow(tf,(double)2)+yf2-9.0*yf2*pow(tf,(double)2))*pow(ynf,(double)4))*180.0/pi;
*l = 1.0/w3*ynf*(1.0-1.0/6.0*(1.0+2.0*pow(tf,(double)2)+yf2)*pow(ynf,(double)2)+1.0/120.0*(5.0+28.0*pow(tf,(double)2)+24.0*pow(tf,(double)2)+6.0*yf2+8.0*yf2*pow(tf,(double)2))*pow(ynf,(double)4))*180.0/pi;
*l = l0 + *l;
}
地质啷http://weibo.com/943569550

7711

主题

31万

铜板

892

好友

超级版主

地信网论坛贵宾

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

积分
128758

宣传勋章优秀斑主灌水勋章活跃勋章贡献勋章童话节勋章

QQ
发表于 2010-9-22 11:28 | 显示全部楼层
编译成软件呀
该会员没有填写今日想说内容.

7656

主题

1175

铜板

2299

好友

技术员

为地信喝彩!

积分
106237
QQ
 楼主| 发表于 2010-9-22 11:38 | 显示全部楼层

回 1楼(housex) 的帖子

我这电脑没安装VC  所以就没编译 只把代码附上 感兴趣的朋友可以去试试
地质啷http://weibo.com/943569550

3

主题

183

铜板

4

好友

助理工程师

粪豆,一个响当当的名字!

Rank: 5Rank: 5

积分
178
发表于 2010-9-22 15:41 | 显示全部楼层
楼主什么都会啊,佩服佩服!
来过,学过,谢过!

0

主题

181

铜板

1

好友

技术员

Rank: 3Rank: 3

积分
61
发表于 2012-4-28 18:39 | 显示全部楼层
我不会编程
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表