• 大小: 5KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-08-18
  • 语言: 其他
  • 标签: arcgis  水文分析  

资源简介

利用ArcGIS计算河流的平均比降。参考的方法是【约翰斯通-克罗斯】法

资源截图

代码片段和文件信息

#############################################################
#                                                           #
#   该工具利用【约翰斯通-克罗斯】方法计算河底平均比降           #
#   在使用的时候必须先选择一条河流,工具会判断输入的河流数量     #
#   大于一条河流时不予以计算                                  #
#   用于计算的DEM为无凹陷点DEM                                #
#                                                           #
#############################################################


# -*- coding: gbk -*-
import arcpy
import math
inputLine =arcpy.GetParameterAsText(0) #河流图层

dem = arcpy.GetParameterAsText(1) #无凹陷点DEM
riverLen = 7873.232038

arcpy.AddMessage(u‘..................‘)
arcpy.AddMessage(u‘......开始执行...........‘)

# 记录高程值的数据
heightList = []

iputCout=0
mmCursor = arcpy.da.SearchCursor(inputLine [“SHAPE@LENGTH“])
for row1 in mmCursor:
    riverLen = row1[0]      #顺便获取河流长度
    iputCout=iputCout+1

arcpy.AddMessage(u‘......获取了河流长度......‘)
#如果选中的是一个线要素,则执行计算,否者不计算多条河流
if iputCout==1:
    ##先将线转为折点
    outLine1 = arcpy.FeatureVerticesToPoints_management(inputLine “in_memory/outline“)
    arcpy.AddMessage(u‘......河流线已经转换为点集.......‘)

    #河流节点
    riverPoints = []

    # 获取河流的节点,以用作计算高差和河长
    for row in arcpy.da.SearchCursor(outLine1 [“SHAPE@XY“]):
        # 从点图层数据获取所有的点的XY
        x y = row[0]
        #从地形数据中获取其高程的象元值
        pointStr = str(x) +“ “+str(y)
        result = arcpy.GetCellValue_management(dempointStr)
        #print “point  “+ str(vetPointL)  + “ Height value is : “ + str(result)
        riverPoints.append(row[0])
        heightList.append(str(result))

    arcpy.AddMessage(u‘......已经获取了折点的高程值......‘)
    #子河段长度

    subRiverList = []
    hDiffList = []
    # 计算每一个子河段的长度
    for i in range(0len(riverPoints)-1):
        xy = riverPoints[i]
        x1y1 = riverPoints[i+1]
        #计算河段长度
        dis =math.sqrt(pow((x1-x)2)+pow((y1-y)2))
        subRiverList.append(dis)

    arcpy.AddMessage(u‘......河流子河段长度计算完成完成.......‘)

    # 计算从高程从低到高部分的差距
    listLen = len(heightList)
    for j in range(0listLen-1):
        h1 = float(heightList[j])
        h2 = float(heightList[j+1])
        xheight = 0
        xheight = h1-h2
        hDiffList.append(xheight)

    arcpy.AddMessage(u‘......各折点的高程差计算完成......‘)

    # 计算每个河段的比降
    subbijiang = []
    for i in range(len(hDiffList)):
        Si= hDiffList[i]/subRiverList[i]
        subbijiang.append(Si)

    arcpy.AddMessage(u‘......子河段比降计算完成......‘)
    # 计算最终的比降
    # 计算分子
    sumUp = 0
    for i in range(len(hDiffList)-1):
        sumUp = sumUp + subRiverList[i]*pow(subbijiang[i]0.5)

    S = pow((sumUp/riverLen)2)

    arcpy.AddMessage(u‘......该河流的总长为: ‘ + str(riverLen)+u‘   平均比降为: ‘ +str(S))
    arcpy.AddMessage(u‘......计算完毕.......‘)

else:
    arcpy.AddMessage(u‘......您选中了 ‘+str(iputCout) +  u‘  条河流......‘)
    arcpy.AddMessage(u‘......工具已经停止计算没有算出您想要的结果......‘)
    arcpy.AddMessage(u‘......因为您目前选中了多条河流。只能选中一条河流进行计算!......‘)



 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-07-11 16:49  河流平均比降计算工具BY李远祥\
     文件       12800  2017-07-11 16:47  河流平均比降计算工具BY李远祥\平均比降计算工具By李远祥.tbx
     文件        3751  2017-07-11 14:01  河流平均比降计算工具BY李远祥\比降计算脚本.py

评论

共有 条评论