On 4/3/2017 11:37 PM, jratike80 wrote:
Stephen Woodbridge wrote
Hi All,

I have a shapefile(s) and I want to read the features, generate some
metrics about each feature and then add them to the that feature. I'm
using python and one obvious way to to in effect create a new shapefile
with the columns I need to add, then copy the existing shapefile to the
new one adding the additional metrics.

I wondering if I can add the new columns to the shapefile, then do a
read and update.

Pros and cons to these approaches? and how to do the later one if
possible?

I looked at the python gdal/ogr cookbook and didn't this specific
example. But I thinking of something along the lines of:

1. open the dataset for read/write
2. layer.CreateField() to add the new fields
3. loop through the features in the layer
4.    and use feature.SetField()
5.    and feature = None to commit the changes

will this work?

Thanks,
   -Steve

Hi,

You can demonstrate that it is possible with ogrinfo:

ogrinfo  -sql "alter table test add column foo integer" test.shp
ogrinfo  -dialect sqlite -sql "update test set foo=2" test.shp

Hi Jukka,

Ahh, good point, I always seem to forget that fact.
I have gotten the python code to add the new fields, but the data is not getting written to the file.

    # open the shapefile
    driver = ogr.GetDriverByName('ESRI Shapefile')
    dataSource = driver.Open(infile, 1) # open for rw
    if dataSource is None:
        print "ERROR: could not open '%s' as shapefile!" % (infile)
        sys.exit(1)

    layer = dataSource.GetLayer()
    layer.CreateField(ogr.FieldDefn("area",     ogr.OFTReal))


    for feature in layer:
        geom = feature.GetGeometryRef()
        feature.SetField("area", geom.GetArea())
        feature = None

    dataSource = None

In the cookbook example for "Create a New Shapefile and Add Data" there is a call to:

layer.CreateFeature(feature)

but I do not see an equivalent call for:

layer.UpdateFeature(feature)

So How do I update the feature and force the data to get written to the shapefile. I'm presuming the CreateFeature will append a new record which is not what I want.

-Steve

---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to