Hello All:
I am a newbie in python and working on a script that is supposed to update a feature class (fc) based on another table (Table1) by comparing/matching the records in the feature class (fc) to the table (Table1) based on a field "INCIDENT_ID." If there is a match it then updates the feature class(fc) based on the match from the table(not sure if that makes sense). Else: the unmatched records from the table (Table1) are new, so it takes these new records, performs a geocode which should also add XY fields and a spatialjoin of the geocode result with 3 polygon feature classes (ccd, ced, scd) and updates the necessary fields(ccd_name, ccd_desc, ced_name, ced_desc , scd_name and scd_desc) in the feature class(fc) based on the spatialjoin. So far, I have not been able to get the script to run and produce the desired output. And will gladly appreciate any help I can get to stir me in the right direction. I have also attached the script and the sample data I am working with.
I am a newbie in python and working on a script that is supposed to update a feature class (fc) based on another table (Table1) by comparing/matching the records in the feature class (fc) to the table (Table1) based on a field "INCIDENT_ID." If there is a match it then updates the feature class(fc) based on the match from the table(not sure if that makes sense). Else: the unmatched records from the table (Table1) are new, so it takes these new records, performs a geocode which should also add XY fields and a spatialjoin of the geocode result with 3 polygon feature classes (ccd, ced, scd) and updates the necessary fields(ccd_name, ccd_desc, ced_name, ced_desc , scd_name and scd_desc) in the feature class(fc) based on the spatialjoin. So far, I have not been able to get the script to run and produce the desired output. And will gladly appreciate any help I can get to stir me in the right direction. I have also attached the script and the sample data I am working with.
Code:
#Import system modules
import arcpy
import os
from arcpy import env
#Set environment
env.workspace = r"C:\Users\tim.bash\Documents\ArcGIS\test.gdb"
#Allow overwrite
arcpy.env.overwriteOutput = True
#Define table and features
Table = r"C:\Users\tim.bash\Documents\ArcGIS\test.gdb\Table1"
fClass = r"C:\Users\tim.bash\Documents\ArcGIS\test.gdb\TestData\fc"
ccd = r"C:\Users\tim.bash\Documents\ArcGIS\test.gdb\TestData\ccd" #polygon feature class
ced = r"C:\Users\tim.bash\Documents\ArcGIS\test.gdb\TestData\ced" #polygon feature class
scd = r"C:\Users\tim.bash\Documents\ArcGIS\test.gdb\TestData\scd" #polygon feature class
# fields from the table that should match the fClass
fieldTable = "INCIDENT_ID"
fieldFclass = "INCIDENT_ID"
# Create cursors
cur = arcpy.UpdateCursor(fClass)
row = cur.Next()
while row:
#Get the values in fieldTable from field "INCIDENT_ID"
fieldFclassID = row.GetValue("INCIDENT_ID")
cur2 = arcpy.SearchCursor(Table)
row2 = cur2.Next()
while row:
#Get the values in the fieldTable from field "INCIDENT_ID"
fieldTableID = row2.GetValue("INCIDENT_ID")
#If there is a match
if fieldFclassID == fieldTableID:
fClass = row2.GetValue(fieldTable)
row.SetValue(fieldFclass, fClass)
cur.UpdateRow(row)
print "Updated: ", fclass
#Exit out of loop if match is found
break
row2 = cur2.Next()
row = cur.Next()
#if match is not found, proceed to geocode
address_table = "Table"
address_locator = r"C:\Users\tim.bash\Documents\ArcGIS\test.gdb\Addresses_Zip_Locator"
geocode_result = "geocode_result"
#Add XY fields to the geocode_result and calculate XY
sr = arcpy.SpatialReference(3032)
with arcpy.da.UpdateCursor(geocode_result, ["SHAPE@XY", "X", "Y"], "", sr) as cursor:
for row in cursor:
row[1] = row[0][0]
row[2] = row[0][1]
cursor.updateRow(row)
del row, cursor
##Proceed to spatialjoin geocode_result with ccd, ced and scd
#create a polylayer
polylayers = [ccdlayer, cedlayer, scdlayer]
#make a feature layer for each polygon feature class
try:
arcpy.MakeFeatureLayer_management(ccd, ccdlayer)
arcpy.MakeFeatureLayer_management(ced, cedlayer)
arcpy.MakeFeatureLayer_management(scd, scdlayer)
except:
arcpy.GetMessages()
# create an update cursor for the spatialjoin process
rows = arcpy.UpdateCursor(geocode_result)
for row in rows:
rowshape = row.Shape
for layer in polylayers:
try:
arcpy.SelectLayerByLocation_management(layer, "WITHIN", rowshape, "", "NEW_SELECTION")
count = int(arcpy.GetCount_management(layer).getOutput(0))
except:
arcpy.GetMessages()
if count > 0:
rowslayer = arcpy.SearchCursor(layer)
for rowlayer in rowslayer:
if layer == ccdlayer:
row.ccd_name = str(int(rowlayer.CNCLDIST02))
row.ccd_desc = rowlayer.DistrictMembers
if layer == cedlayer:
row.ced_name = str(rowlayer.SECTION_ID)
row.ced_desc = str(rowlayer.SECTION_ID)
if layer == scdlayer:
row.scd_name = str(int(rowlayer.SUPER))
row.scd_desc = str(rowlayer.DistrictMembers)
rows.updateRow(row)
#Delete cursor and row objects to remove locks on the data
del row
del rows