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.

主站蜘蛛池模板: 日韩二区三区无| 伊人91在线| AV不卡在线永久免费观看| 亚洲人成网站观看在线观看| 嫩草在线视频| 国产福利一区在线| 少妇精品网站| 久无码久无码av无码| 四虎在线高清无码| 欧美一区二区丝袜高跟鞋| 亚洲人成网7777777国产| 114级毛片免费观看| 狠狠做深爱婷婷综合一区| 日韩专区第一页| 国产丰满成熟女性性满足视频| 免费人成网站在线高清| 国产在线观看91精品亚瑟| 玖玖精品在线| 日本成人精品视频| 国产精品人成在线播放| 欧美日韩国产综合视频在线观看| 玖玖免费视频在线观看| 国产精品嫩草影院视频| 97在线免费视频| 国产亚洲精品在天天在线麻豆 | 日本三区视频| 亚洲天堂视频在线播放| 国产成人精品亚洲日本对白优播| 91精品国产自产在线老师啪l| 999国内精品久久免费视频| 国产亚洲第一页| 亚洲午夜18| 中国国产高清免费AV片| 欧美色图久久| 久久综合色天堂av| 日本影院一区| 国产午夜福利在线小视频| 少妇精品网站| 欧美激情第一区| 亚洲成人网在线观看| 国产成人亚洲精品色欲AV| 亚洲va视频| 这里只有精品在线| 91在线免费公开视频| 午夜激情福利视频| 激情六月丁香婷婷| 东京热一区二区三区无码视频| 成人福利在线视频| 国产区在线观看视频| 大香网伊人久久综合网2020| 亚洲视频一区在线| 精品视频91| 97se亚洲综合在线天天| 四虎精品黑人视频| 日韩一级二级三级| 欧美性精品不卡在线观看| 国产乱子伦视频在线播放| 国产第一色| 欧美日韩va| 日韩免费毛片视频| 国产欧美日韩在线在线不卡视频| 久久伊人操| 宅男噜噜噜66国产在线观看| 国产成人无码播放| 国产精品女熟高潮视频| 一级成人a毛片免费播放| 欧美天堂在线| 在线免费亚洲无码视频| 婷婷色中文网| 婷婷亚洲视频| 国产精品性| 亚洲国产一成久久精品国产成人综合| 韩国自拍偷自拍亚洲精品| 婷婷丁香在线观看| 亚洲天堂区| 国产丝袜91| 亚洲综合久久成人AV| 青草91视频免费观看| 亚洲性影院| 免费国产黄线在线观看| 最新无码专区超级碰碰碰| 久久免费观看视频|