999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Python在水位-流量關系曲線中的運用

2022-05-23 07:47:06方壽軍
中國應急管理科學 2022年2期

方壽軍

摘 要:天然河道水位-流量關系曲線計算方法和計算過程都比較簡單,主要是采用曼寧公式進行計算,其關鍵工作是量取不同水位下的面積和濕周,通過面積和濕周計算出天然河槽的水力半徑。傳統計算過程中需要每個水位量取一次過水面積和對應的濕周,人工量取過程比較繁瑣,工作量和計算密度有很大關系,人工量取過程都是重復的機械式操作,利用當下比較流行的Python語言結合pyautocad庫,將這個繁瑣過程交給計算機來處理,實現水位-流量關系曲線的自動計算。

關鍵詞:水位;流量;水力半徑;Python

引言:天然河道水位流量關系曲線計算比較簡單,主要就是量取不同水位下的面積和濕周,但是過程比較繁瑣,工作量和計算密度有很大關系,傳統計算過程中需要每個水位量取一次過水面積和濕周[1],利用計算機編程可以將這個繁瑣過程交給計算機來處理,本文采用當下較流行的Python語言來實現這個過程,和C#語言做比較,更簡單、更高效、更實用。

Python是由荷蘭數學和計算機科學研究學會的吉多·范羅蘇姆于1990 年代初設計。Python語法和動態類型,以及解釋型語言的本質,使它成為多數平臺上寫腳本和快速開發應用的編程語言 2021年10月,語言流行指數的編譯器Tiobe將Python加冕為最受歡迎的編程語言,20年來首次將其置于Java、C和JavaScript之上,Python廣泛開源的第三方庫是其開發效率高的主要原因[2]。

此次天然河道水位流量關系曲線計算的開發語言選擇也是由于Python語言的熱度以及其開發的高效性。采用Python對CAD進行二次開發,可用的庫不多,主要有pyautocad、pywin32、ezdxf、dxfgrabber、dxfwrite以及gdal,其中pyautocad通用性、易用性較好一些,pyautocad庫由俄羅斯工程師Roman Haritonov開發,用于簡化使用 Python 語言書寫 AutoCAD ActiveX Automation 腳本,但是,這個庫從2015年至今沒有更新過。

天然河道水位流量關系曲線計算采用的是重繪法進行計算,主要思路是先讀取已知的河槽斷面,然后根據河槽判斷最高點和最低點以及倒數第二高點,從最低點開始計算,直到計算至倒數第二高點,這樣保證河槽有效斷面上都能循環到,然后判斷河槽寬度,按照河槽寬度來確定重繪河槽的范圍[3]。

獲取已知河槽的坐標信息采用pyautocad庫也很簡單,拾取河槽線,這個線可以是多段線(Polyline),也可以是三維多段線(AcDb3dPolyline),通過線的屬性ObjectName獲取其類型進行判別和過濾,然后通過Coordinates屬性獲取其頂點集合,Polyline和AcDb3dPolyline不同之處在于前者的每一個點只有兩個元素(X坐標和Y坐標),而后者每一個點只有三個元素(X坐標、Y坐標和Z坐標)。

值得一提是采用C#、VB等語言編程時,線段沒有ObjectName屬性,其類型的判別需要用DxfCode編碼組的邏輯運算來實現選擇集過濾,線段沒有Coordinates屬性,用C#語言編寫時,多段線(Polyline)可通過GetPoint3dAt()方法獲取點坐標集合,但是三維多段線(AcDb3dPolyline)就沒有GetPoint3dAt()方法,需要先得到三維多段線的Position點集合,然后把集合放進一個新的列表里面,下文提到的直線或線段的IntersectWith方法在C#、VB等語言里面也是沒有的[4]。所以pyautocad庫能把多段線、三維多段線(直線也可以)的頂點屬性統一,從頂層引用,確實簡化了很多代碼工作量,邏輯上更符合我們的慣性思維。

單河槽河道判斷很簡單,從左岸到右岸,順序重繪就行,但是多河槽河道需要判斷哪些河槽是有效河道斷面,需要判斷河槽斷面的上凸或下凹,只有下凹并且左右兩岸都能跟水平面閉合才是有效河槽斷面,河槽有效斷面的判斷是重點,首先根據pyautocad提供的方法IntersectWith求取兩條線的交點,獲得計算水平面和河槽交點(得到的交點是一個點集合,每個點有三個元素,后續使用需要按順序取用),根據交點數量初步判斷河槽是單河槽還是多河槽,不大于三個交點就是單河槽。

多河槽的另外一個難點是判斷有效河槽范圍,按點依次判斷當前點的X坐標是否在第i個和第i+1個點中間,如果在,那么這一段必定是一個河槽,但是不一定是有效河槽,然后再判斷當前點是否低于當前計算高程,低于的話當前點一定處于下凹的河槽斷面上,這個點就是有效河槽的點,否則就是上凸的無效河槽或河灘。通過循環,得到所有的有效河槽原河槽坐標,加上之前求得的前后兩個交點進行重繪,得到有效河槽新斷面,利用線段的length屬性,得到河槽的濕周,然后利用線段的Closed()方法將重繪得到的線段閉合,閉合后的線段就有了準確的面積屬性,通過線段的area屬性得到河槽的過水面積,這兩個機械性的重復工作完成后,其他就簡單了,采用曼寧公式進行河道流量計算,將計算結果寫入excel文件即可(寫入Excel這里用openpyxl庫,Excel可用的庫很多,根據實際選用)[5]。

