void FeaturesToNodeFilter::computeLocalizers( const FilterContext& context, const osgEarth::GeoExtent &extent, osg::Matrixd &out_w2l, osg::Matrixd &out_l2w ) { if ( context.isGeoreferenced() ) { if ( context.getSession()->getMapInfo().isGeocentric() ) { const SpatialReference* geogSRS = context.profile()->getSRS()->getGeographicSRS(); GeoExtent geodExtent = extent.transform( geogSRS ); if ( geodExtent.width() < 180.0 ) { osg::Vec3d centroid, centroidECEF; geodExtent.getCentroid( centroid.x(), centroid.y() ); geogSRS->transform( centroid, geogSRS->getECEF(), centroidECEF ); geogSRS->getECEF()->createLocalToWorld( centroidECEF, out_l2w ); out_w2l.invert( out_l2w ); } } else // projected { if ( extent.isValid() ) { osg::Vec3d centroid; extent.getCentroid(centroid.x(), centroid.y()); extent.getSRS()->transform( centroid, context.getSession()->getMapInfo().getProfile()->getSRS(), centroid ); out_w2l.makeTranslate( -centroid ); out_l2w.invert( out_w2l ); } } } }
void TileIndex::getFiles(const osgEarth::GeoExtent& extent, std::vector< std::string >& files) { files.clear(); osgEarth::Symbology::Query query; GeoExtent transformed = extent.transform( _features->getFeatureProfile()->getSRS() ); query.bounds() = transformed.bounds(); osg::ref_ptr< osgEarth::Features::FeatureCursor> cursor = _features->createFeatureCursor( query, 0L ); while (cursor->hasMore()) { osg::ref_ptr< osgEarth::Features::Feature> feature = cursor->nextFeature(); if (feature.valid()) { std::string location = getFullPath(_filename, feature->getString("location")); files.push_back( location ); } } }
void GeoExtent::expandToInclude(const osgEarth::GeoExtent &rhs) { expandToInclude( rhs.xMin(), rhs.yMin() ); expandToInclude( rhs.xMax(), rhs.yMax() ); }