# --------------------------------------------------------------------------- # soil_polygon_appending.py # Created on: Fri Mar 28 2006 02:40:26 PM # (generated by ArcGIS/ModelBuilder) # Usage: soil_select_test # --------------------------------------------------------------------------- # Import system modules import sys, string, os, win32com.client def get_soil_names(): # only need to get dictionary list of soil names and total number of cases that should be found global soil_name comma = {} good_soil_names = "C:\\DataFiles\\OSUSeedCert\\SpatialStats\\Soils\\data_exists_soils.csv" soil_names_file = open(good_soil_names,"r") # there is no header_line = soil_names_file.readline() for soil_num in range(88): # need to set to range(88) to do all soils process_line = soil_names_file.readline() comma[1] = process_line.find(",") #comma[2] = process_line.find(",", comma[1] + 1) soil_name[soil_num] = process_line[:comma[1]] #print process_line #print str(soil_num)+" = soil num, and max_cases string version = "+process_line[comma[1] + 1:comma[2]] #max_cases[soil_num] = int(process_line[comma[1] + 1:comma[2]]) #ignore_line = musym_file.readline() # final line at end of each county's data is a summary line soil_names_file.close() return def read_DBF(soil_to_use): # function opens a DBF file and extracts values of interest to a global dictionary global DBF_output, DBF_original, status_of_soils records_found = 0 first_size = 136 * 2 - 41 regular_move = 136 OID_pos = 42 orig_area_pos = 92 new_calc_pos = 111 need_to_close_later = 0 #temp = 0 target_input1 = "C:\\DataFiles\\OSUSeedCert\\SpatialStats\\Soils\\clip_"+soil_to_use+".dbf" target_input2 = "C:\\DataFiles\\OSUSeedCert\\SpatialStats\\Soils\\clip_"+soil_to_use+"_wArea.dbf" if os.path.isfile(target_input2): # wArea clipped file with new area calculated does exist target_in = open(target_input2, "r") need_to_close_later = 1 this_seek = target_in.read(first_size) this_seek = target_in.read(regular_move) while this_seek != "": # need to process string into OBJECTID,SHAPE_Leng, SHAPE_Area, OIDinTEXT, Calc_Area, F_AREA OBJECTID = int(this_seek[:4]) OIDinTEXT = this_seek[OID_pos:OID_pos + 50].strip() #print str(OBJECTID)+" = OBJECTID and OIDinTEXT = "+OIDinTEXT orig_area = float(this_seek[orig_area_pos:orig_area_pos + 19]) new_calc = float(this_seek[new_calc_pos:new_calc_pos + 22]) #print str(orig_area)+" = orig area, while new calc = "+str(new_calc) DBF_output[soil_to_use,OIDinTEXT] = new_calc # index as a tuple including soil name existing_size = DBF_original.get(OIDinTEXT,0) if orig_area > existing_size: DBF_original[OIDinTEXT] = orig_area # index by OID records_found += 1 this_seek = target_in.read(regular_move) else: if os.path.isfile(target_input1): # clipped file exists but not newly recalculated wArea file print "no wArea file found even though clipped file did exist for soil = "+soil_to_use else: # neither file exists print "cannot find either the clipped file or wArea recalculated file for soil = "+soil_to_use if records_found == 0: status_of_soils[soil_to_use] = 0 # add to list of soils lacking any data else: status_of_soils[soil_to_use] = 1 # add to list of soils with non-zero areas if need_to_close_later == 1: target_in.close() return records_found # Create the Geoprocessor object gp = win32com.client.Dispatch("esriGeoprocessing.GpDispatch.1") # Set the necessary product code gp.SetProduct("ArcInfo") # Load required toolboxes... gp.AddToolbox("C:/Program Files/ArcGIS/ArcToolbox/Toolboxes/Data Management Tools.tbx") #gp.AddToolbox("C:/Program Files/ArcGIS/ArcToolbox/Toolboxes/Analysis Tools.tbx") #gp.AddToolbox("C:/Program Files/ArcGIS/ArcToolbox/Toolboxes/Spatial Statistics Tools.tbx") gp.OverwriteOutput = 1 # no separate Boolean type in Python 2.1, must use 0 and 1 # create global variables calc_area_list = {} # start with empty dictionaries soil_name = {} max_cases = {} DBF_output = {} DBF_original = {} status_of_soils = {} rec_count_by_soils = {} soil_number_translater = {} count_good_soils = 0 # general files for storing data #no_data_soils = "C:\\DataFiles\\OSUSeedCert\\SpatialStats\\Soils\\no_data_soils.csv" #data_exists_soils = "C:\\DataFiles\\OSUSeedCert\\SpatialStats\\Soils\\data_exists_soils.csv" #matrix_soils_by_fields = "C:\\DataFiles\\OSUSeedCert\\SpatialStats\\Soils\\matrix_soils_by_fields.csv" #soil_dictionary = "C:\\DataFiles\\OSUSeedCert\\SpatialStats\\Soils\\soil_python_dictionary.txt" #no_data = open(no_data_soils,"w") #data_exists = open(data_exists_soils,"r") #matrix_soils = open(matrix_soils_by_fields,"w") #soil_saved_dictionary = open(soil_dictionary,"w") # Local variables... clip_wArea_append_test = "C:\\DataFiles\\OSUSeedCert\\SpatialStats\\Soils\\clip_wArea_append_all.shp" clip_wArea_append_test__2_ = "C:\\DataFiles\\OSUSeedCert\\SpatialStats\\Soils\\clip_wArea_append_all.shp" ## main program section here print print "running soil_data_transfer now" get_soil_names() soil_num = 0 # ignore the first soil since we used it to make the target file #process_soil_names() # generates global dictionary of soil_names indexed by soil_num for group_count in range(0,29): # full run is 0 to 87 soils soil_num += 1 this_soil_1 = "C:\\DataFiles\\OSUSeedCert\\SpatialStats\\Soils\\clip_"+soil_name[soil_num]+"_wArea.shp" soil_num += 1 this_soil_2 = "C:\\DataFiles\\OSUSeedCert\\SpatialStats\\Soils\\clip_"+soil_name[soil_num]+"_wArea.shp" soil_num += 1 this_soil_3 = "C:\\DataFiles\\OSUSeedCert\\SpatialStats\\Soils\\clip_"+soil_name[soil_num]+"_wArea.shp" params = "\""+this_soil_1+";"+this_soil_2+";"+this_soil_3+"\"" print params # Process: Append... #gp.Append_management("clip_Acanod_silt_loam_wArea;clip_Alluvial_land_wArea", clip_wArea_append_test__2_, "TEST") gp.Append_management(params, clip_wArea_append_test__2_, "TEST") #