การรวม Whitebox GAT (ฟรีและเปิด) กับ ArcMap UI? [ปิด]


11

เครื่องมือวิเคราะห์ Geospatial Whitebox

ฉันเขียน ArcGIS VBA Automations ในโรงเรียนระดับบัณฑิตศึกษาหลายแห่ง อย่างไรก็ตามพวกมันขึ้นอยู่กับส่วนขยาย ArcGIS Spatial Analyst ซึ่งไม่เพียง แต่เป็นแหล่งข้อมูลปิด แต่มีราคาแพงจนถึงจุดที่ต้องยับยั้ง

เนื่องจาก VBA เลิกใช้แล้วและเนื่องจากนักวิจัยบางคนที่ U ยังคงใช้เครื่องมือ VBA ของฉันฉันคิดว่ามันคงจะสนุกที่จะเขียนมันใหม่ใน. Net แต่ตอนนี้ด้วยประสบการณ์ที่มากขึ้นฉันก็ตระหนักดีว่ามันจะเหมาะสมกว่าสำหรับการใช้งานด้านวิชาการหากยูทิลิตี้เหล่านั้นใช้อัลกอริทึมแบบเปิด

ด้วยสิ่งนี้ในใจฉันกำลังพิจารณาWhitebox GATว่าเป็นเครื่องมือที่มีศักยภาพสำหรับเครื่องมืออุทกวิทยา Spatial Analyst และฉันอยากรู้ว่ามีเรื่องราวความสำเร็จหรือการ "gotchas" ประหยัดเวลาเกี่ยวกับการรวม ArcGIS / Whitebox

ฉันคาดว่าหลายคนจะต้องการที่จะตอบโต้การแนะนำการใช้ Saga, GRASS, R, และอื่น ๆ หากนี่คือตำแหน่งของคุณโปรดอธิบายว่าเพราะเหตุใดการติดตามการรวม Whitebox จึงไม่ฉลาด ตัวอย่างเช่นรองรับเฉพาะรูปแบบอินพุตบางรูปแบบหรือไม่รองรับไฟล์ขนาดใหญ่ (1-2 GB +) เป็นต้น


ฉันได้เล่นกับ Whitebox UI และด้วยความช่วยเหลือจากบทเรียนของพวกเขาก็ไม่ยากที่จะประมวลผล DEM 30 เมตรที่ฉันวางไว้ก่อน ต่อไปหลังจากที่เรียงแถวแรสเตอร์พลังน้ำแล้วฉันก็สร้างจุดไหลรินและสร้างสันปันน้ำขึ้นมา นี่เป็นการเพียงพอที่จะรับรู้ถึงประสบการณ์การใช้งาน Whitebox

Whitebox สามารถขยายได้และ / หรือสิ้นเปลืองโดยใช้. Net หรือ Python หลังจากประสบความสำเร็จขั้นพื้นฐานบางอย่างใน Whitebox UI ฉันคิดว่าฉันจะเชื่อมโยงงานการประมวลผลล่วงหน้า DEM ทั่วไปเข้ากับการทำงานอัตโนมัติ. Net แบบง่าย (ยังไม่มี ArcMap อยู่) การประมวลผลล่วงหน้า DEM มักจะหมายถึงสิ่งต่อไปนี้:

  1. ตั้งค่าข้อมูลไม่ (Whitebox ต้องการสิ่งนี้ แต่ Arc ไม่เคยทำ)
  2. เติมอ่างล้างมือ
  3. สร้างแรสเตอร์ทิศทางการไหล
  4. สร้างแรสเตอร์การไหลสะสม

