// [[Rcpp::export]] Rcpp::List CPL_get_rgdal_drivers(int dummy) { int ndr = GetGDALDriverManager()->GetDriverCount(); Rcpp::CharacterVector name(ndr); Rcpp::CharacterVector long_name(ndr); Rcpp::LogicalVector create(ndr); Rcpp::LogicalVector copy(ndr); Rcpp::LogicalVector vattr(ndr); Rcpp::LogicalVector rattr(ndr); Rcpp::LogicalVector vsi_attr(ndr); for (int i = 0; i < ndr; i++) { GDALDriver *pDriver = GetGDALDriverManager()->GetDriver(i); name(i) = GDALGetDriverShortName( pDriver ); long_name(i) = GDALGetDriverLongName( pDriver ); create(i) = (pDriver->GetMetadataItem(GDAL_DCAP_CREATE) != NULL); copy(i) = (pDriver->GetMetadataItem(GDAL_DCAP_CREATECOPY) != NULL); vattr(i) = (pDriver->GetMetadataItem(GDAL_DCAP_VECTOR) != NULL); rattr(i) = (pDriver->GetMetadataItem(GDAL_DCAP_RASTER) != NULL); vsi_attr(i) = (pDriver->GetMetadataItem(GDAL_DCAP_VIRTUALIO) != NULL); } return Rcpp::DataFrame::create( Rcpp::Named("name") = name, Rcpp::Named("long_name") = long_name, Rcpp::Named("write") = create, Rcpp::Named("copy") = copy, Rcpp::Named("is_raster") = rattr, Rcpp::Named("is_vector") = vattr, Rcpp::Named("vsi") = vsi_attr); }
System::System() { // setup GDAL GDALAllRegister(); _trimOldestTiles = true; _numUnusedDatasetsToTrimFromCache = 10; _maxNumDatasets = (unsigned int)(double(vpb::getdtablesize()) * 0.8); _logDirectory = "logs"; _taskDirectory = "tasks"; _maxNumberOfFilesPerDirectory = 1000; readEnvironmentVariables(); // preload the .osg plugin so its available in case we need to output source files containing core osg nodes osgDB::Registry::instance()->loadLibrary(osgDB::Registry::instance()->createLibraryNameForExtension("osg")); GDALDriverManager *driverManager = GetGDALDriverManager(); if (driverManager) { for (int i = 0; i < driverManager->GetDriverCount(); ++i) { GDALDriver *driver = driverManager->GetDriver(i); if (driver) { const char *ext = driver->GetMetadataItem("DMD_EXTENSION"); if (ext && strlen(ext) != 0) { addSupportedExtension(ext, Source::IMAGE | Source::HEIGHT_FIELD, driver->GetMetadataItem(GDAL_DMD_LONGNAME)); } } } } // add entries that GDAL doesn't list via it's DMD_EXTENSIONS but is known to support addSupportedExtension("jpeg", Source::IMAGE | Source::HEIGHT_FIELD, "JPEG"); addSupportedExtension("tiff", Source::IMAGE | Source::HEIGHT_FIELD, "GeoTiff"); addSupportedExtension("pgm", Source::IMAGE | Source::HEIGHT_FIELD, "Netpbm"); addSupportedExtension("ppm", Source::IMAGE | Source::HEIGHT_FIELD, "Netpbm"); addSupportedExtension("shp", Source::SHAPEFILE, "Shape file loader"); addSupportedExtension("osgb", Source::MODEL, "OpenSceneGraph binary format"); addSupportedExtension("osgx", Source::MODEL, "OpenSceneGraph xml format"); addSupportedExtension("osgt", Source::MODEL, "OpenSceneGraph text/ascii format"); addSupportedExtension("osg", Source::MODEL, "OpenSceneGraph .osg ascii format"); addSupportedExtension("ive", Source::MODEL, "OpenSceneGraph .ive binary format"); }
GeoResource::GeoResource(int xsz, int ysz, int bsz, GDALDataType datatype, string filename, dictionary options) : _Filename(filename) { // format, driver, and file extension string format = Options::DefaultFormat(); //if (format == "GTiff") options["COMPRESS"] = "LZW"; GDALDriver *driver = GetGDALDriverManager()->GetDriverByName(format.c_str()); // TODO check for null driver and create method // Check extension string ext = driver->GetMetadataItem(GDAL_DMD_EXTENSION); if (ext != "" && _Filename.extension().string() != ('.'+ext)) _Filename = boost::filesystem::path(_Filename.string() + '.' + ext); // add options char **papszOptions = NULL; if (options.size()) { for (dictionary::const_iterator imap=options.begin(); imap!=options.end(); imap++) papszOptions = CSLSetNameValue(papszOptions,imap->first.c_str(),imap->second.c_str()); } // create file //BOOST_LOG_TRIVIAL(info) << Basename() << ": create new file " << xsz << " x " << ysz << " x " << bsz << std::endl; if (Options::Verbose() > 4) std::cout << Basename() << ": create new file " << xsz << " x " << ysz << " x " << bsz << std::endl; _GDALDataset.reset( driver->Create(_Filename.string().c_str(), xsz,ysz,bsz,datatype, papszOptions) ); if (_GDALDataset.get() == NULL) { //BOOST_LOG_TRIVIAL(fatal) << "Error creating " << _Filename.string() << CPLGetLastErrorMsg() << std::endl; std::cout << "Error creating " << _Filename.string() << CPLGetLastErrorMsg() << std::endl; } }
GDALDriver *OGRSFDriverRegistrar::GetDriverByName( const char * pszName ) { GDALDriverManager* poDriverManager = GetGDALDriverManager(); GDALDriver* poGDALDriver = poDriverManager->GetDriverByName(CPLSPrintf("OGR_%s", pszName)); if( poGDALDriver == NULL ) poGDALDriver = poDriverManager->GetDriverByName(pszName); if( poGDALDriver == NULL || poGDALDriver->GetMetadataItem(GDAL_DCAP_VECTOR) == NULL ) return NULL; return poGDALDriver; }
int OGRSFDriverRegistrar::GetDriverCount() { /* We must be careful only to return drivers that are actual OGRSFDriver* */ GDALDriverManager* poDriverManager = GetGDALDriverManager(); int nTotal = poDriverManager->GetDriverCount(); int nOGRDriverCount = 0; for(int i=0;i<nTotal;i++) { GDALDriver* poDriver = poDriverManager->GetDriver(i); if( poDriver->GetMetadataItem(GDAL_DCAP_VECTOR) != NULL ) nOGRDriverCount ++; } return nOGRDriverCount; }
OGRDataSourceH OGR_Dr_CopyDataSource( OGRSFDriverH hDriver, OGRDataSourceH hSrcDS, const char *pszNewName, char **papszOptions ) { VALIDATE_POINTER1( hDriver, "OGR_Dr_CopyDataSource", NULL ); VALIDATE_POINTER1( hSrcDS, "OGR_Dr_CopyDataSource", NULL ); VALIDATE_POINTER1( pszNewName, "OGR_Dr_CopyDataSource", NULL ); GDALDriver* poDriver = (GDALDriver*)hDriver; if( !poDriver->GetMetadataItem( GDAL_DCAP_CREATE ) ) { CPLError( CE_Failure, CPLE_NotSupported, "%s driver does not support data source creation.", poDriver->GetDescription() ); return NULL; } GDALDataset *poSrcDS = (GDALDataset*) hSrcDS; GDALDataset *poODS; poODS = poDriver->Create( pszNewName, 0, 0, 0, GDT_Unknown, papszOptions ); if( poODS == NULL ) return NULL; /* -------------------------------------------------------------------- */ /* Process each data source layer. */ /* -------------------------------------------------------------------- */ for( int iLayer = 0; iLayer < poSrcDS->GetLayerCount(); iLayer++ ) { OGRLayer *poLayer = poSrcDS->GetLayer(iLayer); if( poLayer == NULL ) continue; poODS->CopyLayer( poLayer, poLayer->GetLayerDefn()->GetName(), papszOptions ); } return (OGRDataSourceH)poODS; }
void OGRSFDriverRegistrar::RegisterDriver( OGRSFDriver * poDriver ) { GDALDriver* poGDALDriver = (GDALDriver*) GDALGetDriverByName( poDriver->GetName() ) ; if( poGDALDriver == NULL) { poDriver->SetDescription( poDriver->GetName() ); poDriver->SetMetadataItem("OGR_DRIVER", "YES"); if( poDriver->GetMetadataItem(GDAL_DMD_LONGNAME) == NULL ) poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, poDriver->GetName() ); poDriver->pfnOpenWithDriverArg = OpenWithDriverArg; if( poDriver->TestCapability(ODrCCreateDataSource) ) { poDriver->SetMetadataItem( GDAL_DCAP_CREATE, "YES" ); poDriver->pfnCreateVectorOnly = CreateVectorOnly; } if( poDriver->TestCapability(ODrCDeleteDataSource) ) { poDriver->pfnDeleteDataSource = DeleteDataSource; } poDriver->SetMetadataItem( GDAL_DCAP_VECTOR, "YES" ); GetGDALDriverManager()->RegisterDriver( poDriver ); } else { if( poGDALDriver->GetMetadataItem("OGR_DRIVER") == NULL) { CPLError(CE_Failure, CPLE_AppDefined, "A non OGR driver is registered with the same name: %s", poDriver->GetName()); } delete poDriver; } }
std::string FileExtension() { std::string format = Options::DefaultFormat(); GDALDriver *driver = GetGDALDriverManager()->GetDriverByName(format.c_str()); return driver->GetMetadataItem(GDAL_DMD_EXTENSION); }
SEXP RGDAL_GetDriverNames(void) { #ifdef GDALV2 SEXP ans, ansnames, vattr, rattr; #else SEXP ans, ansnames; #endif int pc=0; installErrorHandler(); int nDr=GDALGetDriverCount(); uninstallErrorHandlerAndTriggerError(); PROTECT(ans = NEW_LIST(4)); pc++; PROTECT(ansnames = NEW_CHARACTER(4)); pc++; SET_STRING_ELT(ansnames, 0, COPY_TO_USER_STRING("name")); SET_STRING_ELT(ansnames, 1, COPY_TO_USER_STRING("long_name")); SET_STRING_ELT(ansnames, 2, COPY_TO_USER_STRING("create")); SET_STRING_ELT(ansnames, 3, COPY_TO_USER_STRING("copy")); setAttrib(ans, R_NamesSymbol, ansnames); // PROTECT(sxpDriverList = allocVector(STRSXP, GDALGetDriverCount())); SET_VECTOR_ELT(ans, 0, NEW_CHARACTER(nDr)); SET_VECTOR_ELT(ans, 1, NEW_CHARACTER(nDr)); SET_VECTOR_ELT(ans, 2, NEW_LOGICAL(nDr)); SET_VECTOR_ELT(ans, 3, NEW_LOGICAL(nDr)); #ifdef GDALV2 PROTECT(vattr = NEW_LOGICAL(nDr)); pc++; PROTECT(rattr = NEW_LOGICAL(nDr)); pc++; #endif int i, flag; installErrorHandler(); for (i = 0; i < nDr; ++i) { #ifdef GDALV2 LOGICAL_POINTER(vattr)[i] = FALSE; LOGICAL_POINTER(rattr)[i] = FALSE; #endif GDALDriver *pDriver = GetGDALDriverManager()->GetDriver(i); #ifdef GDALV2 if(pDriver->GetMetadataItem(GDAL_DCAP_VECTOR) != NULL) LOGICAL_POINTER(vattr)[i] = TRUE; if(pDriver->GetMetadataItem(GDAL_DCAP_RASTER) != NULL) LOGICAL_POINTER(rattr)[i] = TRUE; #endif SET_STRING_ELT(VECTOR_ELT(ans, 0), i, mkChar(GDALGetDriverShortName( pDriver ))); SET_STRING_ELT(VECTOR_ELT(ans, 1), i, mkChar(GDALGetDriverLongName( pDriver ))); flag=0; if (GDALGetMetadataItem( pDriver, GDAL_DCAP_CREATE, NULL )) flag=1; LOGICAL_POINTER(VECTOR_ELT(ans, 2))[i] = flag; flag=0; if (GDALGetMetadataItem( pDriver, GDAL_DCAP_CREATECOPY, NULL )) flag=1; LOGICAL_POINTER(VECTOR_ELT(ans, 3))[i] = flag; } uninstallErrorHandlerAndTriggerError(); #ifdef GDALV2 setAttrib(ans, install("isVector"), vattr); setAttrib(ans, install("isRaster"), rattr); #endif UNPROTECT(pc); return(ans); }