資源簡介
利用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
- 上一篇:畢業設計周報
- 下一篇:圖片識別-感知哈希算法
評論
共有 條評論