آموزش نحوه ساخت منحنی حجم - ارتفاع دریاچه یا مخزن با پایتون :: بیسین - سایت تخصصی مهندسی آب

آموزش نحوه ساخت منحنی حجم - ارتفاع دریاچه یا مخزن با پایتون


Python یک زبان برنامه نویسی است که قادر به انجام محاسبات برای مطالعات هیدرولوژیکی و ارزیابی منابع آب است. ما یک آموزش برای تعیین منحنی حجم و ارتفاع دریاچه پاتیلاس در پورتوریکو با پایتون و کتابخانه های عددی / مکانی به عنوان Numpy و Rasterio انجام داده ایم. سرانجام، نتایج به دست آمده از منحنی حجم و ارتفاع از یک منبع USGS مقایسه شد.


این روش این بار برای یک دریاچه انجام شده است، اما هنگامی که سطح زیرین به عنوان یک پرونده رستری در دسترس باشد، می توان آن را به راحتی در هر مخزن یا بدنه آب اعمال کرد.


کد پایتون:

#Import required libraries

import rasterio

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

from mpl_toolkits.axes_grid1 import make_axes_locatable

Open raster file

lakeRst = rasterio.open('../Rst/lakeBottomElevation.tif')

lakeRst.count

1

#raster resolution

lakeRst.res

(0.5, 0.5)

#all raster crs info

lakeRst.crs.wkt

'PROJCS["NAD83(2011)]'

Get raster values as Numpy array

lakeBottom = lakeRst.read(1)

#raster sample

lakeBottom[:5,:5]

array([[-3.4028235e+38, -3.4028235e+38, -3.4028235e+38, -3.4028235e+38,

        -3.4028235e+38],

       [-3.4028235e+38, -3.4028235e+38, -3.4028235e+38, -3.4028235e+38,

        -3.4028235e+38],

       [-3.4028235e+38, -3.4028235e+38, -3.4028235e+38, -3.4028235e+38,

        -3.4028235e+38],

       [-3.4028235e+38, -3.4028235e+38, -3.4028235e+38, -3.4028235e+38,

        -3.4028235e+38],

       [-3.4028235e+38, -3.4028235e+38, -3.4028235e+38, -3.4028235e+38,

        -3.4028235e+38]], dtype=float32)

#replace value for np.nan

noDataValue = np.copy(lakeBottom[0,0])


lakeBottom[lakeBottom==noDataValue]= np.nan

plt.figure(figsize=(12,12))

plt.imshow(lakeBottom)

plt.show()



Lake volume calculation

# get raster minimum and maximum 

minElev = np.nanmin(lakeBottom)

maxElev = np.nanmax(lakeBottom)

print('Min bottom elevation %.2f m., max bottom elevation %.2f m.'%(minElev,maxElev))


# steps for calculation

nSteps = 20


# lake bottom elevation intervals

elevSteps = np.round(np.linspace(minElev,maxElev,nSteps),2)

elevSteps

Min bottom elevation 44.10 m., max bottom elevation 67.55 m.



array([44.1 , 45.33, 46.56, 47.8 , 49.03, 50.27, 51.5 , 52.74, 53.97,

       55.21, 56.44, 57.67, 58.91, 60.14, 61.38, 62.61, 63.85, 65.08,

       66.32, 67.55])

# definition of volume function

def calculateVol(elevStep,elevDem,lakeRst):

    tempDem = elevStep - elevDem[elevDem<elevStep]

    tempVol = tempDem.sum()*lakeRst.res[0]*lakeRst.res[1]

    return tempVol

# calculate volumes for each elevation

volArray = []

for elev in elevSteps:

    tempVol = calculateVol(elev,lakeBottom,lakeRst)

    volArray.append(tempVol)


print("Lake bottom elevations %s"%elevSteps)

volArrayMCM = [round(i/1000000,2) for i in volArray]

print("Lake volume in million of cubic meters %s"%volArrayMCM)

Lake bottom elevations [44.1  45.33 46.56 47.8  49.03 50.27 51.5  52.74 53.97 55.21 56.44 57.67

 58.91 60.14 61.38 62.61 63.85 65.08 66.32 67.55]

Lake volume in million of cubic meters [0.0, 0.0, 0.13, 0.38, 0.68, 1.02, 1.4, 1.83, 2.31, 2.88, 3.56, 4.3, 5.1, 5.97, 6.91, 7.92, 8.99, 10.12, 11.3, 12.54]

# plot values

fig, ax = plt.subplots(figsize=(12,5))

ax.plot(volArrayMCM,elevSteps,label='Patillas lake')

ax.grid()

ax.legend()

ax.set_xlabel('Volume MCM')

ax.set_ylabel('Elevation (masl)')

plt.show()



# plot values

fig, [ax1, ax2] = plt.subplots(1,2,figsize=(20,8),gridspec_kw={'width_ratios': [2, 1]})

ax1.set_title('Lake bottom elevation')

botElev = ax1.imshow(lakeBottom)


divider = make_axes_locatable(ax1)

cax = divider.append_axes('bottom', size='5%', pad=0.5)

fig.colorbar(botElev, cax=cax, orientation='horizontal', label='Elevation (masl)') 


ax2.plot(volArrayMCM,elevSteps,label='Patillas lake')

ax2.grid()

ax2.legend()

ax2.set_xlabel('Volume MCM')

ax2.set_ylabel('Elevation (masl)')

plt.show()



Comparison with the USGS survey

From this pu


patVol = pd.read_csv('../Txt/patillasVolume.csv')

patVol.head()



fig, ax = plt.subplots(figsize=(12,5))

ax.plot(volArrayMCM,elevSteps,label='Patillas lake',ls= '-.')

ax.plot(patVol['Storage_capacity_mcm'],patVol['Pool_Elevation_m'],label='Patillas lake - USGS Survey')

ax.grid()

ax.legend()

ax.set_xlabel('Volume MCM')

ax.set_ylabel('Elevation (masl)')

Text(0, 0.5, 'Elevation (masl)')




دانلود کد پایتون





نظرات (۰)

فرم ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی


درباره بهترين هاي بيسيـــن بدانيد...

Bird

يکي از مهمترين اهداف اين سايت تهيه آموزش هاي روان از ابزارهاي کاربردي علوم آب است.

اهميت مطالعات محيطي با ابزارهاي نوين در چيست؟

امروز با فارغ التحصيلي جمع کثير دانشجويان سالهاي گذشته و حال، با گذر از کمي گرايي ديگر صرف وجود مدارک دانشگاهي حرف اول را در بازار کار نمي زند؛ بلکه سنجش ديگري ملاک؛ و شايسته سالاري به ناچار! باب خواهد شد. يکي از مهم ترين لوازم توسعه علمي در هر کشور و ارائه موضوعات ابتکاري، بهره گيري از ابزار نوين است، بيسين با همکاري مخاطبان مي تواند در حيطه علوم آب به معرفي اين مهم بپردازد.

جستجو در بيسين


بیسین - سایت تخصصی مهندسی آب

سایت مهندسی آب بیسین با معرفی مهم ترین و کاربردی ترین نرم افزارها و مدل های شبیه سازی در حیطه مهندسی آب، تلاش به تهیه خدمات یکپارچه و محلی از محاسبات هیدرولوژیکی و هیدرولیکی می کند

W3Schools


اطلاعات سايت

  • behzadsarhadi@gmail.com
  • بهزاد سرهادي
  • شناسه تلگرام: SubBasin
  • شماره واتساپ: 09190622992-098
  • شماره تماس: 09190622992-098

W3Schools