查看: 3267|回复: 4

osgearth射线求交获取经纬度高程问题

[复制链接]

该用户从未签到

发表于 2011-7-11 13:05:50 | 显示全部楼层 |阅读模式
我采用如下的方式来获取osgearth的经纬度和高程,osgearth模型只有一个world.tif的影像和某一块区域的DEM


  1.   osg::Group* root=dynamic_cast<osg::Group*>(viewer->getSceneData());
  2.    
  3. osgUtil::LineSegmentIntersector::Intersections inter;
  4. std::string mess;
  5. std::stringstream ss;
  6. float x=ea.getX();
  7. float y=ea.getY();

  8. if (viewer->computeIntersections(x,y,inter))
  9. {
  10.   
  11.   
  12.   for(osgUtil::LineSegmentIntersector::Intersections::iterator hitr = inter.begin();hitr != inter.end();++hitr)
  13.   {
  14.      //获取世界坐标系XYZ
  15.       osg::Vec3f temp(hitr->getWorldIntersectPoint());
  16.       double lat,lon,height;         
  17.       osg::CoordinateSystemNode* csn=findTopMostNodeOfType<osg::CoordinateSystemNode>(root);
  18.      //获取wgs84地理坐标
  19.      csn->getEllipsoidModel()->convertXYZToLatLongHeight(temp.x(),temp.y(),temp.z(),lat,lon,height);
  20.    
  21.      ss<<"坐标: lat="<<lat*180/osg::PI<<",lon="<<lon*180/osg::PI<<",height="<<height<<std::endl;
  22.   
复制代码
      



这样获取的坐标经纬度是正确的,但是高程却不正确,在远离视点的时候,高程大概都是负的几百,但是如果拉近视点,贴近表面的时候,高程大概变为正负零点几, 在加上某一块的DEM时,这一块区域的高程值通过上面的代码可以正确的获取到,这是什么原因?
      按我的理解,没有加DEM的区域,高程应该是0.
   感觉是射线求交的问题,请问这是什么原因呢?

该用户从未签到

 楼主| 发表于 2011-7-11 14:40:44 | 显示全部楼层
通过查看一些资料,射线相交时,是与球体上的某个平面(三角行)相交,所以导致高程是负值,那怎样才能获取到正确的高程呢

该用户从未签到

发表于 2011-7-12 00:31:24 | 显示全部楼层
没有高程理论应该得到是无效值,上面的代码就没有问题,你这里可以加一个判断就可以设置为0

该用户从未签到

 楼主| 发表于 2011-7-12 09:01:49 | 显示全部楼层
回复 2# gisbdf


    我查看了一些资料,好像是这样的,就是射线相交时,是与地球上的某个多边形(三角形)相交的,因为地球也是用三角形逼近的。 所以上面获取的结果的Z值,并不是地球表面上的,而是多边形的。 不知道我的理解正不正确。

该用户从未签到

 楼主| 发表于 2011-7-12 09:02:20 | 显示全部楼层
回复 3# FlySky


   
    我查看了一些资料,好像是这样的,就是射线相交时,是与地球上的某个多边形(三角形)相交的,因为地球也是用三角形逼近的。 所以上面获取的结果的Z值,并不是地球表面上的,而是多边形的。 不知道我的理解正不正确。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表