Closed qgib closed 5 years ago
Author Name: Even Rouault (@rouault)
This still exists with 0.10.0, and this is not specifically due to the RPF A.TOC format, but the crash can happy with any raster format that declare subdatasets (HDF4, HDF5, OGDI raster, netCDF, RS2 and ADRG drivers are also concerned by this). The main raster has no data itself, but declares a list of subdatasets that can be opened by GDALOpen.
Here's the stack trace of the crash
Program received signal SIGABRT, Aborted.
[Switching to Thread -1280899392 (LWP 14925)]
0xffffe410 in +kernel_vsyscall ()
(gdb) bt
#_0 0xffffe410 in +kernel_vsyscall ()
#_3905 0xb59fc875 in raise () from /lib/tls/i686/cmov/libc.so.6
#_3906 0xb59fe201 in abort () from /lib/tls/i686/cmov/libc.so.6
#_3907 0xb62f462a in CPLErrorV (eErrClass=CE_Fatal, err_no=10, fmt=0xb69b7f44 "Pointer '%s' is NULL in '%s'.\
", args=0xbfdd213c "<\\177\\233�\\205\\201\\233�4\\236\\"�����")
at cpl_error.cpp:233
#_3908 0xb62f46c4 in CPLError (eErrClass=CE_Fatal, err_no=10, fmt=0xb69b7f44 "Pointer '%s' is NULL in '%s'.\
") at cpl_error.cpp:133
#_3909 0xb62cff8d in GDALGetOverviewCount (hBand=0x0) at gdalrasterband.cpp:1855
#_3910 0xb7165862 in [[QgsRasterLayer]]::readFile () from /usr/lib/libqgis_core.so.0.10
#_3911 0xb716b572 in [[QgsRasterLayer]]::QgsRasterLayer () from /usr/lib/libqgis_core.so.0.10
#_3912 0x080fccc6 in [[QgisApp]]::addRasterLayer ()
#_3913 0x08104abf in [[QgisApp]]::openLayer ()
#_10 0x080f9f5f in main ()
In fact, this is due to the following code snipet that makes the assumption that the return of GDALGetRasterBand(hDS, 1) will be non-NULL.
//check f this file has pyramids
GDALRasterBandH myGDALBand = GDALGetRasterBand( mGdalDataset, 1 ); //just use the first band
if( GDALGetOverviewCount(myGDALBand) > 0 )
{
hasPyramidsFlag=true;
}
else
{
hasPyramidsFlag=false;
}
The quickest fix is to apply the attached patch. In a longer term, it may be good to support subdatasets, by displaying the list of subdatasets to the user, as [[OpenEV]] does.
Author Name: Even Rouault (@rouault)
Frank,
I add you in CC as I don't know who to assign this. You might probably know better than me.
Author Name: Frank Warmerdam - (Frank Warmerdam -)
I have incorporated a variation on this patch in trunk (r...) that also treats files without bands as invalid in the isValidRasterFileName().
Currently isValidRasterFileName() does not provide any mechanism to report an error to the user, so the user just sees "is not a supported dataset". I would also like to change this, but I will address this as a followup patch. Even is also quite right that some sort of subdataset selection dialog would be very desirable for datasets like this with subdatasets.
Author Name: Frank Warmerdam - (Frank Warmerdam -)
Sorry, the last change was adfe7b81 (SVN r8694).
Author Name: Frank Warmerdam - (Frank Warmerdam -)
I have commited a change in trunk () that improves error propagation for raster layer open failures. In particular isValidRasterFileName() now returns an error message if the filename is a raster, but just not supported for some particular reason.
I'd still like to do something about subdataset support, but this seems more involved and I'm not sure what to do. So I'm closing this particular ticket. Feel free to open a new ticket specifically requesting subdataset support as an enhancement.
Author Name: Paolo Cavallini (@pcav)
The same problem makes it impossible to open a [[RasterLite]] db with more than one raster layer, see: https://trac.osgeo.org/gdal/ticket/3568
For instance, this: http://www.gaia-gis.it/planet_earth.sqlite fails: /home/paolo/Desktop/planet_earth.sqlite is not a supported raster data source This raster file has no bands and is invalid as a raster layer. Gdal can read it:
$ gdalinfo /media/disk/planet_earth.sqlite
Driver: Rasterlite/Rasterlite
Files:
Size is 512, 512
Coordinate System is @'
Subdatasets:
SUBDATASET_1_NAME=RASTERLITE:/media/disk/planet_earth.sqlite,table=elevation
SUBDATASET_1_DESC=RASTERLITE:/media/disk/planet_earth.sqlite,table=elevation
SUBDATASET_2_NAME=RASTERLITE:/media/disk/planet_earth.sqlite,table=population
SUBDATASET_2_DESC=RASTERLITE:/media/disk/planet_earth.sqlite,table=population
SUBDATASET_3_NAME=RASTERLITE:/media/disk/planet_earth.sqlite,table=shaded_color
SUBDATASET_3_DESC=RASTERLITE:/media/disk/planet_earth.sqlite,table=shaded_color
SUBDATASET_4_NAME=RASTERLITE:/media/disk/planet_earth.sqlite,table=shaded_gray
SUBDATASET_4_DESC=RASTERLITE:/media/disk/planet_earth.sqlite,table=shaded_gray
Corner Coordinates:
Upper Left ( 0.0, 0.0)
Lower Left ( 0.0, 512.0)
Upper Right ( 512.0, 0.0)
Lower Right ( 512.0, 512.0)
Center ( 256.0, 256.0)
$ gdalinfo RASTERLITE:/media/disk/planet_earth.sqlite,table=elevation
Driver: Rasterlite/Rasterlite
Files: /media/disk/planet_earth.sqlite
Size is 43200, 18000
Coordinate System is:
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY[[EPSG""7030]],
AUTHORITY[[EPSG""6326]],
PRIMEM["Greenwich",0,
AUTHORITY[[EPSG""8901]],
UNIT["degree",0.01745329251994328,
AUTHORITY[[EPSG""9122]],
AUTHORITY[[EPSG""4326]]
Origin = (-180.000000000000000,89.999999999999972)
Pixel Size = (0.008333333333300,-0.008333333333300)
Metadata:
TILE_FORMAT=JPEG
Image Structure Metadata:
INTERLEAVE=PIXEL
COMPRESSION=JPEG
Corner Coordinates:
Upper Left (-180.0000000, 90.0000000) (180d 0'0.00"W, 90d 0'0.00"N)
Lower Left (-180.0000000, -60.0000000) (180d 0'0.00"W, 60d 0'0.00"S)
Upper Right ( 180.0000000, 90.0000000) (180d 0'0.00"E, 90d 0'0.00"N)
Lower Right ( 180.0000000, -60.0000000) (180d 0'0.00"E, 60d 0'0.00"S)
Center ( -0.0000000, 15.0000000) ( 0d 0'0.00"W, 15d 0'0.00"N)
Band 1 Block=400x500 Type=Byte, [[ColorInterp]]=Red
Overviews: 21600x9000, 10800x4500, 5400x2250, 2700x1125, 1350x563, 675x281,
338x141
Band 2 Block=400x500 Type=Byte, [[ColorInterp]]=Green
Overviews: 21600x9000, 10800x4500, 5400x2250, 2700x1125, 1350x563, 675x281,
338x141
Band 3 Block=400x500 Type=Byte, [[ColorInterp]]=Blue
Overviews: 21600x9000, 10800x4500, 5400x2250, 2700x1125, 1350x563, 675x281,
338x141
So this is a QGIS limitation : it cannot handle images with subdatasets.
Author Name: Jürgen Fischer (@jef-n)
Author Name: Jürgen Fischer (@jef-n)
Author Name: Jürgen Fischer (@jef-n)
applied in d72cfb4b (SVN r14065).
Author Name: Etienne Tourigny (@etiennesky)
Sub-layer selection does not work any more...
The problem is that QgsGdalProvider::QgsGdalProvider() deletes the dataset here:
GDALRasterBandH myGDALBand = GDALGetRasterBand( mGdalDataset, 1 ); //just use the first band if ( myGDALBand == NULL ) {
And when qgisapp.cpp calls layer->subLayers() the dataset is invalid, which results in the following error:
ERROR 10: Pointer 'hObject' is NULL in 'GDALGetMetadata'.
My suggestion is to check if dataset is null in subLayers_() and add code like in isValidRasterFileName() (i.e. create a new dataset with GDALOpen())
Attaching an example file.
I would be happy to help out if I can - cannot re-open this bug though. I can prepare a patch although I am busy these days.
Thanks
Debug output below (some superflous "TMP ET..." messages added)
Debug: src/app/qgisapp.cpp: 6398: (addRasterLayer) TMP ET addRasterLayer
Debug: src/gui/qgisgui.cpp: 38: (openFilesRememberingFilter) Opening file dialog with filters: [GDAL] All files (*);;[GDAL] Virtual Raster (*.vrt *.VRT);;[GDAL] GeoTIFF (*.tif *.tiff *.TIF *.TIFF);;[GDAL] National Imagery Transmission Format (*.ntf *.NTF);;[GDAL] Raster Product Format TOC format (*.toc *.TOC);;[GDAL] ECRG TOC format (*.xml *.XML);;[GDAL] Erdas Imagine Images (*.img *.IMG);;[GDAL] Ground-based SAR Applications Testbed File Format (*.gff *.GFF);;[GDAL] Arc/Info Binary Grid (hdr.adf HDR.ADF);;[GDAL] Arc/Info ASCII Grid (*.asc *.ASC);;[GDAL] SDTS Raster (*.ddf *.DDF);;[GDAL] DTED Elevation Raster (*.dt0 *.dt1 *.dt2 *.DT0 *.DT1 *.DT2);;[GDAL] Portable Network Graphics (*.png *.PNG);;[GDAL] JPEG JFIF (*.jpg *.jpeg *.JPG *.JPEG);;[GDAL] Japanese DEM (*.mem *.MEM);;[GDAL] Graphics Interchange Format (*.gif *.GIF);;[GDAL] Graphics Interchange Format (*.gif *.GIF);;[GDAL] Envisat Image Format (*.n1 *.N1);;[GDAL] X11 PixMap Format (*.xpm *.XPM);;[GDAL] MS Windows Device Independent Bitmap (*.bmp *.BMP);;[GDAL] PCIDSK Database File (*.pix *.PIX);;[GDAL] PCRaster Raster File (*.map *.MAP);;[GDAL] ILWIS Raster Map (*.mpr *.mpl *.MPR *.MPL);;[GDAL] SGI Image File Format 1.0 (*.rgb *.RGB);;[GDAL] SRTMHGT File Format (*.hgt *.HGT);;[GDAL] Leveller heightfield (*.ter *.TER);;[GDAL] Terragen heightfield (*.ter *.TER);;[GDAL] GMT NetCDF Grid Format (*.nc *.NC);;[GDAL] Network Common Data Format (*.nc *.NC);;[GDAL] JPEG-2000 part 1 (*.jp2 *.j2k *.JP2 *.J2K);;[GDAL] GRIdded Binary (*.grb *.GRB);;[GDAL] Raster Matrix Format (*.rsw *.RSW);;[GDAL] EUMETSAT Archive native (*.nat *.NAT);;[GDAL] Idrisi Raster A.1 (*.rst *.RST);;[GDAL] Golden Software ASCII Grid (*.grd *.GRD);;[GDAL] Golden Software Binary Grid (*.grd *.GRD);;[GDAL] Golden Software 7 Binary Grid (*.grd *.GRD);;[GDAL] DRDC COASP SAR Processor Raster (*.hdr *.HDR);;[GDAL] R Object Data Store (*.rda *.RDA);;[GDAL] Portable Pixmap Format (*.pnm *.PNM);;[GDAL] ESRI .hdr Labelled (*.bil *.BIL);;[GDAL] Vexcel MFF Raster (*.hdr *.HDR);;[GDAL] VTP .bt (Binary Terrain) 1.3 Format (*.bt *.BT);;[GDAL] FARSITE v.4 Landscape File (*.lcp *.LCP);;[GDAL] NOAA Vertical Datum .GTX (*.gtx *.GTX);;[GDAL] NTv2 Datum Grid Shift (*.gsb *.GSB);;[GDAL] ACE2 (*.ace2 *.ACE2);;[GDAL] Snow Data Assimilation System (*.hdr *.HDR);;[GDAL] Swedish Grid RIK (*.rik *.RIK);;[GDAL] USGS Optional ASCII DEM (*.dem *.DEM);;[GDAL] GeoSoft Grid Exchange Format (*.gxf *.GXF);;[GDAL] Hierarchical Data Format Release 5 (*.hdf5 *.HDF5);;[GDAL] Northwood Numeric Grid Format .grd/.tab (*.grd *.GRD);;[GDAL] Northwood Classified Grid Format .grc/.tab (*.grc *.GRC);;[GDAL] ARC Digitized Raster Graphics (*.gen *.GEN);;[GDAL] Standard Raster Product (*.img *.IMG);;[GDAL] Magellan topo (*.blx *.BLX);;[GDAL] Rasterlite (*.sqlite *.SQLITE);;[GDAL] SAGA GIS Binary Grid (*.sdat *.SDAT);;[GDAL] ASCII Gridded XYZ (*.xyz *.XYZ);;[GDAL] HF2/HFZ heightfield raster (*.hf2 *.HF2);;[GDAL] Arc/Info Export E00 GRID (*.e00 *.E00);;[GDAL] ZMap Plus Grid (*.dat *.DAT);;[GDAL] NOAA NGS Geoid Height Grids (*.bin *.BIN);;[GDAL] MBTiles (*.mbtiles *.MBTILES)
Debug: src/gui/qgisgui.cpp: 78: (openFilesRememberingFilter) Writing last used dir: /data/research/work/gdal/gdal-netcdf/narrcap
Debug: src/app/qgisapp.cpp: 6411: (addRasterLayer) TMP ET addRasterLayer opendfiles
Debug: src/app/qgisapp.cpp: 6593: (addRasterLayers) TMP ET addRasterLayers
Debug: src/app/qgisapp.cpp: 6624: (addRasterLayers) TMP ET addRasterLayers calling isValidRasterFileName()
Debug: src/core/raster/qgsrasterlayer.cpp: 2135: (loadProviderLibrary) theProviderKey = gdal
Debug: src/core/raster/qgsrasterlayer.cpp: 2139: (loadProviderLibrary) myLibPath = /home/softdev/lib/qgis/plugins/libgdalprovider.so
Debug: src/core/raster/qgsrasterlayer.cpp: 2161: (loadProviderLibrary) Library name is /home/softdev/lib/qgis/plugins/libgdalprovider.so
Debug: src/core/raster/qgsrasterlayer.cpp: 2169: (loadProviderLibrary) Loaded data provider library
Debug: src/providers/gdal/qgsgdalprovider.cpp: 1801: (isValidRasterFileName) TMP ET isValidRasterFileName()
Debug: src/providers/gdal/qgsgdalprovider.cpp: 1250: (subLayers_) sublayers:
NETCDF:"/data/research/work/gdal/gdal-netcdf/narrcap/orog_CRCM.nc":lon
NETCDF:"/data/research/work/gdal/gdal-netcdf/narrcap/orog_CRCM.nc":lat
NETCDF:"/data/research/work/gdal/gdal-netcdf/narrcap/orog_CRCM.nc":orog
Debug: src/app/qgisapp.cpp: 6636: (addRasterLayers) TMP ET addRasterLayers - creating layer
Debug: src/core/qgsmaplayer.cpp: 53: (QgsMapLayer) lyrname is 'orog_CRCM'
Debug: src/core/qgsmaplayer.cpp: 59: (QgsMapLayer) layerName is 'orog_CRCM'
Debug: src/core/raster/qgsrasterlayer.cpp: 98: (QgsRasterLayer) Entered
Debug: src/core/raster/qgsrastershader.cpp: 25: (QgsRasterShader) called.
Debug: src/core/raster/qgsrastershaderfunction.cpp: 24: (QgsRasterShaderFunction) entered.
Debug: src/core/qgsmaplayer.cpp: 104: (setLayerName) new name is 'orog_CRCM'
Debug: src/core/raster/qgsrastershader.cpp: 25: (QgsRasterShader) called.
Debug: src/core/raster/qgsrastershaderfunction.cpp: 24: (QgsRasterShaderFunction) entered.
Debug: src/core/raster/qgsrasterlayer.cpp: 2176: (loadProvider) Entered
Debug: src/core/raster/qgsrasterlayer.cpp: 2135: (loadProviderLibrary) theProviderKey = gdal
Debug: src/core/raster/qgsrasterlayer.cpp: 2139: (loadProviderLibrary) myLibPath = /home/softdev/lib/qgis/plugins/libgdalprovider.so
Debug: src/core/raster/qgsrasterlayer.cpp: 2161: (loadProviderLibrary) Library name is /home/softdev/lib/qgis/plugins/libgdalprovider.so
Debug: src/core/raster/qgsrasterlayer.cpp: 2169: (loadProviderLibrary) Loaded data provider library
Debug: src/core/raster/qgsrasterlayer.cpp: 2178: (loadProvider) Library loaded
Debug: src/core/raster/qgsrasterlayer.cpp: 2185: (loadProvider) Attempting to resolve the classFactory function
Debug: src/core/raster/qgsrasterlayer.cpp: 2193: (loadProvider) Getting pointer to a mDataProvider object from the library
Debug: src/providers/gdal/qgsgdalprovider.cpp: 92: (QgsGdalProvider) QgsGdalProvider: constructing with uri '/data/research/work/gdal/gdal-netcdf/narrcap/orog_CRCM.nc'.
Debug: src/providers/gdal/qgsgdalprovider.cpp: 118: (QgsGdalProvider) GdalDataset opened
Debug: src/app/qgscustomization.cpp: 778: (customizeWidget) objectName = event type = 17
Debug: src/app/qgscustomization.cpp: 780: (customizeWidget) QMessageBox x QDialog
Debug: src/core/raster/qgsrasterlayer.cpp: 2207: (loadProvider) Data driver created
Debug: src/core/raster/qgsrasterlayer.cpp: 2259: (setDataProvider) Instantiated the data provider plugin with layer list of and style list of and format of and CRS of
Debug: src/providers/gdal/qgsgdalprovider.cpp: 1194: (isValid) valid = 0
Debug: src/app/qgisapp.cpp: 6638: (addRasterLayers) TMP ET addRasterLayers - calling subLayers()
Debug: src/providers/gdal/qgsgdalprovider.cpp: 1570: (subLayers) TMP ET QgsGdalProvider::subLayers()
ERROR 10: Pointer 'hObject' is NULL in 'GDALGetMetadata'.
Debug: src/providers/gdal/qgsgdalprovider.cpp: 1250: (subLayers_) sublayers:
Debug: src/app/qgisapp.cpp: 6640: (addRasterLayers) TMP ET addRasterLayers got
Debug: src/providers/gdal/qgsgdalprovider.cpp: 329: (~QgsGdalProvider) QgsGdalProvider: deconstructing.
Author Name: hamiltonsean69 - (hamiltonsean69 -) Original Redmine Issue: 1040
Redmine category:rasters Assignee: Jürgen Fischer
When I try to add a raster layer and select RPF>A.TOC file the entire program closes out without any warning or anything. This occurs on both the windows version and Linux version that I am using. This map data is good. It was download striaght from NGA website on a secret network.