I've only recently started using QGIS and it's Python API.
Currently I've loaded two OpenStreetMap datasets. I would like to remove lines with from the second set where the name is already present in the first.
There is a catch: the first dataset uses a field called
name1 while the second dataset uses a field called
What I've tried so far is fairly naive and non-pythonic:
- Store a list of all the values called
name1from the first dataset
- Iterate through all the fields in the second dataset and if
Nameattribute is contained in the
name1values array above, call QgsVectorLayer's
deleteFeature()passing the feature's
In code, the layer I want to delete from is called
Cropped and the list of all values called
name1 from the first dataset is called
roads so what I tried looks like this:
Cropped.startEditing() fields = Cropped.getFeatures() for f in fields: name = f.attribute('Name') count = roads.count(name) if count > 0: print 'removing ',name,count Cropped.deleteFeature(f.id()) Cropped.commitChanges()
True, but all
Cropped.deleteFeature(f.id()) calls return
I've also spotted this existing post on How to delete selected features in Qgis using Python which seems to tackle the exact problem. I am using QGIS version 2.14.0-Essen so I have tried this, based on the answer:
with edit(Cropped): for fid in fids: Cropped.deleteFeature(fid)
fids is a list of field ids that match the condition above.
False for every single call.
Any hints/tips on what I'm doing wrong/missing ?