import arcpy, os, sys #set map doc and the layer to be used mxd = arcpy.mapping.MapDocument("Current") mapLyr = arcpy.mapping.ListLayers(mxd, "CUR_Master_Network_2045")[0] rows = arcpy.UpdateCursor(mapLyr) for row in rows: row.F2010_AB_C = 0 #clear all capacities to 0 row.F2010_BA_C = 0 row.F2019_AB_C = 0 row.F2019_BA_C = 0 row.F2025_AB_C = 0 row.F2025_BA_C = 0 row.F2045_AB_C = 0 row.F2045_BA_C = 0 rows.updateRow(row) #find capacity variables rnam = row.getValue("ROAD_NAM") ffc = row.getValue("LRTP_FFC") at = row.getValue("TYPE_AREA") lan = row.getValue("F2010_NUML") dic = {"ROAD_NAM": rnam, "LRTP_FFC": ffc, "TYPE_AREA": at} #begin capacity calculation if row.BUILD_STAT == 10 and row.F2010_DIR == 1: row.F2010_AB_C = capacity(**dic) * lan rows.updateRow(row) elif row.BUILD_STAT == 10 and row.F2010_DIR == -1: row.F2010_AB_C = capacity(**dic) * lan rows.updateRow(row) elif row.BUILD_STAT == 10 and row.F2010_DIR == 0: row.F2010_AB_C = capacity(**dic) * lan row.F2010_BA_C = capacity(**dic) * lan rows.updateRow(row) else: pass del row, rows
import arcpy, os, sys #set map doc and the layer to be used mxd = arcpy.mapping.MapDocument("Current") mapLyr = arcpy.mapping.ListLayers(mxd, "CUR_Master_Network_2045")[0] rows = arcpy.UpdateCursor(mapLyr) for row in rows: row.F2010_AB_C = 0 #clear all capacities to 0 row.F2010_BA_C = 0 row.F2019_AB_C = 0 row.F2019_BA_C = 0 row.F2025_AB_C = 0 row.F2025_BA_C = 0 row.F2045_AB_C = 0 row.F2045_BA_C = 0 rows.updateRow(row) #find capacity variables rnam = row.getValue("ROAD_NAM") ffc = row.getValue("LRTP_FFC") at = row.getValue("TYPE_AREA") lan = row.getValue("F2010_NUML") dic = {"ROAD_NAM": rnam, "LRTP_FFC": ffc, "TYPE_AREA": at} #begin capacity calculation if row.BUILD_STAT == 10 and row.F2010_DIR == 1: row.F2010_AB_C = capacity(**dic) * lan rows.updateRow(row) if row.F2019_DIR == 1: row.F2019_AB_C = capacity(**dic) * lan rows.updateRow(row) elif row.F2019_DIR == -1: row.F2019_BA_C = capacity(**dic) * lan rows.updateRow(row) else: row.F2019_AB_C = capacity(**dic) * lan row.F2019_BA_C = capacity(**dic) * lan elif row.BUILD_STAT == 10 and row.F2010_DIR == -1: row.F2010_AB_C = capacity(**dic) * lan rows.updateRow(row) if row.F2019_DIR == 1: row.F2019_AB_C = capacity(**dic) * lan rows.updateRow(row) elif row.F2019_DIR == -1: row.F2019_BA_C = capacity(**dic) * lan rows.updateRow(row) else: row.F2019_AB_C = capacity(**dic) * lan row.F2019_BA_C = capacity(**dic) * lan elif row.BUILD_STAT == 10 and row.F2010_DIR == 0: row.F2010_AB_C = capacity(**dic) * lan row.F2010_BA_C = capacity(**dic) * lan rows.updateRow(row) if row.F2019_DIR == 1: row.F2019_AB_C = capacity(**dic) * lan rows.updateRow(row) elif row.F2019_DIR == -1: row.F2019_BA_C = capacity(**dic) * lan rows.updateRow(row) else: row.F2019_AB_C = capacity(**dic) * lan row.F2019_BA_C = capacity(**dic) * lan else: pass del row, rows
#begin capacity calculation if (row.BUILD_STAT == 10) and (row.F2010_DIR in [1, -1]): row.F2010_AB_C = capacity(**dic) * lan elif (row.BUILD_STAT == 10) and (row.F2010_DIR == 0): row.F2010_AB_C = capacity(**dic) * lan row.F2010_BA_C = capacity(**dic) * lan rows.updateRow(row) del row, rows
import arcpy, os, sys #set map doc and the layer to be used mxd = arcpy.mapping.MapDocument("Current") mapLyr = arcpy.mapping.ListLayers(mxd, "CUR_Master_Network_2045")[0] rows = arcpy.UpdateCursor(mapLyr) for row in rows: row.F2010_AB_C = 0 #clear all capacities to 0 row.F2010_BA_C = 0 row.F2019_AB_C = 0 row.F2019_BA_C = 0 row.F2025_AB_C = 0 row.F2025_BA_C = 0 row.F2045_AB_C = 0 row.F2045_BA_C = 0 #find capacity variables rnam = row.getValue("ROAD_NAM") ffc = row.getValue("LRTP_FFC") at = row.getValue("TYPE_AREA") lan = row.getValue("F2010_NUML") dic = {"ROAD_NAM": rnam, "LRTP_FFC": ffc, "TYPE_AREA": at} #capacity calculation yr = row.BUILD_STAT # any row can only have one year state... if row.getValue('row.F20%s_DIR' % yr) in [1, -1]: row.setValue('F20%s_AB_C' % yr, capacity(**dic) * lan) elif row.getValue('F20%s_DIR' % yr) == 0: row.setValue('F20%s_AB_C' % yr, capacity(**dic) * lan) row.setValue('F20%s_BA_C' % yr, capacity(**dic) * lan) rows.updateRow(row) del row, rows
import arcpy, os, sys #set map doc and the layer to be used mxd = arcpy.mapping.MapDocument("Current") mapLyr = arcpy.mapping.ListLayers(mxd, "CUR_Master_Network_2045")[0] #Single Lane Capacity Generator def capacity(ROAD_NAM, LRTP_FFC, TYPE_AREA): if ROAD_NAM == "Interstate 74 Bridge": return 19000 elif ROAD_NAM == "Interstate 80 Bridge": return 18000 elif ROAD_NAM == "Interstate 280 Bridge": return 19000 elif ROAD_NAM == "Centennial Bridge": return 11000 elif ROAD_NAM == "Arsenal Bridge": return 9500 elif LRTP_FFC == 1: return 19000 elif LRTP_FFC == 2: if TYPE_AREA == 1: return 8500 elif TYPE_AREA == 2: return 8650 elif TYPE_AREA == 3: return 9000 elif TYPE_AREA == 4: return 9000 elif TYPE_AREA == 5: return 8000 else: pass elif LRTP_FFC == 3: if TYPE_AREA == 1: return 8200 elif TYPE_AREA == 2: return 8300 elif TYPE_AREA == 3: return 8500 elif TYPE_AREA == 4: return 8500 elif TYPE_AREA == 5: return 7500 else: pass elif LRTP_FFC == 4: if TYPE_AREA == 1: return 6300 elif TYPE_AREA == 2: return 7500 elif TYPE_AREA == 3: return 7500 elif TYPE_AREA == 4: return 7500 elif TYPE_AREA == 5: return 7500 else: pass elif LRTP_FFC == 5: if TYPE_AREA == 1: return 5300 elif TYPE_AREA == 2: return 6500 elif TYPE_AREA == 3: return 6500 elif TYPE_AREA == 4: return 6500 elif TYPE_AREA == 5: return 5700 else: pass elif LRTP_FFC == 6: return 15200 elif LRTP_FFC == 7: if TYPE_AREA ==1: return 4800 elif TYPE_AREA == 2: return 6000 elif TYPE_AREA == 3: return 6000 elif TYPE_AREA == 4: return 6000 elif TYPE_AREA == 5: return 5200 else: pass elif LRTP_FFC == 8: return 99999 else: return 0
rows = arcpy.UpdateCursor(mapLyr) for row in rows: row.F2010_AB_C = 0 #clear all capacities to 0 row.F2010_BA_C = 0 row.F2019_AB_C = 0 row.F2019_BA_C = 0 row.F2025_AB_C = 0 row.F2025_BA_C = 0 row.F2045_AB_C = 0 row.F2045_BA_C = 0 rows.updateRow(row) #find capacity variables rnam = row.getValue("ROAD_NAM") ffc = row.getValue("LRTP_FFC") at = row.getValue("TYPE_AREA") lan10 = row.getValue("F2010_NUML") lan19 = row.getValue("F2019_NUML") lan25 = row.getValue("F2025_NUML") lan45 = row.getValue("F2045_NUML") dic = {"ROAD_NAM": rnam, "LRTP_FFC": ffc, "TYPE_AREA": at} #begin capacity calculation if row.BUILD_STAT == 10 and row.F2010_DIR == 1: row.F2010_AB_C = capacity(**dic) * lan10 rows.updateRow(row) if row.F2019_DIR == 1: row.F2019_AB_C = capacity(**dic) * lan19 rows.updateRow(row) if row.F2025_DIR == 1: row.F2025_AB_C = capacity(**dic) * lan25 rows.updateRow(row) if row.F2045_DIR == 1: row.F2045_AB_C = capacity(**dic) * lan45 rows.updateRow(row) elif row.F2045_DIR == -1: row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row) else: row.F2045_AB_C = capacity(**dic) * lan45 row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row) elif row.F2025_DIR == -1: row.F2025_BA_C = capacity(**dic) * lan25 rows.updateRow(row) if row.F2045_DIR == 1: row.F2045_AB_C = capacity(**dic) * lan45 rows.updateRow(row) elif row.F2045_DIR == -1: row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row) else: row.F2045_AB_C = capacity(**dic) * lan45 row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row) else: row.F2025_AB_C = capacity(**dic) * lan25 row.F2025_BA_C = capacity(**dic) * lan25 rows.updateRow(row) if row.F2045_DIR == 1: row.F2045_AB_C = capacity(**dic) * lan45 rows.updateRow(row) elif row.F2045_DIR == -1: row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row) else: row.F2045_AB_C = capacity(**dic) * lan45 row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row) elif row.F2019_DIR == -1: row.F2019_BA_C = capacity(**dic) * lan19 rows.updateRow(row) if row.F2025_DIR == 1: row.F2025_AB_C = capacity(**dic) * lan25 rows.updateRow(row) if row.F2045_DIR == 1: row.F2045_AB_C = capacity(**dic) * lan45 rows.updateRow(row) elif row.F2045_DIR == -1: row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row) else: row.F2045_AB_C = capacity(**dic) * lan45 row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row) elif row.F2025_DIR == -1: row.F2025_BA_C = capacity(**dic) * lan25 rows.updateRow(row) if row.F2045_DIR == 1: row.F2045_AB_C = capacity(**dic) * lan45 rows.updateRow(row) elif row.F2045_DIR == -1: row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row) else: row.F2045_AB_C = capacity(**dic) * lan45 row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row) else: row.F2025_AB_C = capacity(**dic) * lan25 row.F2025_BA_C = capacity(**dic) * lan25 if row.F2045_DIR == 1: row.F2045_AB_C = capacity(**dic) * lan45 rows.updateRow(row) elif row.F2045_DIR == -1: row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row) else: row.F2045_AB_C = capacity(**dic) * lan45 row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row) else: row.F2019_AB_C = capacity(**dic) * lan19 row.F2019_BA_C = capacity(**dic) * lan19 rows.updateRow(row) if row.F2025_DIR == 1: row.F2025_AB_C = capacity(**dic) * lan25 rows.updateRow(row) if row.F2045_DIR == 1: row.F2045_AB_C = capacity(**dic) * lan45 rows.updateRow(row) elif row.F2045_DIR == -1: row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row) else: row.F2045_AB_C = capacity(**dic) * lan45 row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row) elif row.F2025_DIR == -1: row.F2025_BA_C = capacity(**dic) * lan25 rows.updateRow(row) if row.F2045_DIR == 1: row.F2045_AB_C = capacity(**dic) * lan45 rows.updateRow(row) elif row.F2045_DIR == -1: row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row) else: row.F2045_AB_C = capacity(**dic) * lan45 row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row) else: row.F2025_AB_C = capacity(**dic) * lan25 row.F2025_BA_C = capacity(**dic) * lan25 if row.F2045_DIR == 1: row.F2045_AB_C = capacity(**dic) * lan45 rows.updateRow(row) elif row.F2045_DIR == -1: row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row) else: row.F2045_AB_C = capacity(**dic) * lan45 row.F2045_BA_C = capacity(**dic) * lan45 rows.updateRow(row)
I realize how long it is, but it does work and that's what matters most to me. But since I'm still pretty new to scripting I'm very happy to learn other ways of coding. I have a little brushing up to do on matrices, but is it possible to replace my entire capacity function with a matrix or table and under the specific conditions a cell value is returned?
row.F[YEAR]_[DIR]_C = capacity(**dic) * lan[YEAR]