Mengintegrasikan Whitebox GAT (gratis dan terbuka) dengan ArcMap UI? [Tutup]

11

Alat Analisis Geospasial Whitebox

Saya menulis sejumlah otomatisasi ArcGIS VBA di sekolah pascasarjana; Namun, mereka sepenuhnya bergantung pada ekstensi ArcGIS Spatial Analyst, yang tidak hanya sumber tertutup tetapi mahal sampai titik pencegahan.

Karena VBA sudah usang dan karena beberapa peneliti di U masih menggunakan alat VBA saya, saya pikir akan menyenangkan untuk menulis ulang mereka di .Net. Tetapi sekarang, dengan lebih banyak pengalaman, saya lebih lanjut menyadari bahwa akan lebih tepat untuk penggunaan akademis jika utilitas tersebut mengkonsumsi algoritma terbuka.

Dengan pemikiran ini, saya mempertimbangkan Whitebox GAT sebagai potensi untuk alat hidrologi Spatial Analyst, dan saya ingin tahu apakah ada kisah sukses atau "gotcha" hemat waktu terkait dengan integrasi ArcGIS / Whitebox.

Saya mengantisipasi beberapa orang akan ingin menyarankan saran menerapkan Saga, GRASS, R, dan sebagainya. Jika ini posisi Anda, tolong jelaskan mengapa mengejar integrasi Whitebox tidak bijaksana. Misalnya, apakah itu hanya mendukung beberapa format input, buruk menangani file besar (1-2 GB +), dll.


Saya melakukan beberapa bermain-main dengan UI Whitebox, dan dengan bantuan tutorial mereka , tidak sulit untuk pra-proses DEM 30 meter saya telah meletakkan di sekitar. Selanjutnya, setelah mengantre hidro raster, saya membuat titik tuangkan dan memberikan daerah aliran sungai. Ini cukup untuk merasakan pengalaman pengguna Whitebox.

Whitebox dapat diperpanjang dan / atau dikonsumsi menggunakan .Net atau Python. Setelah menyelesaikan beberapa dasar-dasar di UI Whitebox, saya pikir saya akan menyatukan tugas-tugas pra-pemrosesan DEM yang khas dengan otomatisasi .Net sederhana (belum ada ArcMap). Pra-pemrosesan DEM biasanya berarti sebagai berikut:

  1. tidak menetapkan nilai data (Whitebox membutuhkan ini, tetapi Arc tidak pernah melakukannya)
  2. mengisi wastafel
  3. buat aliran arah raster
  4. membuat akumulasi aliran raster

Saya mengumpulkan "aplikasi" Formulir Windows berikut ini (alias WhiteboxDaisyChain). Dibutuhkan direktori sistem yang berisi ArcGIS Grid (.FLT) dan melakukan tugas-tugas yang disebutkan di atas. Jika Anda ingin mencoba ini, Anda harus mengunduh binari yang dikompilasi , unzip, lalu salin semua .dllfile ..\WhiteboxGAT_1_0_7\Pluginske dalam proyek Anda - saya memasukkan semuanya ..\WhiteboxDaisyChain\Whitebox. Namun, contoh ini hanya memerlukan empat yang DLLsdisebutkan di bagian atas contoh kode.


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();
        }
    }
}

Sejauh ini saya sedang menggali ini, tetapi saya belum memiliki kisah sukses yang nyata atau penggagas pertunjukan untuk diuraikan .. Tujuan saya berikutnya adalah secara interaktif mengirimkan poin tuangkan dari ArcMap. Pada dasarnya, saya ingin mengklik peta .. dapatkan daerah aliran sungai.

elrobis
sumber
1
Saya hanya ingin menunjukkan versi terbaru dari Whitebox memungkinkan Anda untuk mendigitalkan titik tuangkan shapefile di layar untuk diinput ke alat DAS. Ini bekerja dengan sangat baik. JL
@ JohnLindsay, hei di sana, saya mengenali Anda sebagai profesor Guelph yang menciptakan Whitebox. Ketika saya memulai utas ini pada Januari 2012, Whitebox ditulis dalam .Net, tapi sekarang di Jawa saya mengerti. Saya menganggap menghapus utas ini tidak relevan, karena hal-hal .Net tidak dipertahankan, tetapi jika rilis lama masih tersedia, bahkan tidak dikelola, itu masih berharga. Saya telah berpikir tentang membuat aplikasi seluler untuk penggemar terapung yang mengonsumsi Whitebox di .Net WebServices, tetapi sejak itu saya mengajukan gagasan itu. Sudahkah saya mengabaikan "arsip" di antara unduhan?
elrobis

Jawaban:

3

Jika Anda ingin mempertimbangkan aplikasi lain di luar Spatial Analyst, Anda dapat mempertimbangkan melihat ke perpustakaan SEXTANTE . Meskipun saya belum menggunakannya secara pribadi, jika Anda menonton klip video ini , Anda dapat melihat bahwa mereka menunjukkan cara untuk bekerja dengan raster.

Mengapa Anda mempertimbangkan perangkat ini? Mereka telah membangun " SEXTANTE for ArcGIS extension " (gratis), yang memungkinkan pengguna untuk mengkonsumsi alat SEXTANTE di ArcMap.

RyanKDalton
sumber
Itu tip yang bagus, saya akan memeriksanya.
elrobis
Catatan, SEXTANTE untuk ArcGIS tidak ada lagi. Lihat pertanyaan ini .
Fezter