Daha çox

Ən Yaxın Drenajın (HAND) Üstündəki Hündürlükdəki Səhvlərin Düzəldilməsi


Bu sırt Məkan Analizindən istifadə etdim - ArcGIS -də HAND xəritəsi yaratmaq üçün ən yaxın axın hüceyrəsinin üstündəki hüceyrələrin yüksəkliyini (hündürlüyünü) hesablayın. Əvvəlcə SRTM DEM -dəki lavabonu doldurmaq üçün hidroloji alət dəstini istifadə etdim, axın istiqaməti, axın yığımı və drenaj şəbəkələri. Daha sonra məlumat girişi olaraq çəkmə şəbəkəsi və doldurulmuş DEM -dən istifadə edərək Zonal Statistikanı hesabladım. Sonra hər bir hüceyrə üçün Evklid məsafəsindəki ən yaxın mənbənin yerləşdiyi bölgəni hesablamaq üçün Evklid Yerləşdirmə alətindən istifadə etdim. Nəticəli xəritəni doldurulmuş DEM -dən çıxardım və ərazinin ƏL (Ən Yaxın Drenajın Üstündəki Hündürlüyü) xəritəsini əldə etdim.

xəritə aşağıda göstərilmişdir. Ancaq mənfi dəyərlər əfsanədə belə olmamalıdır. Kimsə bunu necə düzəldə biləcəyimi təklif edə bilərmi?


Mümkün olan neqativlər real depressiyaların nəticəsidir, bu səbəbdən hər hansı bir mənfi dəyərin 0, IMO -ya sıfırlanması səhv olmaz. Mənfiliklərin yerini xəritəyə salın və qərar verməzdən əvvəl daxil etdiyiniz DEM və layiqli peyk görüntüsü ilə müqayisə edin.


Bunun yanında, HAND -da əsas şey, eniş axınının ən yaxın axın hücrəsinə qədər gedən yolu izləməsi və sonra yüksəklik fərqini hesablamasıdır. Evklid hesablamasından yayınmaq bütün məqamdır.

