Select polygons that overlap with other polygons within a single feature class
$begingroup$
I am running a script to identify polygons that overlap with other polygons within the same layer. I have managed to do this with the code below but the problem is that it is very slow (about 3 seconds per feature).
Is there anything I can do to improve its performance?
arcpy.CreateFeatureclass_management("results.gdb", "Overlapping_Polygons", "POLYGON", "lyr_existing_cadastre", "DISABLED", "DISABLED", arcpy.Describe("lyr_existing_cadastre").spatialReference)
arcpy.MakeFeatureLayer_management("results.gdb/Overlapping_Polygons", "lyr_Overlapping_Polygons")
arcpy.CreateFeatureclass_management("results.gdb", "Remaining_Polygons", "POLYGON", "lyr_existing_cadastre", "DISABLED", "DISABLED", arcpy.Describe("lyr_existing_cadastre").spatialReference)
arcpy.MakeFeatureLayer_management("results.gdb/Remaining_Polygons", "lyr_Remaining_Polygons")
arcpy.CreateFeatureclass_management("in_memory", "row", "POLYGON", "lyr_existing_cadastre", "DISABLED", "DISABLED", arcpy.Describe("lyr_existing_cadastre").spatialReference)
arcpy.MakeFeatureLayer_management("row", "lyr_row")
arcpy.AddSpatialIndex_management("lyr_existing_cadastre")
with arcpy.da.SearchCursor("lyr_existing_cadastre", ["OBJECTID"]) as search_cursor:
for row in search_cursor:
log("t {}".format(row[0]))
# Get the OBJECTID of row and use it to select row
arcpy.SelectLayerByAttribute_management("lyr_existing_cadastre", "NEW_SELECTION", ""OBJECTID" = " + str(row[0]))
# Copy row into a new feature class called row
arcpy.Append_management("lyr_existing_cadastre", "lyr_row", "NO_TEST")
# Remove row from the input
arcpy.DeleteFeatures_management("lyr_existing_cadastre")
# Select all features that intersect with row and copy them into the row feature class
arcpy.SelectLayerByLocation_management("lyr_existing_cadastre", "WITHIN", "lyr_row", selection_type="NEW_SELECTION")
arcpy.Append_management("lyr_existing_cadastre", "lyr_row", "NO_TEST")
# If there is more than one feature in the row feature class
# meaning there was something else in addition to row then delete those overlaps
# from the input and append everything in row into the output feature class
if (int(arcpy.GetCount_management("lyr_row").getOutput(0)) > 1):
arcpy.DeleteFeatures_management("lyr_existing_cadastre")
arcpy.Append_management("lyr_row", "lyr_Overlapping_Polygons", "NO_TEST")
else:
arcpy.Append_management("lyr_row", "lyr_Remaining_Polygons", "NO_TEST")
arcpy.SelectLayerByAttribute_management("lyr_existing_cadastre", "CLEAR_SELECTION")
arcpy.TruncateTable_management("lyr_row")
del search_cursor
python performance arcpy
New contributor
$endgroup$
add a comment |
$begingroup$
I am running a script to identify polygons that overlap with other polygons within the same layer. I have managed to do this with the code below but the problem is that it is very slow (about 3 seconds per feature).
Is there anything I can do to improve its performance?
arcpy.CreateFeatureclass_management("results.gdb", "Overlapping_Polygons", "POLYGON", "lyr_existing_cadastre", "DISABLED", "DISABLED", arcpy.Describe("lyr_existing_cadastre").spatialReference)
arcpy.MakeFeatureLayer_management("results.gdb/Overlapping_Polygons", "lyr_Overlapping_Polygons")
arcpy.CreateFeatureclass_management("results.gdb", "Remaining_Polygons", "POLYGON", "lyr_existing_cadastre", "DISABLED", "DISABLED", arcpy.Describe("lyr_existing_cadastre").spatialReference)
arcpy.MakeFeatureLayer_management("results.gdb/Remaining_Polygons", "lyr_Remaining_Polygons")
arcpy.CreateFeatureclass_management("in_memory", "row", "POLYGON", "lyr_existing_cadastre", "DISABLED", "DISABLED", arcpy.Describe("lyr_existing_cadastre").spatialReference)
arcpy.MakeFeatureLayer_management("row", "lyr_row")
arcpy.AddSpatialIndex_management("lyr_existing_cadastre")
with arcpy.da.SearchCursor("lyr_existing_cadastre", ["OBJECTID"]) as search_cursor:
for row in search_cursor:
log("t {}".format(row[0]))
# Get the OBJECTID of row and use it to select row
arcpy.SelectLayerByAttribute_management("lyr_existing_cadastre", "NEW_SELECTION", ""OBJECTID" = " + str(row[0]))
# Copy row into a new feature class called row
arcpy.Append_management("lyr_existing_cadastre", "lyr_row", "NO_TEST")
# Remove row from the input
arcpy.DeleteFeatures_management("lyr_existing_cadastre")
# Select all features that intersect with row and copy them into the row feature class
arcpy.SelectLayerByLocation_management("lyr_existing_cadastre", "WITHIN", "lyr_row", selection_type="NEW_SELECTION")
arcpy.Append_management("lyr_existing_cadastre", "lyr_row", "NO_TEST")
# If there is more than one feature in the row feature class
# meaning there was something else in addition to row then delete those overlaps
# from the input and append everything in row into the output feature class
if (int(arcpy.GetCount_management("lyr_row").getOutput(0)) > 1):
arcpy.DeleteFeatures_management("lyr_existing_cadastre")
arcpy.Append_management("lyr_row", "lyr_Overlapping_Polygons", "NO_TEST")
else:
arcpy.Append_management("lyr_row", "lyr_Remaining_Polygons", "NO_TEST")
arcpy.SelectLayerByAttribute_management("lyr_existing_cadastre", "CLEAR_SELECTION")
arcpy.TruncateTable_management("lyr_row")
del search_cursor
python performance arcpy
New contributor
$endgroup$
3
$begingroup$
Welcome to Code Review! The current question title, which states your concerns about the code, is too general to be useful here. Please edit to the site standard, which is for the title to simply state the task accomplished by the code. Please see How to get the best value out of Code Review: Asking Questions for guidance on writing good question titles.
$endgroup$
– Toby Speight
16 hours ago
2
$begingroup$
Thank you. I have made the edits. I hope it's better now.
$endgroup$
– Bhekani Khumalo
16 hours ago
add a comment |
$begingroup$
I am running a script to identify polygons that overlap with other polygons within the same layer. I have managed to do this with the code below but the problem is that it is very slow (about 3 seconds per feature).
Is there anything I can do to improve its performance?
arcpy.CreateFeatureclass_management("results.gdb", "Overlapping_Polygons", "POLYGON", "lyr_existing_cadastre", "DISABLED", "DISABLED", arcpy.Describe("lyr_existing_cadastre").spatialReference)
arcpy.MakeFeatureLayer_management("results.gdb/Overlapping_Polygons", "lyr_Overlapping_Polygons")
arcpy.CreateFeatureclass_management("results.gdb", "Remaining_Polygons", "POLYGON", "lyr_existing_cadastre", "DISABLED", "DISABLED", arcpy.Describe("lyr_existing_cadastre").spatialReference)
arcpy.MakeFeatureLayer_management("results.gdb/Remaining_Polygons", "lyr_Remaining_Polygons")
arcpy.CreateFeatureclass_management("in_memory", "row", "POLYGON", "lyr_existing_cadastre", "DISABLED", "DISABLED", arcpy.Describe("lyr_existing_cadastre").spatialReference)
arcpy.MakeFeatureLayer_management("row", "lyr_row")
arcpy.AddSpatialIndex_management("lyr_existing_cadastre")
with arcpy.da.SearchCursor("lyr_existing_cadastre", ["OBJECTID"]) as search_cursor:
for row in search_cursor:
log("t {}".format(row[0]))
# Get the OBJECTID of row and use it to select row
arcpy.SelectLayerByAttribute_management("lyr_existing_cadastre", "NEW_SELECTION", ""OBJECTID" = " + str(row[0]))
# Copy row into a new feature class called row
arcpy.Append_management("lyr_existing_cadastre", "lyr_row", "NO_TEST")
# Remove row from the input
arcpy.DeleteFeatures_management("lyr_existing_cadastre")
# Select all features that intersect with row and copy them into the row feature class
arcpy.SelectLayerByLocation_management("lyr_existing_cadastre", "WITHIN", "lyr_row", selection_type="NEW_SELECTION")
arcpy.Append_management("lyr_existing_cadastre", "lyr_row", "NO_TEST")
# If there is more than one feature in the row feature class
# meaning there was something else in addition to row then delete those overlaps
# from the input and append everything in row into the output feature class
if (int(arcpy.GetCount_management("lyr_row").getOutput(0)) > 1):
arcpy.DeleteFeatures_management("lyr_existing_cadastre")
arcpy.Append_management("lyr_row", "lyr_Overlapping_Polygons", "NO_TEST")
else:
arcpy.Append_management("lyr_row", "lyr_Remaining_Polygons", "NO_TEST")
arcpy.SelectLayerByAttribute_management("lyr_existing_cadastre", "CLEAR_SELECTION")
arcpy.TruncateTable_management("lyr_row")
del search_cursor
python performance arcpy
New contributor
$endgroup$
I am running a script to identify polygons that overlap with other polygons within the same layer. I have managed to do this with the code below but the problem is that it is very slow (about 3 seconds per feature).
Is there anything I can do to improve its performance?
arcpy.CreateFeatureclass_management("results.gdb", "Overlapping_Polygons", "POLYGON", "lyr_existing_cadastre", "DISABLED", "DISABLED", arcpy.Describe("lyr_existing_cadastre").spatialReference)
arcpy.MakeFeatureLayer_management("results.gdb/Overlapping_Polygons", "lyr_Overlapping_Polygons")
arcpy.CreateFeatureclass_management("results.gdb", "Remaining_Polygons", "POLYGON", "lyr_existing_cadastre", "DISABLED", "DISABLED", arcpy.Describe("lyr_existing_cadastre").spatialReference)
arcpy.MakeFeatureLayer_management("results.gdb/Remaining_Polygons", "lyr_Remaining_Polygons")
arcpy.CreateFeatureclass_management("in_memory", "row", "POLYGON", "lyr_existing_cadastre", "DISABLED", "DISABLED", arcpy.Describe("lyr_existing_cadastre").spatialReference)
arcpy.MakeFeatureLayer_management("row", "lyr_row")
arcpy.AddSpatialIndex_management("lyr_existing_cadastre")
with arcpy.da.SearchCursor("lyr_existing_cadastre", ["OBJECTID"]) as search_cursor:
for row in search_cursor:
log("t {}".format(row[0]))
# Get the OBJECTID of row and use it to select row
arcpy.SelectLayerByAttribute_management("lyr_existing_cadastre", "NEW_SELECTION", ""OBJECTID" = " + str(row[0]))
# Copy row into a new feature class called row
arcpy.Append_management("lyr_existing_cadastre", "lyr_row", "NO_TEST")
# Remove row from the input
arcpy.DeleteFeatures_management("lyr_existing_cadastre")
# Select all features that intersect with row and copy them into the row feature class
arcpy.SelectLayerByLocation_management("lyr_existing_cadastre", "WITHIN", "lyr_row", selection_type="NEW_SELECTION")
arcpy.Append_management("lyr_existing_cadastre", "lyr_row", "NO_TEST")
# If there is more than one feature in the row feature class
# meaning there was something else in addition to row then delete those overlaps
# from the input and append everything in row into the output feature class
if (int(arcpy.GetCount_management("lyr_row").getOutput(0)) > 1):
arcpy.DeleteFeatures_management("lyr_existing_cadastre")
arcpy.Append_management("lyr_row", "lyr_Overlapping_Polygons", "NO_TEST")
else:
arcpy.Append_management("lyr_row", "lyr_Remaining_Polygons", "NO_TEST")
arcpy.SelectLayerByAttribute_management("lyr_existing_cadastre", "CLEAR_SELECTION")
arcpy.TruncateTable_management("lyr_row")
del search_cursor
python performance arcpy
python performance arcpy
New contributor
New contributor
edited 9 mins ago
200_success
129k15153415
129k15153415
New contributor
asked 16 hours ago
Bhekani KhumaloBhekani Khumalo
213
213
New contributor
New contributor
3
$begingroup$
Welcome to Code Review! The current question title, which states your concerns about the code, is too general to be useful here. Please edit to the site standard, which is for the title to simply state the task accomplished by the code. Please see How to get the best value out of Code Review: Asking Questions for guidance on writing good question titles.
$endgroup$
– Toby Speight
16 hours ago
2
$begingroup$
Thank you. I have made the edits. I hope it's better now.
$endgroup$
– Bhekani Khumalo
16 hours ago
add a comment |
3
$begingroup$
Welcome to Code Review! The current question title, which states your concerns about the code, is too general to be useful here. Please edit to the site standard, which is for the title to simply state the task accomplished by the code. Please see How to get the best value out of Code Review: Asking Questions for guidance on writing good question titles.
$endgroup$
– Toby Speight
16 hours ago
2
$begingroup$
Thank you. I have made the edits. I hope it's better now.
$endgroup$
– Bhekani Khumalo
16 hours ago
3
3
$begingroup$
Welcome to Code Review! The current question title, which states your concerns about the code, is too general to be useful here. Please edit to the site standard, which is for the title to simply state the task accomplished by the code. Please see How to get the best value out of Code Review: Asking Questions for guidance on writing good question titles.
$endgroup$
– Toby Speight
16 hours ago
$begingroup$
Welcome to Code Review! The current question title, which states your concerns about the code, is too general to be useful here. Please edit to the site standard, which is for the title to simply state the task accomplished by the code. Please see How to get the best value out of Code Review: Asking Questions for guidance on writing good question titles.
$endgroup$
– Toby Speight
16 hours ago
2
2
$begingroup$
Thank you. I have made the edits. I hope it's better now.
$endgroup$
– Bhekani Khumalo
16 hours ago
$begingroup$
Thank you. I have made the edits. I hope it's better now.
$endgroup$
– Bhekani Khumalo
16 hours ago
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
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
});
}
});
Bhekani Khumalo is a new contributor. Be nice, and check out our Code of Conduct.
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%2fcodereview.stackexchange.com%2fquestions%2f212688%2fselect-polygons-that-overlap-with-other-polygons-within-a-single-feature-class%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Bhekani Khumalo is a new contributor. Be nice, and check out our Code of Conduct.
Bhekani Khumalo is a new contributor. Be nice, and check out our Code of Conduct.
Bhekani Khumalo is a new contributor. Be nice, and check out our Code of Conduct.
Bhekani Khumalo is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review 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.
Use MathJax to format equations. MathJax reference.
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%2fcodereview.stackexchange.com%2fquestions%2f212688%2fselect-polygons-that-overlap-with-other-polygons-within-a-single-feature-class%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
3
$begingroup$
Welcome to Code Review! The current question title, which states your concerns about the code, is too general to be useful here. Please edit to the site standard, which is for the title to simply state the task accomplished by the code. Please see How to get the best value out of Code Review: Asking Questions for guidance on writing good question titles.
$endgroup$
– Toby Speight
16 hours ago
2
$begingroup$
Thank you. I have made the edits. I hope it's better now.
$endgroup$
– Bhekani Khumalo
16 hours ago