[postgis-devel] Question about GDALDriverManager + gdal2wktraster
Jorge Arévalo
jorge.arevalo at gmail.com
Sat Jul 4 12:32:33 PDT 2009
Hello,
I have two versions of GDAL in my machine:
- GDAL 1.7.0 from SVN
- GDAL 1.7.0 with the WKT Raster driver I'm developing
Today, I've updated the wktraster code from svn. I have the revision 4256.
The last one. With this revision, there is a new version of gdal2wktraster
script.
I loaded this image
ftp://ftp.remotesensing.org/geotiff/samples/gdal_eg/cea.tif with and old
version of gdal2wktraster, that allowed GDAL to select the block size for
the tiles. Then, I could load the image with default tiles of 514x15, 35
tiles.
But with the new version of the script, I have to specify the block size by
hand. For example, 514x15 (or 100x100). When I try this:
gdal2wktraster.py -r cea.tif -t table_name -s 4267 -b 1 -k 514x15 -I -M -o
output.sql -v
I get this error:
ERROR 7: Assertion `FALSE' failed
in file `gdaldrivermanager.cpp', line 309
Reviewing the code, I saw that the last script's instruction called is:
pixels = band.ReadAsArray(xoff, yoff, valid_read_block_size[0],
valid_read_block_size[1],
target_block_size[0],
target_block_size[1])
That, somehow, should call the method "GDALDriverManager::RegisterDriver(
GDALDriver * poDriver )" from gdalmanager.cpp. The code of the method is
this:
int GDALDriverManager::RegisterDriver( GDALDriver * poDriver )
{
CPLMutexHolderD( &hDMMutex );
/* -------------------------------------------------------------------- */
/* If it is already registered, just return the existing */
/* index. */
/* -------------------------------------------------------------------- */
if( GetDriverByName( poDriver->GetDescription() ) != NULL )
{
int i;
for( i = 0; i < nDrivers; i++ )
{
if( papoDrivers[i] == poDriver )
{
return i;
}
}
CPLAssert( FALSE ); // -------> THE LINE THAT CAUSES THE CRASH
*******************************************
}
/* -------------------------------------------------------------------- */
/* Otherwise grow the list to hold the new entry. */
/* -------------------------------------------------------------------- */
papoDrivers = (GDALDriver **)
VSIRealloc(papoDrivers, sizeof(GDALDriver *) * (nDrivers+1));
papoDrivers[nDrivers] = poDriver;
nDrivers++;
if( poDriver->pfnCreate != NULL )
poDriver->SetMetadataItem( GDAL_DCAP_CREATE, "YES" );
if( poDriver->pfnCreateCopy != NULL )
poDriver->SetMetadataItem( GDAL_DCAP_CREATECOPY, "YES" );
int iResult = nDrivers - 1;
return iResult;
}
So, basically, with the base 1.7.0 version of GDAL, I can load the TIFF
file. With my version, crash in the previous method. Clearly, it's my
driver's problem, but I don't know why. I have a test code to create a
dataset using my driver and works... Why could the application crash when
trying to list the registered drivers while loading a TIFF file? I have the
TIFF driver loaded in my GDAL version.
Thanks in advance,
Best regards
Jorge
Paula Poundstone<http://www.brainyquote.com/quotes/authors/p/paula_poundstone.html>
- "I don't have a bank account because I don't know my mother's maiden
name."
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-devel/attachments/20090704/575f5daa/attachment.html>
More information about the postgis-devel
mailing list