void update( float x, float y, osgViewer::View* view ) { bool yes = false; // look under the mouse: osg::Vec3d world; if ( _terrain->getWorldCoordsUnderMouse(view, x, y, world) ) { // convert to map coords: GeoPoint mapPoint; mapPoint.fromWorld( _terrain->getSRS(), world ); // do an elevation query: double query_resolution = 0.1; // 1/10th of a degree double out_hamsl = 0.0; double out_resolution = 0.0; bool ok = _query.getElevation( mapPoint, out_hamsl, query_resolution, &out_resolution ); if ( ok ) { // convert to geodetic to get the HAE: mapPoint.z() = out_hamsl; GeoPoint mapPointGeodetic( s_mapNode->getMapSRS()->getGeodeticSRS(), mapPoint ); static LatLongFormatter s_f; s_posLabel->setText( Stringify() << std::fixed << std::setprecision(2) << s_f.format(mapPointGeodetic.y()) << ", " << s_f.format(mapPointGeodetic.x()) ); s_mslLabel->setText( Stringify() << out_hamsl ); s_haeLabel->setText( Stringify() << mapPointGeodetic.z() ); s_resLabel->setText( Stringify() << out_resolution ); yes = true; } } if (!yes) { s_posLabel->setText( "-" ); s_mslLabel->setText( "-" ); s_haeLabel->setText( "-" ); s_resLabel->setText( "-" ); } }
void update( float x, float y, osgViewer::View* view ) { bool yes = false; // look under the mouse: osg::Vec3d world; osgUtil::LineSegmentIntersector::Intersections hits; if ( view->computeIntersections(x, y, hits) ) { world = hits.begin()->getWorldIntersectPoint(); // convert to map coords: GeoPoint mapPoint; mapPoint.fromWorld( _terrain->getSRS(), world ); // do an elevation query: double query_resolution = 0; // 1/10th of a degree double out_hamsl = 0.0; double out_resolution = 0.0; bool ok = _query.getElevation( mapPoint, out_hamsl, query_resolution, &out_resolution ); if ( ok ) { // convert to geodetic to get the HAE: mapPoint.z() = out_hamsl; GeoPoint mapPointGeodetic( s_mapNode->getMapSRS()->getGeodeticSRS(), mapPoint ); static LatLongFormatter s_f; s_posLabel->setText( Stringify() << std::fixed << std::setprecision(2) << s_f.format(mapPointGeodetic.y()) << ", " << s_f.format(mapPointGeodetic.x()) ); s_mslLabel->setText( Stringify() << out_hamsl ); s_haeLabel->setText( Stringify() << mapPointGeodetic.z() ); s_resLabel->setText( Stringify() << out_resolution ); yes = true; } // finally, get a normal ISECT HAE point. GeoPoint isectPoint; isectPoint.fromWorld( _terrain->getSRS()->getGeodeticSRS(), world ); s_mapLabel->setText( Stringify() << isectPoint.alt() ); } if (!yes) { s_posLabel->setText( "-" ); s_mslLabel->setText( "-" ); s_haeLabel->setText( "-" ); s_resLabel->setText( "-" ); } }
void update( float x, float y, osgViewer::View* view ) { bool yes = false; // look under the mouse: osg::Vec3d world; osgUtil::LineSegmentIntersector::Intersections hits; if ( view->computeIntersections(x, y, hits) ) { world = hits.begin()->getWorldIntersectPoint(); // convert to map coords: GeoPoint mapPoint; mapPoint.fromWorld( _terrain->getSRS(), world ); // do an elevation query: double query_resolution = 0.0; // max. double actual_resolution = 0.0; float elevation = 0.0f; elevation = _query.getElevation( mapPoint, query_resolution, &actual_resolution ); if ( elevation != NO_DATA_VALUE ) { // convert to geodetic to get the HAE: mapPoint.z() = elevation; GeoPoint mapPointGeodetic( s_mapNode->getMapSRS()->getGeodeticSRS(), mapPoint ); static LatLongFormatter s_f; s_posLabel->setText( Stringify() << std::fixed << std::setprecision(2) << s_f.format(mapPointGeodetic.y(), true) << ", " << s_f.format(mapPointGeodetic.x(), false) ); if (s_mapNode->getMapSRS()->isGeographic()) { osg::ref_ptr<const SpatialReference> tm = s_mapNode->getMapSRS()->createUTMFromLonLat(mapPointGeodetic.x(), mapPointGeodetic.y()); actual_resolution = tm->transformUnits(Distance(actual_resolution, Units::DEGREES), tm.get(), mapPointGeodetic.y()); } s_mslLabel->setText( Stringify() << elevation << " m" ); s_haeLabel->setText( Stringify() << mapPointGeodetic.z() << " m" ); s_resLabel->setText( Stringify() << actual_resolution << " m" ); double egm96z = mapPoint.z(); VerticalDatum::transform( mapPointGeodetic.getSRS()->getVerticalDatum(), VerticalDatum::get("egm96"), mapPointGeodetic.y(), mapPointGeodetic.x(), egm96z); s_egm96Label->setText(Stringify() << egm96z << " m"); yes = true; } // finally, get a normal ISECT HAE point. GeoPoint isectPoint; isectPoint.fromWorld( _terrain->getSRS()->getGeodeticSRS(), world ); s_mapLabel->setText( Stringify() << isectPoint.alt() << " m"); // and move the marker. s_marker->setPosition(mapPoint); } if (!yes) { s_posLabel->setText( "-" ); s_mslLabel->setText( "-" ); s_haeLabel->setText( "-" ); s_resLabel->setText( "-" ); s_egm96Label->setText("-"); } }