TileIndex* TileIndex::load(const std::string& filename) { if (!osgDB::fileExists( filename ) ) { return 0; } //Load up an index file OGRFeatureOptions featureOpt; featureOpt.url() = filename; featureOpt.buildSpatialIndex() = true; featureOpt.openWrite() = true; osg::ref_ptr< FeatureSource> features = FeatureSourceFactory::create( featureOpt ); if (!features.valid()) { OE_NOTICE << "Can't load " << filename << std::endl; return 0; } Status s = features->open(); if (s.isError()) { OE_WARN << s.message(); return 0L; } TileIndex* index = new TileIndex(); index->_features = features.get(); index->_filename = filename; return index; }
int main(int argc, char** argv) { osg::ArgumentParser arguments(&argc,argv); if (argc < 2) { return usage(""); } std::vector< FeatureID > toDelete; int fid; while (arguments.read("--delete", fid)) { toDelete.push_back( fid ); } std::vector< FeatureID > fids; while (arguments.read("--fid", fid)) { fids.push_back( fid ); } bool printFeatures = false; if (arguments.read("--printfeatures" )) printFeatures = true; std::string filename; //Get the first argument that is not an option for(int pos=1; pos<arguments.argc(); ++pos) { if (!arguments.isOption(pos)) { filename = arguments[ pos ]; } } if (filename.empty()) { return usage( "Please provide a filename" ); } bool write = toDelete.size() > 0; //Open the feature source OGRFeatureOptions featureOpt; featureOpt.url() = filename; featureOpt.openWrite() = write; osg::ref_ptr< FeatureSource > features = FeatureSourceFactory::create( featureOpt ); features->initialize(""); features->getFeatureProfile(); //Delete any features if requested if (toDelete.size() > 0) { for (unsigned int i = 0; i < toDelete.size(); ++i) { FeatureID fid = toDelete[i]; std::cout << "Deleting Feature " << fid << std::endl; features->deleteFeature( fid ); } } else if (fids.size() > 0) { //Print out any specific FIDs for (unsigned int i = 0; i < fids.size(); ++i) { FeatureID fid = fids[i]; osg::ref_ptr< Feature > feature = features->getFeature( fid ); if (feature.valid()) { printFeature( feature.get() ); } else { std::cout << "Couldn't get feature " << fid << std::endl; } } } else { //Print out feature info printStats( features.get() ); if (printFeatures) { printAllFeatures( features.get() ); } } return 0; }