欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap 谈天说地
   您现在位于: 首页技术专栏开源GIS → 正文
北京54坐标和经纬度坐标转换算法(C++)
07-11-14 00:00:00 作者: 出处:

//坐标正算
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;
}


(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  

    关于我们 友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.

                   滇ICP备05006901号