I am looping through a shapefile using a Search Cursor loop, and need to create a specific operation. I need to select the current feature that the loop is on, and then run a select by location operation on that selected feature. Once my operation is done, I then need to move onto the next feature in the loop. Here is my current code:
import arcpy
fc = r"V:/Metro/STOP_CONSOLIDATION/STOPS.gdb/Stop_Database_Points"
fields = ["BEGINSTOPI", "METRO", "GpsLongitu", "GpsLatitud"]
with arcpy.da.SearchCursor(fc, fields) as cursor:
for row in cursor:
arcpy.SelectLayerByLocation_management(point_lyr, overlap_type="WITHIN_A_DISTANCE", select_features=point_lyr, search_distance="1320 Feet", selection_type="NEW_SELECTION", invert_spatial_relationship="#")
ps, as a side note, how do I add code tags to the new board?
See here for Posting Code Blocks.
Hi! I am hoping to achieve this exact thing. Did you ever figure out how to do it, @ClintonCooper1 ?
Thanks!
You need to get the row ID or OBJECTID from the cursor, then use it in a SQL query in the selectlayerbyattribute to select the feature. Then use the selected feature in the select by location. Something like:
fc = r"V:/Metro/STOP_CONSOLIDATION/STOPS.gdb/Stop_Database_Points"
fields = ["OBJECTID", "BEGINSTOPI", "METRO", "GpsLongitu", "GpsLatitud"]
with arcpy.da.SearchCursor(fc, fields) as cursor:
for row in cursor:
whereclause = """OBJECTID = {}""".format(row[0])
selectLyr = arcpy.SelectLayerByAttribute_management(fc, "NEW_SELECTION", whereclause)
intersectLyr = arcpy.SelectLayerByLocation_management(point_lyr, overlap_type="WITHIN_A_DISTANCE", select_features=selectLyr,
search_distance="1320 Feet", selection_type="NEW_SELECTION",
invert_spatial_relationship="#")
then do something with the selected by location layer. You'll have to update the code to match your field names.
Although this approach will definitely work, I think a cleaner approach would be to retrieve the geometry in question and pass that to Select Layer By Location since that tool can accept ArcPy geometry objects as the selecting layer.
fc = r"V:/Metro/STOP_CONSOLIDATION/STOPS.gdb/Stop_Database_Points"
fields = ["SHAPE@", "OBJECTID", "BEGINSTOPI", "METRO", "GpsLongitu", "GpsLatitud"]
with arcpy.da.SearchCursor(fc, fields) as cursor:
for row in cursor:
shp = row[0]
intersectLyr = arcpy.SelectLayerByLocation_management(point_lyr, overlap_type="WITHIN_A_DISTANCE", select_features=shp,
search_distance="1320 Feet", selection_type="NEW_SELECTION",
invert_spatial_relationship="#")
That is pretty legit. Thanks!
Thank you very much, JeffK and JoshuaBixby, for your helpful replies!!