[gdal-dev] Invalid node descriptor size in .sbn
Even Rouault
even.rouault at mines-paris.org
Wed Feb 12 08:34:26 PST 2014
Le mercredi 12 février 2014 15:27:05, Dennis Gocke a écrit :
> Hi Even,
>
> Thanks for the quick reply.
>
> regarding the last part:
> Here is some pseudo code to illustrate:
> I'm normally using the C# wrapper so Failures result in an exception.
>
> When doing the following:
> OpenShape()
> GetSpatRef()
> SetSpatialFilter()
> GetNextFeature() -> Exception "Invalid node descriptor size in .sbn"
>
> when doing the same just without GetSpatRef():
> OpenShape()
> SetSpatialFilter()
> GetNextFeature() -> No Exception
>
> This seemed strange to me.
Yes, for me too without deeper investigation. Well you shouldn't worry anymore
with the fix.
>
> With the increased Maximum value it is probably unlikely that this will
> still happen,
Yes that should be OK for shapefiles up to 2^24 * 8 = 134 millions shapes.
Although I'm wondering if that area of the code shouldn't be modified in a
different way, but the new value should be OK for now.
> but should this Problem with the SBN really result in a
> Failure or wouldn't be a Warning enough?
Well that's a self consistency test. So when it doesn't pass, a failure is
appropriate. Nominal working is sufficiently hard to implement, so optimizing
behaviour in non-nominal cases ...
>
> Kind regards,
> Dennis
>
>
>
> On Wed, Feb 12, 2014 at 2:53 PM, Even Rouault
>
> <even.rouault at mines-paris.org>wrote:
> > Le mercredi 12 février 2014 13:40:38, Dennis Gocke a écrit :
> > > Hi,
> > >
> > >
> > >
> > > I found a problem with the shape file driver that occurs when reading
> > > features with a spatial filter from a large shapefile that has a
> > > spatial index (sbn).
> > >
> > >
> > >
> > > The problem can be reproduced with this shapefile
> > > http://geofuse.geoeye.com/static/shp/GE1_2012.zip but it's not only
> > > this shapefile, I have others that show the problem, all of them are
> > > rather
> >
> > big.
> >
> > > Recalculating the spatial index (with ArcGIS) doesn't solve the
> > > problem, the files seem to be valid.
> > >
> > >
> > >
> > > When calling CPLGetLastError..() after the first GetNextFeature() a
> >
> > failure
> >
> > > is returned with the message "Invalid node descriptor size in .sbn :
> > > 503800".
> > >
> > > It seems one could just ignore the Failure and continue reading the
> > > features. Everything seems fine (although it probably did not use the
> > > spatial index for filtering).
> > >
> > > Perhaps a Warning instead of a Failure would suffice.
> > >
> > >
> > >
> > > The error is generated in sbnsearch.c because "nNodeDescCount>
> >
> > nMaxNodes".
> >
> > > It seems the maximum tree depth of 15 is not enough.
> > >
> > > Perhaps the maximum should be increased.
> >
> > Yes. Fixed by http://trac.osgeo.org/gdal/ticket/5383. The limitation to
> > 15 was
> > not really justified.
> >
> > > While testing this I also noticed a strange behavior. Sometimes
> > > GetLastError..() returned a failure and sometimes it did not. When not
> > > calling layer.GetSpatialRef() before calling GetNextFeature() the first
> > > time no failure was returned although it still of course had problems
> > > reading the sbn and "hSBN->sHooks.Error( szErrorMsg );" was still
> > > called.
> >
> > Hum not sure to follow you completely. But sometimes the error flag may
> > be cleared. The first time you call GetSpatialRef() it reads the .prj
> > file and I
> > can see that for some reason the routine that does it clears the error
> > flag.
> >
> > > This happens with the current development Version, but is also there in
> >
> > the
> >
> > > 1.10.0 Version.
> > >
> > > Best Regards,
> > >
> > > Dennis
> >
> > --
> > Geospatial professional services
> > http://even.rouault.free.fr/services.html
--
Geospatial professional services
http://even.rouault.free.fr/services.html
More information about the gdal-dev
mailing list