中国地图
GIS探索者
地图网
GIS论坛
网站首页| GIS论坛 |新闻动态 | 技术专栏 | GIS书籍 | 资源下载 | 求职招聘 | 研究生考试 | GIS博客 | GIS空间站
欢迎光临GIS空间站!   网站地图
  专栏导航:| ArcGIS | MapInfo | TopMap | 地理信息 | 遥感 | GPS | 测绘 | WebGIS | LBS | 前沿 | 数据库 | 开发 | 行业应用
  推荐栏目:| AO开发 | 业界动态 | GIS资源 | 招聘信息 | 求职简历 | 共享软件 | 电子书籍 | 研究生考题 | 电子期刊 | GIS论文
您现在的位置: GIS空间站 >> 技术专栏 >> GPS应用 >> 文章正文

GPS应用开发设计文档

作者:vcbear    文章来源:CSDN    点击数:    更新时间:2007-2-14
 

1.2.3WGS84->LLA转换问题

在分析其日志的过程中,遇到一个问题,就是TimGPS二进制日志保存的坐标数据是以WGS84大地坐标系为准的,大地坐标系的XYZ轴如下:

 

要得到经纬度和海拔(LLALongitude/Latitude/Altitude)坐标,需要一些椭球体、基准面及地图投影的知识。

后来从网上找到一个Fortune77写的WGS84->GLL换算函数,将其转成C/C++的函数:

void wgsxyz2lla(double x,double y,double z,double *lat,double *lon,double *alt)

{

         double pi = 3.14159265357;

         longA_EARTH = 6378137;

         double  flattening = 1/298.257223563;

         double NAV_E2 = (2-flattening)*flattening; // also e^2

         double rad2deg = 180/pi;

         double wlon,wlat,walt,rhosqrd,rho,templat,tempalt,rhoerror,zerror;

         double slat,clat,q,r_n,drdl,invdet,aa,bb,cc,dd;

         if ((x == 0.0) & (y == 0.0))

                   wlon = 0.0;

         else

                   wlon = atan2(y, x)*rad2deg;

         if ((x == 0.0) & (y == 0.0) & (z == 0.0))

         {

                   printf("WGS xyz at center of earth");

                   wlon = 360;

                   wlat = 360;

                   walt = 6378137;

         }

         else

         {

                   rhosqrd = x*x + y*y;

                   rho = sqrt(rhosqrd);

                   templat = atan2(z, rho);

                   tempalt = sqrt(rhosqrd + z*z) - A_EARTH;

                   rhoerror = 1000.0;

                   zerror   = 1000.0;

 

                   while ((Dabs(rhoerror) > 1e-6) | (Dabs(zerror) > 1e-6))

                   {

                            slat = sin(templat);

                            clat = cos(templat);

                            q = 1 - NAV_E2*slat*slat;

                            r_n = A_EARTH/sqrt(q);

                            drdl = r_n*NAV_E2*slat*clat/q; // d(r_n)/d(latitutde)

                            rhoerror = (r_n + tempalt)*clat - rho;

                            zerror   = (r_n*(1 - NAV_E2) + tempalt)*slat - z;

                            aa = drdl*clat - (r_n + tempalt)*slat;

                            bb = clat;

                            cc = (1 - NAV_E2)*(drdl*slat + r_n*clat);

                            dd = slat;

                            invdet = 1.0/(aa*dd - bb*cc);

                            templat = templat - invdet*(+dd*rhoerror -bb*zerror);

                            tempalt = tempalt - invdet*(-cc*rhoerror +aa*zerror);

                   }

                   wlat = templat*rad2deg;

                   walt = tempalt;

         }

         if(lon )*lon = wlon;

         if(lat )*lat = wlat;

         if(alt )*alt = walt;

}

 

结语:开发GPS应用软件的要点在于理解相关的协议和接口,仔细处理协议字段。

上一页  [1] [2] [3] 

文章录入:gissky    责任编辑:gissky  发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
■■相 关 图 书:
■■相 关 文 章:
  • 2007年GPS业界十大新闻回顾

  • 产业白描:谈GPS发展这十年

  • 国产手机陷入集体混战 GPS或是救命稻草?

  • ArcGIS中扫描地形图的配准以及GPS数据的投点

  • 融合与分化:2007年全球GPS综合性前瞻

  • 关注:电子地图成为车载GPS导航“瓶颈”

  • CeBit 2007热点写真:聚焦GPS导航与安全

  • 上一篇文章:

  • 下一篇文章:
  •  
    GIS博客精华
    热点文章
    热门资源
     
    关于我们 | 联系我们 | 广告服务 | 友情链接 | 申请链接 | 合作联盟 | 诚聘英才
      GIS空间站(GISSky.Net)版权所有 站长:兔八哥