Python在程序編寫方面確實有著獨特優勢,效率高是公認的,但是其在運行速度上的弊端也是很明顯的,因為Python屬于解釋型語言,另外,GIL鎖(全局解釋器鎖,全稱GlobalInterpreterLock) 限制并發,對多處理器支持不好[6]。當python的默認解釋器要執行字節碼時,都需要先申請這個鎖。如果試圖通過多線程擴展應用程序,將總是被這個全局解釋器鎖限制。所以其在運行速度上和其他語言對比起來要慢得多,特別是循環次數較多時候更突出,也有很多提高Python運行速度的方法,例如使用多進程、使用Cpython、數據處理時盡量使用csv替代xlsx、使用Numba編譯、使用哈希表的數據結構、矢量化取代循環等等,但是小型項目對運行速度要求不高時候其實也沒必要花那么多心思去提高運行速度,大型項目或者對運行速度要求較高時可以選擇其他語言。另一方面,Python代碼不能加密,對于想要實現代碼加密的也只能選擇其他語言。

通過采用不同編程語言對天然河道水位-流量關系曲線的自動化計算實現過程的對比,Python在小型項目中運用具有開發效率高,開發周期短的特性[7],對工程設計人員實現自動化輔助設計有著較大幫助。

參考文獻:

[1]王衡,劉啟和.水位流量關系曲線表批量計算[J].東北水利水電,2007,25(9).

[2]張楠.Python語言及其應用領域研究[J].科技創新導報,2019,16(17).

[3]胡艷嬌,黃琦,田長濤.水位流量關系曲線繪制方法實例分析[J].科技創新與應用,2019(21).

[4]王月明,宮帥良,呂曉琪,等.基于AutoCAD二次開發實現測繪橫斷面處理的方法.

[5]曾晨,沈宮新.基于Python的線性回歸性能分析[J].大眾科技,2019,21(11).

[6]王學慶.基于Python的計算機軟件應用技術研究[J].2022(4).

[7]孫運平,高玉春.AutoCAD二次開發及應用研究[J].商場現代化,2012(10):2.

主站蜘蛛池模板: 色综合天天娱乐综合网| 在线免费无码视频| 成人国产精品一级毛片天堂 | 日本免费a视频| 色综合久久88色综合天天提莫| jizz国产视频| 欧洲日本亚洲中文字幕| 久草网视频在线| 亚洲高清中文字幕| 亚洲精品无码高潮喷水A| 亚洲永久视频| 91啪在线| 日本免费精品| 国产欧美在线| 日韩经典精品无码一区二区| 一级一级特黄女人精品毛片| 一级成人a毛片免费播放| 国产精品片在线观看手机版| 精品免费在线视频| 亚洲品质国产精品无码| 午夜啪啪网| 欧美区一区| 欧美成人第一页| 狼友av永久网站免费观看| 亚洲一级毛片| 成人亚洲视频| 91精品专区国产盗摄| 国产爽妇精品| 青青极品在线| 无码av免费不卡在线观看| 国产高潮流白浆视频| 麻豆精品视频在线原创| 国产成人调教在线视频| 国产精品手机在线播放| 久久精品欧美一区二区| 日韩小视频网站hq| 扒开粉嫩的小缝隙喷白浆视频| 色天天综合久久久久综合片| 国产人成在线视频| 中文字幕免费在线视频| 美女被操91视频| 日韩A∨精品日韩精品无码| 国产综合精品一区二区| 亚洲人成成无码网WWW| 国内自拍久第一页| 成人在线天堂| 亚洲欧美激情小说另类| 最新国产午夜精品视频成人| 香蕉蕉亚亚洲aav综合| 天天综合网色| 久久精品aⅴ无码中文字幕| 国产精品欧美在线观看| 高h视频在线| 99re这里只有国产中文精品国产精品 | 亚洲国产欧美中日韩成人综合视频| 国产高清在线观看91精品| 国产va在线| 在线视频精品一区| 国产第一页亚洲| 91精品国产一区| 欧美日韩免费在线视频| 国产精品专区第一页在线观看| 精品人妻无码中字系列| 国产精品网址在线观看你懂的| 亚洲色图欧美视频| 欧美激情视频一区| 尤物成AV人片在线观看| 国产一区二区色淫影院| 超碰91免费人妻| 久久婷婷六月| 国产又粗又爽视频| 国产精品午夜电影| 国产精品九九视频| 久久久久国产一级毛片高清板| 色综合天天娱乐综合网| 亚洲第七页| 亚洲欧美日韩动漫| 国产精品精品视频| 园内精品自拍视频在线播放| av在线无码浏览| 成人免费黄色小视频| 色婷婷啪啪|