Tengo una pregunta similar a esta ¿Cómo se rellena mediante programación un campo shapefile con áreas poligonales en OGR? pero la solución no parece funcionar para mí. Estoy tratando de importar un shapefile de PostGIS en python utilizando OGR, añadir un campo, a continuación, rellenar el campo con los datos de un csv basado en un ID y la fecha. Cuando imprimo los campos para la característica durante el bucle, el campo obtiene los datos correctos pero no está escribiendo en la capa o3_proj (las dos últimas sentencias de impresión). ¿Estoy utilizando la función SetFeature incorrectamente? Soy nuevo en PostGIS y en ogr, así que por favor habla despacio.
import os, ogr, gdal, csv
driver = ogr.GetDriverByName('PostgreSQL')
datasource = driver.Open("PG: host='localhost' port='54321' dbname='chicago' user='postgres'", update = 1)
o3_proj = datasource.GetLayerByName('o3_monitors(geom3528)')
date = []
maxozone = []
aqi = []
aqs_site_id = []
f = csv.reader(open('/ozone/ozone_data.csv','rU'))
x = list(f)
for iii in range(1,len(x)):
date.append(x[iii][0])
aqs_site_id.append(x[iii][1])
maxozone.append(float(x[iii][2]))
aqi.append(int(x[iii][3]))
daily_field = ogr.FieldDefn('temp_o3',ogr.OFTReal)
o3_proj.CreateField(daily_field)
for feat in o3_proj:
for jjj in range(0,len(date)):
if aqs_site_id[jjj] == feat.GetField(0) and date[jjj] == '03/06/2005':
o3_proj.SetFeature(feat)
feat.SetField2(6,maxozone[jjj])
o3_proj.SetFeature(feat)
print str(feat.GetField(0))+','+str(feat.GetField(1))+','+str(feat.GetField(2))+','+str(feat.GetField(3))+','+str(feat.GetField(4))+','+str(feat.GetField(5))+','+str(feat.GetField(6))
print o3_proj.GetFeature(feat.GetFID()).GetField(6)
Resultado de las declaraciones de impresión:
17-031-0064,41.79079,-87.60165,2001,2012,None,0.036
None
17-031-0076,41.7514,-87.71349,2004,2012,None,0.038
None
17-031-4007,42.06028,-87.86323,2002,2012,None,0.035
None
17-031-4201,42.14,-87.79922,2001,2012,None,0.031
None