4

I have a fairly large project and I would like to automate some tasks using Python. Problem is, I don’t have any experience with Python for ArcGIS. And I rarely use ArcGIS until something big like this comes up, and usually I am under some time constraint (smh) I am looking for some guidance (such as python syntax to use, methodology, etc.) to help me achieve the following, using the screenshots as a reference...

  1. The red dots denote multiple events that overlap each other (contain multiple records) that fall within the polygon buffer points (labeled A and B, respectively): Screenshot 1
  2. The events are part of a shapefile specific to a road corridor, so that each corridor shapefile may contain several event points, representing motor vehicle crashes at an intersection. Each event contains a field "YEAR" that has either 2007, 2008, 2009, or 2010 in the field.: enter image description here
  3. The polygon buffer shapefiles have a separate field for each year listed above. Most corridors have about 6-10 rows, representing checkpoints along the corridor. enter image description here

What I wish to accomplish is to:

  1. Count all the events that fall within in the polygon points.
  2. Populate the polygon fields for each year with the corresponding counts of the "YEAR" field in the event shapefiles to the "CNT_20XX" fields in the polygon shapefiles
  3. Example: Polygon A has a total of 10 events within it. The counts for each year are 2007= 3, 2008= 1, 2009= 2, 2010= 4; so the Polygon for point A would have its corresponding "CNT_20XX" fields populated with the sum of the counts for each year in the events shapefile.

So...can this be accomplished in python? Is there a non-python way to accomplish the same thing? I have 16 corridors.

PolyGeo
65.5k29 gold badges115 silver badges349 bronze badges
asked Jul 3, 2012 at 19:20

1 Answer 1

4

You could possibly do this with nested cursors and selection statements in Python. Something like the following, perhaps?

 polygons = arcpy.UpdateCursor(yourIntersectionsLayer)
 for row in polygons:
 arcpy.management.SelectLayerByAttribute(yourIntersectionsLayer,"NEW_SELECTION","\"ObjectID\" = "+str(row.ObjectID)) 
 #you now have one polygon at a time selected
 arcpy.management.SelectLayerByLocation(eventsLayer,"WITHIN",yourIntersectionsLayer)
 #this has selected the points within the polygon on the cursor
 year1=0
 year2=0
 year3=0
 for x in range(0,2):
 if x==0:
 eventCursor = arcpy.SearchCursor(eventsLayer,"\"Year\" = 2005")
 for event in eventCursor:
 year1+=1
 del event,eventCursor
 if x==1:
 eventCursor = arcpy.SearchCursor(eventsLayer,"\"Year\" = 2006")
 for event in eventCursor:
 year2+=1
 del event,eventCursor
 if x==2:
 eventCursor = arcpy.SearchCursor(eventsLayer,"\"Year\" = 2007")
 for event in eventCursor:
 year3+=1
 del event,eventCursor
 row.Year2005=year1
 row.Year2006=year2
 row.Year2007=year3
 polygon.updateRow(row)
del row,polygons

I haven't had a chance to test this in an environment with data yet, but it might be plausible. Here's some documentation on the cursors in ArcPy: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//002z0000001q000000

answered Jul 3, 2012 at 20:36
3
  • Thanks a lot @AHigh. I will give this a try. This sounds like a good cookbook project I can experiment with and perhaps learn from it, so I am going to give you a +1. I am going to hang on for a day or two and let others respond, if any before accepting the solution though. Many thanks. Commented Jul 3, 2012 at 20:51
  • 1
    Sure. Hopefully it helps, there's definitely room for optimization if it works. It may be a framework at any rate. Commented Jul 3, 2012 at 20:52
  • absolutely, no harm in trying it. Its a good start. Commented Jul 3, 2012 at 20:57

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.