Así que estoy tratando de convertir el código de ArcGIS a QGIS. La parte que estoy en este momento es la conversión:
lst_fields = ["full_id", "osm_id", "osm_type", "boundary", "is_in", "leisure", "name", "type", "landuse"]
with arcpy.da.UpdateCursor(urh, lst_fields) as cursor:
for row in cursor:
...
Sin embargo, con QGIS tengo que utilizar en su lugar:
with edit(vector_layer):
for row in vector_layer.getFeatures(request):
No encontré la forma de obtener sólo los campos especificados en la lista aparte de hacer otro bucle for y hacer esto y luego almacenar los valores en otra lista:
row.attributes()[row.fields().indexFromName('boundary')]
El código que tengo ahora mismo es:
lst_fields = ["full_id", "osm_id", "osm_type", "boundary", "is_in", "leisure", "name", "type", "landuse"]
vector_layer = QgsVectorLayer(repertoire+'\\protected_areas.shp','ogr')
request = QgsFeatureRequest().setSubsetOfAttributes(lst_fields, vector_layer.fields())
with edit(vector_layer):
for row in vector_layer.getFeatures(request):
print(lst_fields)
print(row.fields().names())
La primera huella da esto:
['full_id', 'osm_id', 'osm_type', 'boundary', 'is_in', 'leisure', 'name', 'type', 'landuse']
La segunda huella da esto:
['full_id', 'osm_id', 'osm_type', 'boundary', 'is_in', 'leisure', 'name', 'type', 'wikidata', 'wikipedia', 'landuse', 'name_de', 'sagns_id', 'website']
Pensé que la petición haría que las dos impresiones dieran el mismo resultado. Volveré a decir cuál es mi pregunta por si no ha quedado claro:
¿Hay alguna forma de obtener sólo los campos especificados en la lista como era posible en arcGIS sin necesidad de otro bucle for que guardara el valor de 1 campo cada vez?