streamline repetitive manual quality control

1704
0
01-28-2016 08:48 AM
KevinBell
Occasional Contributor III

So, I have the wonderful task of briefly looking over census blocks w/ residential zoning for an Emergency Management project.  I’m building a search atlas w/ data driven pages, so there will be a map for every block, and I need to clean up the weird polygons.  I also need to keep track of what I’ve already QC’d.  Here’s a python trick to streamline the process.

In my “censusBlocks” feature class I’ve added a field for “hasResidentialZoning” and also “QCd”.  I render it by category so QCd = 1 is green, and Null is just an outline.

In the python window inside ArcMAP, I run the script below.  It builds a list of OID’s where QCd is Null and HasResidentialZoning = 1 and then, inside the python window, when I type “x()” it zooms to the next censusblock and turns it green.  In the python window, if I hit the “up arrow” on my keyboard, it pastes in the previous line “x()” and hitting “enter” repeats the process.

It’s one move vs. having to select a row in the table, hit zoom-to, right-click the QCd field, field calculate to 1, then select the next row.  Boo Carpal Tunnel!  I can shut the map down and pick up where I left off.

import arcpy

mxd = arcpy.mapping.MapDocument('CURRENT')

df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]

lyr = arcpy.mapping.ListLayers(mxd, "censusBlocks", df)[0]

oids = []

with arcpy.da.SearchCursor("censusBlocks", 'OBJECTID') as c:

    for r in c:

        oids.append(r[0])

print len(oids)

def x():

    n = oids.pop()

    where = "OBJECTID = " + str(n) +'AND hasResidentialZone = 1 AND QCd IS NULL'

    arcpy.SelectLayerByAttribute_management(lyr, "NEW_SELECTION", where)

    df.zoomToSelectedFeatures()

    arcpy.CalculateField_management(lyr, 'QCd', 1)

    arcpy.SelectLayerByAttribute_management(lyr, "CLEAR_SELECTION")

If you need to modify this for similar repetitive tasks I can lend a hand if needed.

Happy mundane QC checks!

Kev

Tags (1)
0 Kudos
0 Replies