DEM و منحصر کردن شبکه جریان با پایتون و Pyshed - آموزش :: بیسین - سایت تخصصی مهندسی آب

DEM و منحصر کردن شبکه جریان با پایتون و Pyshed - آموزش


مقدمه

در دوران مدرن، الگوریتم های کامپیوتری می توانند ویژگی های هیدرولوژیکی را از ساخت توپوگرافی تفسیر کنند. پس از تعریف یک حوضه زهکشی، تمام آب هایی که در یک منطقه قرار می گیرند، باید در یک خروجی مشترک با گرانش به عنوان تنها نیروی محرکه تخلیه شوند. برای یک توپوگرافی حوضه ای "هیدرولوژیکی"، تمام شبکه های زهکشی باید مسیر نزولی را به نقطه تخلیه داشته باشند، بنابراین هر سینک یا depressions "مسیر" روبروی سطح را متوقف می کند و کامپیوتر از شبکه رودخانه عبور نخواهد کرد.

مدل های ارتفاعی دیجیتال (DEMs) از تفسیر ماهواره ای (Aster DEM یا Alos Palsar) با "اشتباه" از اشتباهات در تفسیر ارتفاع، رزیست رادیکال و یا بازتولید می شوند. نیاز به اصلاح این رسترها برای تفسیر ویژگی های هیدرولوژیکی وجود دارد. این آموزش فرایند را نشان می دهد که یک مدل ارتفاع دیجیتالی (DEM) را از یک سرور NASA / USGS با کتابخانه Pysheds پایتون بارگیری می کند. آموزش بر روی یک نوت بوک Jupyter انجام شد، فایل های ورودی و اسکریپت ها در بخش نهایی پست قرار می گیرند.


Pysheds

ویژگی های جدید در Pysheds برای حوضه و توزیع شبکه جریان وجود دارد. تا تاریخ این پست (22-01-2019)، آخرین نسخه Pysheds اجازه استفاده از مدل های ارتفاعی دیجیتال را در مختصات جغرافیایی (WGS84) و مختصات پیش بینی شده (WGS 84 UTM) می دهد. این قابلیت تطبیق تجزیه و تحلیل هیدرولوژیکی را افزایش می دهد.


دو مجموعه دستورات Pyshed برای این آموزش برای تهیه DEM مورد استفاده قرار گرفتند:


تشخیص و پر کردن depressions

تشخیص و حل و فصل flats


به طور معمول، تشخیص depressions در بازرسی بصری آسان نیست زیرا آنها در تعداد کمی از سلول ها قرار دارند. هنگامی که Pysheds آنها را پر کرد، باید بخش های مسطح را روی DEM اصلاح شده حل کند.


ELEVATION REPRESENTATION WITH STREAM NETWORK


DEPRESSIONS ON THE DEM (RED PIXELS)


FLAT PARTS AFTER THE DEPRESSION FILL



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


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

دانلود داده های ورودی


Python code

This is the python code for this tutorial:


#Import required libraries

import numpy as np

import matplotlib.pyplot as plt

import matplotlib.colors as colors

import geopandas as gpd

from pysheds.grid import Grid

import mplleaflet

%matplotlib inline

#Open a digital elevation model 

grid = Grid.from_raster('../Rst/20190109125130_1063922483.tif', data_name='dem')

#Define a function to plot the digital elevation model 

def plotFigure(data, label, cmap='Blues'):

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

    plt.imshow(data, extent=grid.extent)

    plt.colorbar(label=label)

    plt.grid()

#Minnor slicing on borders to enhance colobars

elevDem=grid.dem[:-1,:-1]

plotFigure(elevDem, 'Elevation (m)')

# Detect depressions


# Detect depressions

depressions = grid.detect_depressions('dem')


# Plot depressions

plt.imshow(depressions)

# Fill depressions

grid.fill_depressions(data='dem', out_name='flooded_dem')

# Test result

depressions = grid.detect_depressions('flooded_dem')

plt.imshow(depressions)

# Detect flats

flats = grid.detect_flats('flooded_dem')


# Plot flats

plt.imshow(flats)

grid.resolve_flats(data='flooded_dem', out_name='inflated_dem')

plt.imshow(grid.inflated_dem[:-1,:-1])

# Create a flow direction grid

#N    NE    E    SE    S    SW    W    NW

dirmap = (64,  128,  1,   2,    4,   8,    16,  32)

grid.flowdir(data='inflated_dem', out_name='dir', dirmap=dirmap)

plotFigure(grid.dir,'Flow Direction','viridis')

# Specify discharge point

x, y = -107.91663,27.83479

# Delineate the catchment

grid.catchment(data='dir', x=x, y=y, dirmap=dirmap, out_name='catch',

               recursionlimit=15000, xytype='label', nodata_out=0)

# Clip the bounding box to the catchment

grid.clip_to('catch')

# Get a view of the catchment

demView = grid.view('dem', nodata=np.nan)

plotFigure(demView,'Elevation')

#export selected raster

grid.to_raster(demView, '../Output/clippedElevations_WGS84.tif')

# Define the stream network


grid.accumulation(data='catch', dirmap=dirmap, pad_inplace=False, out_name='acc')


accView = grid.view('acc', nodata=np.nan)

plotFigure(accView,"Cell Number",'PuRd')

streams = grid.extract_river_network('catch', 'acc', threshold=200, dirmap=dirmap)

streams["features"][:2]

def saveDict(dic,file):

    f = open(file,'w')

    f.write(str(dic))

    f.close()

#save geojson as separate file

saveDict(streams,'../Output/streams_WGS84.geojson')

# Some functions to plot the json on jupyter notebook

streamNet = gpd.read_file('../Output/streams_WGS84.geojson')

streamNet.crs = {'init' :'epsg:4326'}

# The polygonize argument defaults to the grid mask when no arguments are supplied

shapes = grid.polygonize()


# Plot catchment boundaries

fig, ax = plt.subplots(figsize=(6.5, 6.5))


for shape in shapes:

    coords = np.asarray(shape[0]['coordinates'][0])

    ax.plot(coords[:,0], coords[:,1], color='cyan')


ax.set_xlim(grid.bbox[0], grid.bbox[2])

ax.set_ylim(grid.bbox[1], grid.bbox[3])

ax.set_title('Catchment boundary (vector)')

gpd.plotting.plot_dataframe(streamNet, None, cmap='Blues', ax=ax)

#ax = streamNet.plot()

mplleaflet.display(fig=ax.figure, crs=streamNet.crs, tiles='esri_aerial')





نظرات (۰)

فرم ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای 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