ฉันรวบรวม "แอปพลิเคชัน" แบบฟอร์ม Windows ต่อไปนี้ (aka WhiteboxDaisyChain) ใช้ไดเรกทอรีระบบที่ประกอบด้วย ArcGIS Grid (.FLT) และทำงานตามที่ระบุไว้ข้างต้น หากคุณต้องการที่จะลองนี้คุณจะต้องดาวน์โหลดไบนารีรวบรวม , เครื่องรูดจากนั้นคัดลอกทุก.dllไฟล์จาก..\WhiteboxGAT_1_0_7\Pluginsในโครงการของคุณ - ..\WhiteboxDaisyChain\Whiteboxฉันใส่ทุกอย่างใน อย่างไรก็ตามตัวอย่างนี้ต้องการเพียงสี่สิ่งที่DLLsกล่าวถึงที่ด้านบนของตัวอย่างโค้ด


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

// 1) Create a new Windows Form
// 2) Put all these in a Whitebox folder in the C# project root.
// 3) Add project references to the following and create using statements:

using Interfaces;       // requires Add Reference: Interfaces.dll
using ImportExport;     // requires Add Reference: ImportExport.dll
using ConversionTools;  // requires Add Reference: ConversionTools.dll
using flow;             // requires Add Reference: flow.dll


namespace WhiteboxDaisyChain
{
    // 4) Prepare to implement the IHost interface.
    // 5) Right-click IHost, select "Implement interface.."
    public partial class UI : Form, IHost
    {

        // 6) Add a BackgroundWorker object.
        private BackgroundWorker worker;

        public UI()
        {
            InitializeComponent();

            // 7) Instantiate the worker and set "WorkerReportsProgress".
            worker = new BackgroundWorker();
            worker.WorkerReportsProgress = true;
        }


        // 8) Use some event to set things in motion.. i.e. Button click.
        private void button1_Click(object sender, EventArgs e)
        {
            progressLabel.Text = "Running..";

            // This is the path containing my ArcGrid .FLT.
            // All processing will unfold to this directory.
            string path = "C:\\xData\\TutorialData\\DemWhitebox\\";

            string[] fltArgs = new string[1];
            fltArgs[0] = path + "greene30.flt";                 // in: Arc floating point grid

            // creates a raster in Whitebox data model
            ImportArcGrid importAG = new ImportArcGrid();
            importAG.Initialize(this as IHost);
            importAG.Execute(fltArgs, worker);                  // out:  path + "greene30.dep"

            // set the nodata value on the DEM
            string[] noDataArgs = new string[2];
            noDataArgs[0] = path + "greene30.dep";              // in: my raw DEM
            noDataArgs[1] = "-9999";                            // mine used -9999 as nodata value

            SetNoData setNoData = new SetNoData();
            setNoData.Initialize(this as IHost);
            setNoData.Execute(noDataArgs, worker);              // out:  path + "greene30.dep"

            // fill sinks in the DEM
            string[] fillSinksArgs = new string[4];
            fillSinksArgs[0] = path + "greene30.dep";           // in: my DEM with NoData Fixed
            fillSinksArgs[1] = path + "greene30_fill.dep";      // out: my DEM filled
            fillSinksArgs[2] = "50";                            // the dialog default
            fillSinksArgs[3] = "0.01";                          // the dialog default

            FillDepsBySize fillSinks = new FillDepsBySize();
            fillSinks.Initialize(this as IHost);
            fillSinks.Execute(fillSinksArgs, worker);

            // create a flow direction raster
            string[] flowDirArgs = new string[2];
            flowDirArgs[0] = path + "greene30_fill.dep";        // in: my Filled DEM
            flowDirArgs[1] = path + "greene30_dir.dep";         // out: flow direction raster

            FlowPointerD8 flowDirD8 = new FlowPointerD8();
            flowDirD8.Initialize(this as IHost);
            flowDirD8.Execute(flowDirArgs, worker);

            // create a flow accumulation raster
            string[] flowAccArgs = new string[4];
            flowAccArgs[0] = path + "greene30_dir.dep";         // in: my Flow Direction raster
            flowAccArgs[1] = path + "greene30_acc.dep";         // out: flow accumulation raster
            flowAccArgs[2] = "Specific catchment area (SCA)";   // a Whitebox dialog input
            flowAccArgs[3] = "false";                           // a Whitebox dialog input

            FlowAccumD8 flowAccD8 = new FlowAccumD8();
            flowAccD8.Initialize(this as IHost);
            flowAccD8.Execute(flowAccArgs, worker);

            progressLabel.Text = "";
            progressLabel.Text = "OLLEY-OLLEY-OXEN-FREE!";
        }



        /* IHost Implementation Methods Below Here */

        public string ApplicationDirectory
        {
            get { throw new NotImplementedException(); }
        }

        public void ProgressBarLabel(string label)
        {
            this.progressLabel.Text = "";
            this.progressLabel.Text = label;                    // This is the only one I used.
        }

        public string RecentDirectory
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public bool RunInSynchronousMode
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public void RunPlugin(string PluginClassName)
        {
            throw new NotImplementedException();
        }

        public void SetParameters(string[] ParameterArray)
        {
            throw new NotImplementedException();
        }

        public void ShowFeedback(string strFeedback, string Caption = "GAT Message")
        {
            throw new NotImplementedException();
        }
    }
}

จนถึงตอนนี้ฉันกำลังขุดสิ่งนี้ แต่ฉันยังไม่มีเรื่องราวความสำเร็จที่แท้จริงหรือนักแสดงโชว์คนใดที่จะอธิบาย .. เป้าหมายต่อไปของฉันคือการส่งจุดไหลจาก ArcMap แบบโต้ตอบ โดยพื้นฐานแล้วฉันต้องการคลิกแผนที่ .. ไปสู่ลุ่มน้ำ


1
ฉันแค่อยากจะชี้ให้เห็นว่า Whitebox เวอร์ชันล่าสุดอนุญาตให้คุณแปลงรูปร่างไฟล์เทเทลจุดบนหน้าจอให้เป็นดิจิทัลเพื่อป้อนไปยังเครื่องมือลุ่มน้ำ มันใช้งานได้ค่อนข้างดี JL

@ JohnLindsay เอาล่ะฉันจำคุณได้ในฐานะศาสตราจารย์ Guelph ที่สร้าง Whitebox เมื่อฉันเริ่มหัวข้อนี้ในเดือนมกราคม 2012 Whitebox เขียนด้วย. Net แต่ตอนนี้เป็น Java ฉันเข้าใจ ฉันได้พิจารณาลบหัวข้อนี้ว่าไม่เกี่ยวข้องเนื่องจากไฟล์. Net ไม่ได้รับการดูแลรักษา แต่ถ้ารีลีสเก่ายังคงมีอยู่แม้จะไม่ได้ลบล้างก็ยังมีค่า ฉันเคยคิดเกี่ยวกับการสร้างแอพมือถือสำหรับผู้ที่ชื่นชอบการลอยตัวซึ่งใช้ Whitebox ใน. Net WebServices แต่ฉันได้เริ่มใช้ความคิดนั้น ฉันมองข้าม "คลังข้อมูล" ในการดาวน์โหลดหรือไม่?
elrobis

คำตอบ:


3

หากคุณต้องการที่จะพิจารณาการใช้งานอื่น ๆ นอก Spatial Analyst คุณอาจพิจารณามองเข้าไปในห้องสมุด SEXTANTE แม้ว่าฉันจะไม่ได้ใช้มันเป็นการส่วนตัวหากคุณดูวิดีโอคลิปนี้คุณจะเห็นว่าพวกเขาแสดงวิธีการทำงานกับ rasters

ทำไมคุณถึงต้องพิจารณาชุดเครื่องมือนี้ พวกเขาได้สร้าง " SEXTANTE for ArcGIS extension " (ฟรี) ซึ่งอนุญาตให้ผู้ใช้บริโภคเครื่องมือ SEXTANTE ใน ArcMap


นั่นเป็นเคล็ดลับที่ดีฉันจะตรวจสอบมัน
elrobis

หมายเหตุ SEXTANTE สำหรับ ArcGIS ไม่มีอยู่อีกต่อไป ดูคำถามนี้
Fezter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.