From: <mco...@us...> - 2005-11-09 20:41:12
|
Update of /cvsroot/qgis/qgis/providers/ogr In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4817/providers/ogr Modified Files: Tag: multiple-layers-branch qgsogrprovider.cpp Log Message: - OGR provider now does sanity checking on valid layers for extent() - vector layer now specifies data provider layer when requesting layer extents Index: qgsogrprovider.cpp =================================================================== RCS file: /cvsroot/qgis/qgis/providers/ogr/qgsogrprovider.cpp,v retrieving revision 1.38.2.11 retrieving revision 1.38.2.12 diff -C2 -d -r1.38.2.11 -r1.38.2.12 *** qgsogrprovider.cpp 4 Nov 2005 16:07:06 -0000 1.38.2.11 --- qgsogrprovider.cpp 9 Nov 2005 20:41:05 -0000 1.38.2.12 *************** *** 294,297 **** --- 294,319 ---- } + + /** returns true if the given layer is valid + + Some multilayer data sources have non-geospatial layers. These are not + loaded , which can save a lot of memory especially given that some of these + non-geospatial layers contain a lot of feature and attribute data. (E.g., + the GDAL SDTS bug that treats all SDTS files as layers even though most of + the files contain metadata and not geospatial data.) + + */ + bool validLayer( size_t dataSourceLayerNum ) + { + if (layers.find( dataSourceLayerNum ) == layers.end() ) + { + QgsDebug( QString("invalid layer " + + QString::number(dataSourceLayerNum) ).ascii() ); + + return false; + } + return true; + } + /** these are essentially wrappers for OGR layers *************** *** 350,354 **** // try to open for update imp_->ogrDataSource = OGRSFDriverRegistrar::Open((const char *) uri.local8Bit(), ! TRUE, &imp_->ogrDriver); --- 372,376 ---- // try to open for update imp_->ogrDataSource = OGRSFDriverRegistrar::Open((const char *) uri.local8Bit(), ! FALSE, //TRUE, &imp_->ogrDriver); *************** *** 1007,1013 **** // TODO - make this function return the real extent ! QgsRect *QgsOgrProvider::extent(size_t dataSourceLayerNum) { ! // TODO: Find out where this new QgsRect is being lost (as reported by valgrind) return new QgsRect(imp_->layers[dataSourceLayerNum].extent->MinX, --- 1029,1040 ---- // TODO - make this function return the real extent ! QgsRect * QgsOgrProvider::extent(size_t dataSourceLayerNum) { ! // TODO: Find out where this new QgsRect is being lost (as reported by ! // valgrind) ! if ( ! imp_->validLayer( dataSourceLayerNum ) ) ! { ! return 0x0; ! } return new QgsRect(imp_->layers[dataSourceLayerNum].extent->MinX, |