Renno və digərlərinin HAND üçün istifadə etdikləri həqiqi proqramı izləmək mənim üçün bir az vaxt apardı, çünki bunu kağızlarında qeyd etməkdən narahat olmadılar (> :-() Http://www.dpi.inpe.br/terrahidro/doku.php saytından TerraHidro 0.5 konsol tətbiqi və hidroloji cəhətdən düzəldilmiş bir DEM istifadə edərək d8 grid, töhfə verən sahə və axın yığım rasterləri əldə etmək üçün təlimatları izləyin.

th d8 input_dem.tif output_d8.tif th d8ca output_d8.tif contareagrid.tif th d8drainage contareagrid.tif drainagegrid_100.tif 100

sonra http://www.dpi.inpe.br/terraview/php/dow.php?body=DowFiles və TerraHidro 0.4.2 -dən http://wiki.dpi.inpe.br/doku saytından Terraview 4.2.2 əldə edin. php? id = ardıcıl olaraq yükləyin və quraşdırın. İndi:

  • TerraHidro -nu açın (bu, TerraView -i plugin aktiv olaraq açılır)
  • Fayl> Veritabanını Aç bölməsinə keçin və yeni bir Access verilənlər bazası yaratmaq üçün göstərişlərə əməl edin (bilirəm, bilirəm, amma sadədir ...)
  • Fayl> İdxal Rasterinə gedin və SRTM DEM-H, D8 axın ızgarası və drenaj şəbəkəsini idxal etmək üçün göstərişlərə əməl edin.
  • Sağ üst küncdə olan və üzərində kiçik bir M olan Hidroloji Alətlər düyməsini basın
  • HAND tapmaq üçün yuxarıya doğru sağa vurun. Çıxış qatını əldə etmək üçün göstərişlərə əməl edin
  • Çıxışlar mövzuya sağ tıklayarak ixrac edilə bilər.

Girişləri yaratmaq üçün TerraHidro 0.5 -i tövsiyə edirəm, çünki daha böyük məlumat dəstlərini idarə edə bilir və mil daha sürətlidir. Sadəcə bir HAND əmri yoxdur.

GRASS 7 -də r.stream.extract və r.stream.distance zəncirini bağlayaraq 'rəsmi' HAND -a çox oxşar bir nəticə əldə edə bilərsiniz. Bonus budur ki, istəsəniz d8 deyil, dInf -dən istifadə edə bilərsiniz, ancaq bəzi məhsullar istehsal edir. neqativlər, prosedurunuzda olduğu kimi.


İstifadə etdiyiniz həll yolu çox sıx axın şəbəkəsində işləyə bilər. Aydındır ki, bu sizin işiniz deyil.

Düşünürəm ki, HAND dediyiniz şey aşağı axındakı ən yaxın drenaj nöqtələrinin yüksəkliyindən yüksəkdir, yəni. ilk nöqtə aşağı.

Raster kalkulyatorundan istifadə edərək axın yığım rasterindən "axınlarınızı" təyin edin və Doldurulmuş rasterdən ona yüksəklik təyin edin, məsələn:

Con ("facc" => 350000, "dolu")

Çıxış rasterini "daşqın" adlandırın. Aşağıdakı skriptdə axın istiqaməti ızgarasına, "daşqın" a və çıxış ızgarası adına işarə edən 3 sətri dəyişdirin (skriptin altındakı)

Skript, drenaj nöqtəsinin yüksəlməsini nöqtə tutma hücrəsindəki hüceyrələrə təyin edir və nəticəni rasterin çıxışına saxlayır. HAND əldə etmək üçün sizə lazım olacaq çıxarmaq doldurulmuş DEM -dən çıxış rasteri.

arcpy, os, traceback, sys, arcpy -dən numpy idxal enc arcpy.sa idxal * fdir = r'D:  Scratch  fdir 'demG = r'D:  Scratch  sel' d = arcpy. Təsvir edin (demG) ## SR = d.spatialReference cəhd: def showPyMessage (): arcpy.AddMessage (str (time.ctime ()) + " -" + mesaj) dirArray = arcpy.RasterToNumPyArray (fdir, "", "", "", -9999) dem = arcpy.RasterToNumPyArray (demG, "", "", "",-9999) nRows, nCols = dirArray.shape blankArray = arcpy.RasterToNumPyArray (demG, "", "", ""--9999) cellTotal = nCols*nRows d = arcpy.Description (fdir) mənşə = d.extent.lowerLeft cSize = arcpy.Raster (fdir) .meanCellHeight ## hüceyrə qonşusu tapmaq üçün fDirs = (1,2,4,8,16, 32,64,128) dCol = (1, 1, 0, -1, -1, -1, 0,1) dRow = (0, -1, -1, -1, 0, 1, 1,1) ## dRow = (0, 1, 1, 1, 0, -1, -1, -1) ## əsas döngə arcpy.SetProgressor ("addım", "", 0, nRows) nRow aralığında (nRows): aralığında nCol üçün (nCols): S = dirArray [nRow, nCol] əgər S (-1, -9999) -da: davam nR, nC = nRow, nCol hüceyrələri = [(nR, nC)] z = dem [nR, nC] Doğru isə: istiqamət = dirArray [nR, nC] i = fDirs.index (direc tX) dX = dCol [i]; nC+= dX ## əgər nC in (0, nCols): nC aralığında deyilsə qır (nCols): break dY = dRow [i]; nR+= dY ## əgər nR in ( 0, nRows): nR aralığında deyilsə (nRows): break hüceyrələri. Append ((nR, nC)) S = dirArray [nR, nC] z = dem [nR, nC] əgər S <-9998 və ya z> -9998: əgər S ==-1: z = blankArray [nR, nC] hüceyrələrdə nR, nC üçün fasilə: blankArray [nR, nC] = z dirArray [nR, nC] =-1 arcpy.SetProgressorPosition () myRaster = arcpy.NumPyArrayToRaster (blankArray, mənşəyi, cSize, cSize) oneGrid = Con (myRaster <>-9999, myRaster) oneGrid.save (r'D:  Aerials  nztm  toriver ') del dirArray, blankArray istisna olmaqla: mesaj = "  n *** PYTHON ERRORS *** "; showPyMessage () message = "Python Traceback Məlumatı:" + traceback.format_tb (sys.exc_info () [2]) [0]; showPyMessage () message = "Python Error Info:" + str (sys.exc_type) + ":" + str (sys.exc_value) + " n"; showPyMessage ()

Qeyd: 3000*3000 hüceyrə girişinin işlənməsi təxminən 5 dəqiqə çəkir.


Videoya baxın: قرانيات الغاوي. تصحيح الأخطاء الشائعة في التلاوة أية سورة يونس (Sentyabr 2021).