[gdal-dev] RE Python ogr GetFieldAsString problem

Even Rouault even.rouault at spatialys.com
Wed May 13 14:02:03 PDT 2015


Steve,

I believe comma as decimal separator is invalid for a XML double. Hence the GML
driver only parses the value up to the comma. This could likely be improved to
accept comma, but technically I believe a XML validator would reject this GML.

Even

> More info.....
> ogr2ogr --version = GDAL 1.10.1, released 2013/08/26
> python --version = Python 2.7.3
>
> I have modified my script to get the field type
> while feat is not None:
>           feat_defn = layer.GetLayerDefn()
>           field_defn =
> feat_defn.GetFieldDefn(feat_defn.GetFieldIndex(attribut))
>           print field_defn.GetType()
>           if field_defn.GetType() == ogr.OFTReal:
>             print "%.4f" % feat.GetFieldAsDouble(attribut)
>           output.add(feat.GetFieldAsString(attribut))
>           feat = layer.GetNextFeature()
>
> It detects that it is a real, But GetFieldAsDouble also truncate the value
> at the comma
>
>
>
> Steve Toutant/INSPQ/SSSS
> 2015-05-13 15:11
>
> A
> gdal-dev at lists.osgeo.org
> cc
>
> Objet
> Python ogr GetFieldAsString problem
>
>
>
>
>
>
>
>
> I'm trying to parse a GML and read all the values of an attribute.
> Example
> <gml:featureMember>
>       <ms:SMDVDP_STAT_METE fid="SMDVDP_STAT_METE.2153">
>         <ms:LONG_STAT>-64,2131</ms:LONG_STAT>
>       </ms:SMDVDP_STAT_METE>
>     </gml:featureMember>
>
> DescribeFeatureType for this layer returns
> <element name="LONG_STAT" minOccurs="0" type="double"/>
>
> wfs_ds = ogr.Open(tmp_file.name)  #tmp_file.name is the response of a WFS
> getFeature request
> layer = wfs_ds.GetLayerByName('SMDVDP_STAT_METE ')
> feat = layer.GetNextFeature()
>       while feat is not None:
>           output.add(feat.GetFieldAsString('LONG_STAT'))
>           feat = layer.GetNextFeature()
>
> (At runtime, the WFs, layer and attribute can be anything of any type. And
> decimal separator, can be ',' or '.')
> The problem is that feat.GetFieldAsString('LONG_STAT') truncate the string
> to the comma
>
> So instead of having -64,2131, I get -64 in the output
>
> What is the appropriate way to get the value of an attribute?
>
> thanks you!
>
>
>
>
>
>


-- 
Spatialys - Geospatial professional services
http://www.spatialys.com


More information about the gdal-dev mailing list