Deleting features in PyQGIS? The Next CEO of Stack OverflowPyqgis 2.2 : How to allow editing on layer and featuresCopying Multiple Selections (by Attribute) to One Output Shapefile using QGIS Python scripting?How to select features from one layer and save them to a memory layer?pyqgis: select features inside a buffer, then return some attributes of the selection as a listExecuting intersect algorithm with pyqgis?PyQGIS memory issuesCreating and manipulating an HTML frame in QGIS 3.2.0 Print Composer using PyQGISpyqgis - post-processing of layer output of QgsProcessingAlgorithmUsing parameterAsSink in QGIS processing script?Adding processed features and layer to QGIS 3 project
How badly should I try to prevent a user from XSSing themselves?
Does the Idaho Potato Commission associate potato skins with healthy eating?
What is a typical Mizrachi Seder like?
Prodigo = pro + ago?
What did the word "leisure" mean in late 18th Century usage?
Arrows in tikz Markov chain diagram overlap
How to find if SQL server backup is encrypted with TDE without restoring the backup
What steps are necessary to read a Modern SSD in Medieval Europe?
What happens if you break a law in another country outside of that country?
What difference does it make matching a word with/without a trailing whitespace?
Could a dragon use hot air to help it take off?
Would a grinding machine be a simple and workable propulsion system for an interplanetary spacecraft?
Gödel's incompleteness theorems - what are the religious implications?
Traveling with my 5 year old daughter (as the father) without the mother from Germany to Mexico
Is there a rule of thumb for determining the amount one should accept for a settlement offer?
A hang glider, sudden unexpected lift to 25,000 feet altitude, what could do this?
Small nick on power cord from an electric alarm clock, and copper wiring exposed but intact
How do I secure a TV wall mount?
pgfplots: How to draw a tangent graph below two others?
Why does the freezing point matter when picking cooler ice packs?
Is it possible to make a 9x9 table fit within the default margins?
How to coordinate airplane tickets?
Are British MPs missing the point, with these 'Indicative Votes'?
How can I separate the number from the unit in argument?
Deleting features in PyQGIS?
The Next CEO of Stack OverflowPyqgis 2.2 : How to allow editing on layer and featuresCopying Multiple Selections (by Attribute) to One Output Shapefile using QGIS Python scripting?How to select features from one layer and save them to a memory layer?pyqgis: select features inside a buffer, then return some attributes of the selection as a listExecuting intersect algorithm with pyqgis?PyQGIS memory issuesCreating and manipulating an HTML frame in QGIS 3.2.0 Print Composer using PyQGISpyqgis - post-processing of layer output of QgsProcessingAlgorithmUsing parameterAsSink in QGIS processing script?Adding processed features and layer to QGIS 3 project
I am comparing geometries of input layer and output layer features. I want to delete features in output layers which has equal geometry to input feature. I am using following code to do that.
for feat in drain.getFeatures():
for f in outLayer.getFeatures():
if feat.geometry().equals(f.geometry()):
outLayer.dataProvider().deleteFeatures([f.id()])
outLayer.updateFeature(f)
This code deletes features in output layer but while removing output layer from the Qgis desktop, input layer geometries disappears but features are there in attribute table.
What changes can I make in the code to make it work properly?
Here I am adding an image to make my doubt more clearer.
Here, "drain"is an input layer which is open in Qgis screen, it has attributes but features are not displayed(or visible) on the screen. It was coming correctly before executing the code given above.
pyqgis qgis-3 features
add a comment |
I am comparing geometries of input layer and output layer features. I want to delete features in output layers which has equal geometry to input feature. I am using following code to do that.
for feat in drain.getFeatures():
for f in outLayer.getFeatures():
if feat.geometry().equals(f.geometry()):
outLayer.dataProvider().deleteFeatures([f.id()])
outLayer.updateFeature(f)
This code deletes features in output layer but while removing output layer from the Qgis desktop, input layer geometries disappears but features are there in attribute table.
What changes can I make in the code to make it work properly?
Here I am adding an image to make my doubt more clearer.
Here, "drain"is an input layer which is open in Qgis screen, it has attributes but features are not displayed(or visible) on the screen. It was coming correctly before executing the code given above.
pyqgis qgis-3 features
add a comment |
I am comparing geometries of input layer and output layer features. I want to delete features in output layers which has equal geometry to input feature. I am using following code to do that.
for feat in drain.getFeatures():
for f in outLayer.getFeatures():
if feat.geometry().equals(f.geometry()):
outLayer.dataProvider().deleteFeatures([f.id()])
outLayer.updateFeature(f)
This code deletes features in output layer but while removing output layer from the Qgis desktop, input layer geometries disappears but features are there in attribute table.
What changes can I make in the code to make it work properly?
Here I am adding an image to make my doubt more clearer.
Here, "drain"is an input layer which is open in Qgis screen, it has attributes but features are not displayed(or visible) on the screen. It was coming correctly before executing the code given above.
pyqgis qgis-3 features
I am comparing geometries of input layer and output layer features. I want to delete features in output layers which has equal geometry to input feature. I am using following code to do that.
for feat in drain.getFeatures():
for f in outLayer.getFeatures():
if feat.geometry().equals(f.geometry()):
outLayer.dataProvider().deleteFeatures([f.id()])
outLayer.updateFeature(f)
This code deletes features in output layer but while removing output layer from the Qgis desktop, input layer geometries disappears but features are there in attribute table.
What changes can I make in the code to make it work properly?
Here I am adding an image to make my doubt more clearer.
Here, "drain"is an input layer which is open in Qgis screen, it has attributes but features are not displayed(or visible) on the screen. It was coming correctly before executing the code given above.
pyqgis qgis-3 features
pyqgis qgis-3 features
edited Mar 20 at 10:04
VaP
asked Mar 20 at 6:45
VaPVaP
464
464
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Decide either to work with the data provider or the layer, not both
Working directly on the layer has the advantage, that all internals of QGIS are notified about changes/deletions, whereas changes on the data provider just happen, but QGIS will have no information about that internally (just as if those changes would be done completely outside of QGIS). So any cached information inside QGIS (like in the attribute table) will still be there until loaded next time.
To delete the feature on the layer do
outLayer.deleteFeature(f.id())
Don't update a deleted feature
layer.updateFeature()
will apply any geometry or attribute changes you have done to you your feature to the data source. Since you have just deleted your feature there is nothing there to update any more.
If working on the layer, put it into edit mode
It's not required if you work on the data source, but if you work on the layer, it needs to be editable.
with edit(outLayer):
for drainFeature in drain.getFeatures():
for outFeature in outLayer.getFeatures():
if drainFeature.geometry().equals(outFeature.geometry()):
outLayer.deleteFeature(outFeature.id())
with edit() is giving name error. what can i do about it? I had tried outLayer.startEditing() does it work the same way?
– VaP
Mar 20 at 7:33
from qgis.core import edit
should do the trick.startEditing()
also works but you need to be careful to commit the changes in the end and handle exceptions.
– Matthias Kuhn
Mar 20 at 7:51
this solution didn't work. Input layer is not displaying just like before. Looking forward to get more suggestions.
– VaP
Mar 20 at 8:56
What exactly do you mean with "input layer is not displaying just like before"?
– Matthias Kuhn
Mar 20 at 9:31
I have edited the question to make it clear. Please check and give suggestions.
– VaP
Mar 20 at 10:06
|
show 5 more comments
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "79"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f316057%2fdeleting-features-in-pyqgis%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Decide either to work with the data provider or the layer, not both
Working directly on the layer has the advantage, that all internals of QGIS are notified about changes/deletions, whereas changes on the data provider just happen, but QGIS will have no information about that internally (just as if those changes would be done completely outside of QGIS). So any cached information inside QGIS (like in the attribute table) will still be there until loaded next time.
To delete the feature on the layer do
outLayer.deleteFeature(f.id())
Don't update a deleted feature
layer.updateFeature()
will apply any geometry or attribute changes you have done to you your feature to the data source. Since you have just deleted your feature there is nothing there to update any more.
If working on the layer, put it into edit mode
It's not required if you work on the data source, but if you work on the layer, it needs to be editable.
with edit(outLayer):
for drainFeature in drain.getFeatures():
for outFeature in outLayer.getFeatures():
if drainFeature.geometry().equals(outFeature.geometry()):
outLayer.deleteFeature(outFeature.id())
with edit() is giving name error. what can i do about it? I had tried outLayer.startEditing() does it work the same way?
– VaP
Mar 20 at 7:33
from qgis.core import edit
should do the trick.startEditing()
also works but you need to be careful to commit the changes in the end and handle exceptions.
– Matthias Kuhn
Mar 20 at 7:51
this solution didn't work. Input layer is not displaying just like before. Looking forward to get more suggestions.
– VaP
Mar 20 at 8:56
What exactly do you mean with "input layer is not displaying just like before"?
– Matthias Kuhn
Mar 20 at 9:31
I have edited the question to make it clear. Please check and give suggestions.
– VaP
Mar 20 at 10:06
|
show 5 more comments
Decide either to work with the data provider or the layer, not both
Working directly on the layer has the advantage, that all internals of QGIS are notified about changes/deletions, whereas changes on the data provider just happen, but QGIS will have no information about that internally (just as if those changes would be done completely outside of QGIS). So any cached information inside QGIS (like in the attribute table) will still be there until loaded next time.
To delete the feature on the layer do
outLayer.deleteFeature(f.id())
Don't update a deleted feature
layer.updateFeature()
will apply any geometry or attribute changes you have done to you your feature to the data source. Since you have just deleted your feature there is nothing there to update any more.
If working on the layer, put it into edit mode
It's not required if you work on the data source, but if you work on the layer, it needs to be editable.
with edit(outLayer):
for drainFeature in drain.getFeatures():
for outFeature in outLayer.getFeatures():
if drainFeature.geometry().equals(outFeature.geometry()):
outLayer.deleteFeature(outFeature.id())
with edit() is giving name error. what can i do about it? I had tried outLayer.startEditing() does it work the same way?
– VaP
Mar 20 at 7:33
from qgis.core import edit
should do the trick.startEditing()
also works but you need to be careful to commit the changes in the end and handle exceptions.
– Matthias Kuhn
Mar 20 at 7:51
this solution didn't work. Input layer is not displaying just like before. Looking forward to get more suggestions.
– VaP
Mar 20 at 8:56
What exactly do you mean with "input layer is not displaying just like before"?
– Matthias Kuhn
Mar 20 at 9:31
I have edited the question to make it clear. Please check and give suggestions.
– VaP
Mar 20 at 10:06
|
show 5 more comments
Decide either to work with the data provider or the layer, not both
Working directly on the layer has the advantage, that all internals of QGIS are notified about changes/deletions, whereas changes on the data provider just happen, but QGIS will have no information about that internally (just as if those changes would be done completely outside of QGIS). So any cached information inside QGIS (like in the attribute table) will still be there until loaded next time.
To delete the feature on the layer do
outLayer.deleteFeature(f.id())
Don't update a deleted feature
layer.updateFeature()
will apply any geometry or attribute changes you have done to you your feature to the data source. Since you have just deleted your feature there is nothing there to update any more.
If working on the layer, put it into edit mode
It's not required if you work on the data source, but if you work on the layer, it needs to be editable.
with edit(outLayer):
for drainFeature in drain.getFeatures():
for outFeature in outLayer.getFeatures():
if drainFeature.geometry().equals(outFeature.geometry()):
outLayer.deleteFeature(outFeature.id())
Decide either to work with the data provider or the layer, not both
Working directly on the layer has the advantage, that all internals of QGIS are notified about changes/deletions, whereas changes on the data provider just happen, but QGIS will have no information about that internally (just as if those changes would be done completely outside of QGIS). So any cached information inside QGIS (like in the attribute table) will still be there until loaded next time.
To delete the feature on the layer do
outLayer.deleteFeature(f.id())
Don't update a deleted feature
layer.updateFeature()
will apply any geometry or attribute changes you have done to you your feature to the data source. Since you have just deleted your feature there is nothing there to update any more.
If working on the layer, put it into edit mode
It's not required if you work on the data source, but if you work on the layer, it needs to be editable.
with edit(outLayer):
for drainFeature in drain.getFeatures():
for outFeature in outLayer.getFeatures():
if drainFeature.geometry().equals(outFeature.geometry()):
outLayer.deleteFeature(outFeature.id())
answered Mar 20 at 6:56
Matthias KuhnMatthias Kuhn
19.3k15194
19.3k15194
with edit() is giving name error. what can i do about it? I had tried outLayer.startEditing() does it work the same way?
– VaP
Mar 20 at 7:33
from qgis.core import edit
should do the trick.startEditing()
also works but you need to be careful to commit the changes in the end and handle exceptions.
– Matthias Kuhn
Mar 20 at 7:51
this solution didn't work. Input layer is not displaying just like before. Looking forward to get more suggestions.
– VaP
Mar 20 at 8:56
What exactly do you mean with "input layer is not displaying just like before"?
– Matthias Kuhn
Mar 20 at 9:31
I have edited the question to make it clear. Please check and give suggestions.
– VaP
Mar 20 at 10:06
|
show 5 more comments
with edit() is giving name error. what can i do about it? I had tried outLayer.startEditing() does it work the same way?
– VaP
Mar 20 at 7:33
from qgis.core import edit
should do the trick.startEditing()
also works but you need to be careful to commit the changes in the end and handle exceptions.
– Matthias Kuhn
Mar 20 at 7:51
this solution didn't work. Input layer is not displaying just like before. Looking forward to get more suggestions.
– VaP
Mar 20 at 8:56
What exactly do you mean with "input layer is not displaying just like before"?
– Matthias Kuhn
Mar 20 at 9:31
I have edited the question to make it clear. Please check and give suggestions.
– VaP
Mar 20 at 10:06
with edit() is giving name error. what can i do about it? I had tried outLayer.startEditing() does it work the same way?
– VaP
Mar 20 at 7:33
with edit() is giving name error. what can i do about it? I had tried outLayer.startEditing() does it work the same way?
– VaP
Mar 20 at 7:33
from qgis.core import edit
should do the trick. startEditing()
also works but you need to be careful to commit the changes in the end and handle exceptions.– Matthias Kuhn
Mar 20 at 7:51
from qgis.core import edit
should do the trick. startEditing()
also works but you need to be careful to commit the changes in the end and handle exceptions.– Matthias Kuhn
Mar 20 at 7:51
this solution didn't work. Input layer is not displaying just like before. Looking forward to get more suggestions.
– VaP
Mar 20 at 8:56
this solution didn't work. Input layer is not displaying just like before. Looking forward to get more suggestions.
– VaP
Mar 20 at 8:56
What exactly do you mean with "input layer is not displaying just like before"?
– Matthias Kuhn
Mar 20 at 9:31
What exactly do you mean with "input layer is not displaying just like before"?
– Matthias Kuhn
Mar 20 at 9:31
I have edited the question to make it clear. Please check and give suggestions.
– VaP
Mar 20 at 10:06
I have edited the question to make it clear. Please check and give suggestions.
– VaP
Mar 20 at 10:06
|
show 5 more comments
Thanks for contributing an answer to Geographic Information Systems Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f316057%2fdeleting-features-in-pyqgis%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown