أكثر

تصحيح الأخطاء في الارتفاع فوق أقرب نموذج صرف (يدوي)

تصحيح الأخطاء في الارتفاع فوق أقرب نموذج صرف (يدوي)


لقد استخدمت هذا التحليل المكاني للمداس - احسب ارتفاع الخلايا (الارتفاع) فوق أقرب خلية تدفق لإنشاء خريطة HAND في ArcGIS. أولاً ، استخدمت مجموعة أدوات الهيدرولوجيا لملء الحوض في SRTM DEM ، واتجاه التدفق المتولد ، وتراكم التدفق ، وشبكات الصرف. ثم قمت بعد ذلك بحساب إحصائيات المنطقة باستخدام شبكة التجفيف و DEM المملوء كمدخل للبيانات. ثم استخدمت أداة التخصيص الإقليدية لحساب منطقة أقرب موقع مصدر في المسافة الإقليدية لكل خلية. لقد طرحت الخريطة الناتجة من DEM المملوء وحصلت على خريطة HAND (الارتفاع فوق أقرب تصريف) للمنطقة.

الخريطة موضحة أدناه. ومع ذلك ، تظهر القيم السالبة في وسيلة الإيضاح والتي لا ينبغي أن تكون كذلك. هل يمكن لأي شخص أن يقترح كيف يمكنني تصحيح هذا؟


من المحتمل أن تكون السلبيات ناتجة عن انخفاضات حقيقية ، لذلك لن يكون من الخطأ إعادة تعيين أي قيم سلبية إلى 0 ، IMO. ضع خريطة لموقع السلبيات وقارن مع مدخلات DEM وصورة القمر الصناعي اللائقة قبل اتخاذ القرار.


وبغض النظر عن ذلك ، فإن الشيء الرئيسي في HAND هو أنه يتتبع مسار التدفق لأسفل إلى أقرب خلية تيار ثم يحسب فرق الارتفاع. تجنب الحسابات الإقليدية هو بيت القصيد.

لقد استغرق الأمر مني بعض الوقت لتعقب البرنامج الفعلي الذي استخدمه Renno وآخرون لـ HAND نظرًا لأنهم لم يكلفوا أنفسهم عناء اقتباسه في ورقتهم (> :-(). إنه صعب بعض الشيء ، لكنه يؤدي المهمة. ابدأ بـ تطبيق وحدة التحكم TerraHidro 0.5 من http://www.dpi.inpe.br/terrahidro/doku.php واتبع التعليمات للحصول على شبكة d8 والمنطقة المساهمة ونقطية تراكم التدفق باستخدام DEM المصحح هيدرولوجيًا ، على سبيل المثال

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

ثم احصل على Terraview 4.2.2 من http://www.dpi.inpe.br/terraview/php/dow.php؟body=DowFiles و TerraHidro 0.4.2 من http://wiki.dpi.inpe.br/doku. php؟ id = تنزيلها وتثبيتها بالتتابع. الآن:

  • افتح TerraHidro (يفتح هذا TerraView مع تمكين المكون الإضافي)
  • انتقل إلى ملف> فتح قاعدة بيانات واتبع المطالبات لإنشاء قاعدة بيانات Access جديدة (أعرف ، أعرف ، لكن الأمر بسيط ...)
  • انتقل إلى ملف> استيراد البيانات النقطية واتبع المطالبات لاستيراد SRTM DEM-H وشبكة تدفق D8 وشبكة الصرف
  • انقر على زر الأدوات الهيدرولوجية الموجود في الزاوية اليمنى العليا وبه حرف M صغير
  • اضغط يمينًا عبر الجزء العلوي للعثور على اليد. اتبع المطالبات للحصول على طبقة الإخراج
  • يمكن تصدير المخرجات عن طريق النقر بزر الماوس الأيمن على الموضوع.

أوصي بـ TerraHidro 0.5 لتوليد المدخلات لأنه يمكنه التعامل مع مجموعات بيانات أكبر وأميال أسرع. ليس لديها أمر يدوي.

يمكنك الحصول على مخرجات مشابهة جدًا لـ HAND "الرسمية" من خلال تسلسل r.stream.extract و r.stream.distance في GRASS 7. المكافأة هي أنه يمكنك استخدام dInf ، وليس فقط d8 إذا كنت تريد ، ولكنها تنتج بعضًا السلبيات ، تمامًا مثل الإجراء الخاص بك.


الحل الذي تشير إليه قد يعمل على شبكة دفق كثيفة للغاية. من الواضح أن هذا ليس قضيتك.

أفترض أن ما تسميه يدويًا هو ارتفاع فوق ارتفاع أقرب نقاط صرف في اتجاه مجرى النهر ، أي النقطة الأولى انحدارا.

استخدم الآلة الحاسبة النقطية لتحديد "التدفقات" من البيانات النقطية لتراكم التدفق وتعيين الارتفاع لها من البيانات النقطية المملوءة ، على سبيل المثال:

Con ("facc" => 350000، "ممتلئة")

استدعاء الناتج النقطية "الفيضانات". استبدل 3 أسطر في النص أدناه للإشارة إلى شبكة اتجاه التدفق و "تدفق" واسم شبكة الإخراج (في الجزء السفلي من البرنامج النصي)

يقوم البرنامج النصي بتعيين ارتفاع نقطة الصرف إلى الخلايا الموجودة ضمن مستجمع النقاط ، ويحفظ النتيجة في البيانات النقطية الناتجة. من أجل الحصول على اليد سوف تحتاج لاستخلاص النقطية الإخراج من DEM المملوء.

استيراد arcpy، os، traceback، sys، numpy من arcpy import env من arcpy.sa import * fdir = r'D:  Scratch  fdir 'demG = r'D:  Scratch  Flood' d = arcpy.Describe (demG) ## SR = d.spatialReference حاول: def showPyMessage (): arcpy.AddMessage (str (time.ctime ()) + "-" + message) dirArray = arcpy.RasterToNumPyArray (fdir، ""، ""، ""، -9999) dem = arcpy.RasterToNumPyArray (demG، ""، ""، - 9999) nRows، nCols = dirArray.shape blankArray = arcpy.RasterToNumPyArray (demG، ""، ""، ""، - 9999) cellTotal = nCols * nRows d = arcpy.Describe (fdir) origin = d.extent.lowerLeft cSize = arcpy.Raster (fdir) .meanCellHeight ## الاتجاهات للعثور على جار الخلية 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) ## حلقة رئيسية arcpy.SetProgressor ("step"، ""، 0، nRows) لـ nRow in range (nRows): لـ nCol في النطاق (nCols): S = dirArray [nRow، nCol] إذا كان S في (-1، -9999): تابع nR، nC = nRow، nCol cells = [(nR، nC)] z = dem [nR، nC] بينما صحيح: direction = dirArray [nR، nC] i = fDirs.index (direc ( 0، nRows): كسر إذا لم تكن nR في النطاق (nRows): فاصل الخلايا. -9998: فاصل إذا كان S == - 1: z = فارغ صفيف [nR، nC] فاصل لـ nR، nC في الخلايا: blankArray [nR، nC] = z dirArray [nR، nC] = - 1 arcpy.SetProgressorPosition () myRaster = arcpy.NumPyArrayToRaster (blankArray، origin، cSize، cSize) oneGrid = Con (myRaster <> - 9999، myRaster) oneGrid.save (r'D:  Aerials  nztm  toriver ') del dirArray، blankArray باستثناء: message = "  n *** أخطاء PYTHON *** "؛ showPyMessage () message = "معلومات تتبع Python:" + traceback.format_tb (sys.exc_info () [2]) [0] ؛ showPyMessage () message = "معلومات خطأ Python:" + str (sys.exc_type) + ":" + str (sys.exc_value) + " n"؛ showPyMessage ()

ملاحظة: تستغرق معالجة 3000 * 3000 إدخال خلية حوالي 5 دقائق.


شاهد الفيديو: قرانيات الغاوي. تصحيح الأخطاء الشائعة في التلاوة أية سورة يونس