用python编写SWWM与ArcGIS平台的数据交互文件,通过GIS计算分析区域下流域范围,以及坡度、坡向、高程、不透水面积及地表径流等数据,生成SWWM计算文件,计算开发前后径流系数,并将计算结果调回GIS平台可视化。
Loading...
code:
import arcpy
from arcpy import env
from arcpy.sa import *
import time
#original_para
worksapce_path="D:\SWMM_cal"
original_dem="D:\SWMM_cal\gdem_m_P.tif"
extent_region="D:\SWMM_cal\extent_region.shp"
fla_para=500
research_region_polygon="D:\SWMM_cal\\research_region_polygon.shp"
imperv="D:\SWMM_cal\imperv.tif"
Gage_1="D:\SWMM_cal\Gage1.shp"
#environment
env.workspace=worksapce_path
env.overwriteOutput=True
env.extent=extent_region
#Hydrology_basic
fill_dem=arcpy.sa.Fill(original_dem)
flowdirection_dem=arcpy.sa.FlowDirection(fill_dem)
flowaccumulation_dem=arcpy.sa.FlowAccumulation(flowdirection_dem)
flowaccumulation_dem_copy=arcpy.CopyRaster_management(flowaccumulation_dem,"flowaccumulation_dem_copy.tif") #?
overland_flow=arcpy.sa.Con(Raster("flowaccumulation_dem_copy.tif")>float(fla_para),1) #how to solve?
stream_link=arcpy.sa.StreamLink(overland_flow,flowdirection_dem)
watershed_r=arcpy.sa.Watershed(flowdirection_dem,stream_link)
watershed_polygon=worksapce_path+"\watershed_polygon.shp"
arcpy.RasterToPolygon_conversion(watershed_r,watershed_polygon,"SIMPLIFY","VALUE")
clip_watershed_p=arcpy.Clip_analysis(watershed_polygon,research_region_polygon)
flowlength_d=FlowLength(flowdirection_dem,"UPSTREAM")
#extract subwatershed
def extract_subwatershed(clip_watershed_p,watershed_polygon):
ID_lst=[]
cursor=arcpy.da.SearchCursor(clip_watershed_p,'ID')
for row in cursor:
ID_lst.append(row[0])
del cursor,row
p_select=[]
cursor=arcpy.da.SearchCursor(watershed_polygon,['ID','SHAPE@'])
for row in cursor:
if row[0] in ID_lst:
p_select.append(row[1])
del cursor,row
p_s=arcpy.CreateFeatureclass_management(worksapce_path,'p_s',"POLYGON")
arcpy.AddField_management(p_s,'ID_name',"FLOAT")
cursor=arcpy.da.InsertCursor("p_s",['SHAPE@','ID_name'])
for i in range(len(p_select)):
cursor.insertRow([p_select[i],ID_lst[i]])
del cursor
return p_s
p_s=extract_subwatershed(clip_watershed_p,watershed_polygon)
#SWMM_para
Area_lst=[row[0] for row in arcpy.da.SearchCursor(p_s,['SHAPE@AREA'])]
zonal_flowlength=ZonalStatisticsAsTable(p_s,"FID",flowlength_d,"zonal_flowlength","NODATA","MEAN")
zonal_flowlength_lst=[row[0] for row in arcpy.da.SearchCursor(zonal_flowlength,["MEAN&