[gdal-dev] Fwd: NotImplementedError: Wrong number of arguments
for overloaded function 'Feature_SetField'.
Even Rouault
even.rouault at mines-paris.org
Wed Sep 7 01:16:20 EDT 2011
Le mercredi 07 septembre 2011 02:36:35, Ole Nielsen a écrit :
> Yes this seems to work. However, I get a huge amounts of warnings of the
> form
>
> >>> lyr.CreateField(fd)
>
> Warning 6: Normalized/laundered field name: 'A slightly long name' to 'A
> slightly'
> 0
>
> They obviously tell what name has been derived, but I don't want this
> output to clutter, and since that name is already available through your
> procedure they really should be suppressed. Can that be done?
Yes, you can surround the CreateField() call with :
gdal.PushErrorHandler('CPLQuietErrorHandler')
...
gdal.PopErrorHandler()
> Many thanks
> Ole
>
> On Tue, Sep 6, 2011 at 10:10 PM, Even Rouault
>
> <even.rouault at mines-paris.org>wrote:
> > Selon Ole Nielsen <ole.moller.nielsen at gmail.com>:
> > > Thanks - I was hoping I could rely on the library to do the intelligent
> > > truncation, but couldn't work it out.
> > > Can I just clarify that the name to use with SetField would then be
> > > what
> >
> > is
> >
> > > provided by your last line?
> > >
> > > layer_defn.GetFieldDefn(last_field_idx).GetNameRef()
> >
> > Yes
> >
> > > Cheers and thanks
> > > Ole
> > >
> > > On Tue, Sep 6, 2011 at 9:26 PM, Even Rouault
> > >
> > > <even.rouault at mines-paris.org>wrote:
> > > > Selon Ole Nielsen <ole.moller.nielsen at gmail.com>:
> > > > > Hi Even
> > > > >
> > > > > Thanks again for all your help - all tests now pass using either
> > > > > gdal
> >
> > 1.6
> >
> > > > or
> > > >
> > > > > 1.8. Just to summarise, there were three issues as I see them:
> > > > > 1. Bounding boxes for raster data are computed differently (but
> > > >
> > > > better)
> > > >
> > > > > in newer versions
> > > >
> > > > Specific to PixelIsPoint in the GTiff driver.
> > > >
> > > > > 2. While v1.6 of ogre would allow an single number of type
> > > >
> > > > numpy.ndarray
> > > >
> > > > > this is no longer allow. Casting it to a float solves the
> > > > > problem.
> > > >
> > > > I wasn't aware it could work before. There's perhaps now an ambiguity
> >
> > on
> >
> > > > which
> > > > method to use, due to the addition of new possibilities for
> > > > SetField() (just a
> > > > bling guess).
> > > >
> > > > > 3. New versions of ogre will not allow attribute names of length
> > > >
> > > > longer
> > > >
> > > > > than 10 (at least when using the ESRI driver). Formerly, I think
> >
> > it
> >
> > > > > silently
> > > > >
> > > > > truncated, now it is up to the user. That's at least what I did.
> > > >
> > > > I've a looked quickly a bit at your code and I've the feeling that
> > > > you truncate
> > > > yourself, instead of relying on OGR. The Shapefile driver does more
> >
> > than
> >
> > > > truncating. It also ensures uniqueness of the truncated names. For
> >
> > example,
> >
> > > > if
> > > > you try creating "a_very_long_name" and "a_very_long_name_again",
> > > > they
> >
> > will
> >
> > > > be
> > > > respectively truncated to "a_very_lon" and "a_very_l_1". A safer
> >
> > solution
> >
> > > > to get
> > > > the field name that got to the file would be to :
> > > >
> > > > field_defn = ogr.FieldDefn("a_very_long_name", ogr.OFTString)
> > > > lyr.CreateField(field_defn)
> > > > layer_defn = lyr.GetLayerDefn()
> > > > last_field_idx = layer_defn.GetFieldCount() - 1
> > > > real_field_name =
> > > > layer_defn.GetFieldDefn(last_field_idx).GetNameRef()
More information about the gdal-dev
mailing list