# --------------------------------------------------------------------------- # Dist2LandCover_v1.py # Created on: 2012-05-09 # By Amelie Davis # Description: # --------------------------------------------------------------------------- ############ IMPORTANT ######################## # Assumes that your land cover layer is projected AND cell size is 30 meters # Uses NLCD 2006 classification codes # output file must be a shapefile and the output name must have .shp at the end of it. ############################################## # Set the necessary product code # import arcinfo # Import arcpy module import arcpy from arcpy import env # Check out any necessary licenses arcpy.CheckOutExtension("spatial") ###################### Script arguments Input_Fishnet_with_unique_ID2_field = arcpy.GetParameterAsText(0) #Input_Fishnet_with_unique_ID2_field = "D:\\DATA\\USA\\MigBirdFishnet\\NLCDfishnet20mi_p.shp" # provide a default value if unspecified Input_Land_Cover__NLCD_2006_ = arcpy.GetParameterAsText(1) #Input_Land_Cover__NLCD_2006_ = "D:\\DATA\\NLCD\\nlcd2006_cook" # provide a default value if unspecified Output_Workspace = arcpy.GetParameterAsText(2) #Output_Workspace = "D:\\DATA\\DELETE" # provide a default value if unspecified # Set environment settings env.workspace = Output_Workspace env.mask = Input_Land_Cover__NLCD_2006_ Zone_value_you_want_to_calc_dist_from = arcpy.GetParameterAsText(3) #Zone_value_you_want_to_calc_dist_from = "11" # provide a default value if unspecified LC_codes = arcpy.GetParameterAsText(4) Final_Output_shp = Output_Workspace + "\\" + arcpy.GetParameterAsText(5) #################### # Process: Reclassify #1 #set to 1 LC code from which you want to calculate distance. Example: water = "11" text_in = Zone_value_you_want_to_calc_dist_from+" "+Zone_value_you_want_to_calc_dist_from+" 1" fromClassremapList = text_in.split() fromClassremapList = [int(k) for k in fromClassremapList] remap = arcpy.sa.RemapRange([fromClassremapList]) nlcd_wat = arcpy.sa.Reclassify(Input_Land_Cover__NLCD_2006_, "VALUE", remap, "NODATA") #remap = arcpy.sa.RemapRange([[11,11,1],[12,95,"NODATA"]]) #nlcd_wat = arcpy.sa.Reclassify(Input_Land_Cover__NLCD_2006_, "VALUE", remap, "DATA") out_rc1 = Output_Workspace + "\\out1" nlcd_wat.save(out_rc1) # Process: Euclidean Distance out_euc = arcpy.sa.EucDistance(nlcd_wat, "", "30", "") out_euc_s = Output_Workspace + "\\euc_dist_1" out_euc.save(out_euc_s) arcpy.AddMessage("finished calculating euclidian distance") # Process: Int out_Int = arcpy.sa.Int(out_euc) out_Int_s = Output_Workspace + "\\water_dist" out_Int.save(out_Int_s) # Process: Copy initial fishnet shapefile so that original is not modified arcpy.Copy_management(Input_Fishnet_with_unique_ID2_field, Final_Output_shp, "") # Process: Reclassify (2) #set to 1 LC code for which you want to know the average distance from LC in Process: Reclassify #1 #remap2 = arcpy.sa.RemapRange([[11,94,0],[95,95,1]]) #old #remap2 = arcpy.sa.RemapRange([[95,95,1]]) #works LC_CODE = LC_codes.split() for i in LC_CODE: text_in2 = i+" "+i+" 1" forClassremapList = text_in2.split() forClassremapList = [int(k) for k in forClassremapList] remap2 = arcpy.sa.RemapRange([forClassremapList]) nlcd_ag = arcpy.sa.Reclassify(Input_Land_Cover__NLCD_2006_, "VALUE", remap2, "NODATA") out_rc2 = Output_Workspace + "\\out2" nlcd_ag.save(out_rc2) arcpy.AddMessage("finished reclassifying") # Process: Times # save output permanently? out_times = arcpy.sa.Times(out_Int, nlcd_ag) out_temp2 = Output_Workspace + "\\temp_ag" out_times.save(out_temp2) field_name = "xyz_" + str(i) # Process: Add field to initial fishnet shapefile arcpy.AddField_management(Final_Output_shp, field_name, "SHORT", 6, "", "","refcode", "NULLABLE") # Process: Calculate Field arcpy.CalculateField_management(Final_Output_shp, field_name, "!FID!","PYTHON_9.3","") arcpy.AddMessage("Starting zonal statistics") # Process: Zonal Statistics as Table outTable = Output_Workspace + "\\dist_per_cell.dbf" outZSaT = arcpy.sa.ZonalStatisticsAsTable(Final_Output_shp, field_name, out_times, outTable, "DATA", "ALL") arcpy.AddMessage("finished calculating mean +/- std distance per cell") # Process: Join Field fieldList = ["MEAN", "STD", "MIN"] arcpy.JoinField_management(Final_Output_shp, field_name, outTable, field_name,fieldList) arcpy.AddMessage("finished with land cover" + str(i)) # Delete intermediary files ##arcpy.Delete_management(out_rc1, "") ##arcpy.Delete_management(out_Int_s, "") ##arcpy.Delete_management(out_rc2, "") ##arcpy.Delete_management(out_euc_s, "")
Signed in members can post, follow updates, and more. New here? Register a free account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.