|
我采用如下的方式来获取osgearth的经纬度和高程,osgearth模型只有一个world.tif的影像和某一块区域的DEM
-
- osg::Group* root=dynamic_cast<osg::Group*>(viewer->getSceneData());
-
- osgUtil::LineSegmentIntersector::Intersections inter;
- std::string mess;
- std::stringstream ss;
- float x=ea.getX();
- float y=ea.getY();
- if (viewer->computeIntersections(x,y,inter))
- {
-
-
- for(osgUtil::LineSegmentIntersector::Intersections::iterator hitr = inter.begin();hitr != inter.end();++hitr)
- {
- //获取世界坐标系XYZ
- osg::Vec3f temp(hitr->getWorldIntersectPoint());
- double lat,lon,height;
- osg::CoordinateSystemNode* csn=findTopMostNodeOfType<osg::CoordinateSystemNode>(root);
- //获取wgs84地理坐标
- csn->getEllipsoidModel()->convertXYZToLatLongHeight(temp.x(),temp.y(),temp.z(),lat,lon,height);
-
- ss<<"坐标: lat="<<lat*180/osg::PI<<",lon="<<lon*180/osg::PI<<",height="<<height<<std::endl;
-
复制代码
这样获取的坐标经纬度是正确的,但是高程却不正确,在远离视点的时候,高程大概都是负的几百,但是如果拉近视点,贴近表面的时候,高程大概变为正负零点几, 在加上某一块的DEM时,这一块区域的高程值通过上面的代码可以正确的获取到,这是什么原因?
按我的理解,没有加DEM的区域,高程应该是0.
感觉是射线求交的问题,请问这是什么原因呢? |
|