mergeVals = [row.getValue(fld) for fld in mergeFlds] inter[(source, target)] = mergeVals reversed = (target, source) # if reversed in inter: # inter[(source, target)] = inter[reversed] # inter[reversed] = mergeVals # else: # inter[(source, target)] = mergeVals del readCursor, row common.progress('creating output fields') outFlds = [('M_' + fld)[:10] for fld in mergeFlds] existFlds = common.fieldList(interLayer) for i in range(len(outFlds)): if outFlds[i] in existFlds: common.warning('Field %s already exists, contents will be overwritten' % outFlds[i]) arcpy.DeleteField_management(interLayer, outFlds[i]) else: arcpy.AddField_management(interLayer, outFlds[i], common.fieldType(type(mergeVals[i]))) # uses mergeVals from previous cycle... dragons common.progress('writing output') writeCursor = arcpy.UpdateCursor(interLayer) for row in writeCursor: reversed = (row.getValue(toFld), row.getValue(fromFld)) if reversed in inter: values = inter[reversed] for i in range(len(values)): row.setValue(outFlds[i], values[i]) else: for i in range(len(outFlds)): row.setNull(outFlds[i]) writeCursor.updateRow(row) del writeCursor, row
common.progress("starting route search") connRows = arcpy.SearchCursor(TMP_RSING_LAY, "", "", "", sorter) prevOID = None prevDID = None prevImp = None start = True sequence = False # if a sequence of identical tuples of O_ID, D_ID has been detected for connRow in connRows: oID = connRow.getValue(oIDFld) dID = connRow.getValue(dIDFld) impedVal = connRow.getValue(impedance) if start: # start at the second row start = False # add fields to output table and open cursor common.progress("preparing output table") arcpy.AddField_management(outputPath, common.NEIGH_FROM_FLD, common.fieldType(type(oID))) arcpy.AddField_management(outputPath, common.NEIGH_TO_FLD, common.fieldType(type(dID))) arcpy.AddField_management(outputPath, impedance, common.fieldType(type(impedVal))) common.progress("opening output table") outputRows = arcpy.InsertCursor(outputPath) common.progress("writing output") else: if oID == prevOID and dID == prevDID: # same as previous, detect sequence sequence = True else: if sequence: # end of sequence, disregard it sequence = False else: # unique record - add neighbour record outRow = outputRows.newRow() outRow.setValue(common.NEIGH_FROM_FLD, prevOID) outRow.setValue(common.NEIGH_TO_FLD, prevDID)