Tích hợp Whitebox GAT (miễn phí và mở) với ArcMap UI? [đóng cửa]


11

Công cụ phân tích không gian địa lý Whitebox

Tôi đã viết một số tự động hóa VBA ArcGIS ở trường học; tuy nhiên, chúng hoàn toàn phụ thuộc vào phần mở rộng Phân tích không gian ArcGIS, không chỉ là nguồn đóng mà còn đắt đến mức răn đe.

Vì VBA không được dùng nữa và vì một số nhà nghiên cứu tại U vẫn sử dụng các công cụ VBA của tôi, tôi nghĩ sẽ rất vui khi viết lại chúng trong .Net. Nhưng bây giờ, với nhiều kinh nghiệm hơn, tôi nhận ra rằng nó sẽ phù hợp hơn cho việc sử dụng học thuật nếu những tiện ích đó sử dụng thuật toán mở.

Với suy nghĩ này, tôi đang xem Whitebox GAT như một công cụ tiềm năng cho các công cụ thủy văn Phân tích Không gian, và tôi tò mò liệu có câu chuyện thành công hay "gotchas" nào tiết kiệm thời gian liên quan đến tích hợp ArcGIS / Whitebox không.

Tôi dự đoán một số người sẽ muốn phản đối đề xuất thực hiện Saga, GRASS, R, et cetera. Nếu đây là vị trí của bạn, vui lòng mô tả lý do tại sao theo đuổi tích hợp Whitebox sẽ không khôn ngoan. Ví dụ: nó chỉ hỗ trợ một vài định dạng đầu vào, xử lý kém các tệp lớn (1-2 GB +), v.v.


Tôi đã thực hiện một số trò chơi với Giao diện người dùng Whitebox và với sự trợ giúp của các hướng dẫn của họ , không khó để xử lý trước một DEM dài 30 mét mà tôi đã đặt xung quanh. Tiếp theo, sau khi xếp hàng các raster thủy điện, tôi đã tạo một điểm rót và đưa ra lưu vực của nó. Điều này là đủ để có được cảm giác về trải nghiệm người dùng Whitebox.

Whitebox có thể mở rộng và / hoặc tiêu hao bằng cách sử dụng .Net hoặc Python. Đã hoàn thành một số điều cơ bản trong Giao diện người dùng Whitebox, tôi nghĩ rằng tôi sẽ kết hợp các tác vụ tiền xử lý DEM điển hình với tự động hóa .Net đơn giản (chưa có ArcMap). Tiền xử lý DEM thường có nghĩa như sau:

  1. không đặt giá trị dữ liệu (Whitebox cần điều này, nhưng Arc không bao giờ làm thế)
  2. bồn rửa
  3. tạo ra một raster hướng dòng chảy
  4. tạo ra một raster tích lũy dòng chảy

Tôi kết hợp "ứng dụng" Windows Form sau (aka WhiteboxDaisyChain). Nó nhận một thư mục hệ thống chứa ArcGIS Grid (.LT) và thực hiện các tác vụ được ghi chú ở trên. Nếu bạn muốn thử điều này, bạn sẽ cần tải xuống các tệp nhị phân đã biên dịch , giải nén, sau đó sao chép tất cả các .dlltệp từ ..\WhiteboxGAT_1_0_7\Pluginsdự án của bạn - Tôi đặt mọi thứ vào ..\WhiteboxDaisyChain\Whitebox. Tuy nhiên, ví dụ này chỉ cần bốn DLLsđề cập ở đầu mẫu mã.


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

Cho đến nay tôi đang đào cái này, nhưng tôi chưa có câu chuyện thành công thực sự hay bất kỳ điểm dừng chương trình nào để mô tả .. Mục tiêu tiếp theo của tôi sẽ là gửi điểm tương tác từ ArcMap. Về cơ bản, tôi muốn nhấp vào bản đồ .. quên đầu nguồn.


1
Tôi chỉ muốn chỉ ra các phiên bản mới nhất của Whitebox cho phép bạn số hóa một điểm đổ shapefile trên màn hình để nhập vào công cụ đầu nguồn. Nó hoạt động khá tốt. JL

@JohnLindsay, này, tôi nhận ra bạn là giáo sư Guelph, người đã tạo ra Whitebox. Khi tôi bắt đầu chủ đề này trở lại vào tháng 1 năm 2012, Whitebox đã được viết bằng .Net, nhưng bây giờ tôi đã hiểu bằng Java. Tôi đã coi việc xóa chủ đề này là không liên quan, vì nội dung .Net không được duy trì, nhưng nếu bản phát hành cũ vẫn có sẵn, thậm chí không được biết đến, nó vẫn có giá trị. Tôi đã nghĩ về việc tạo một ứng dụng di động cho những người đam mê nổi đã sử dụng Whitebox trong .Net WebService, nhưng tôi đã từ chối ý tưởng đó. Tôi đã bỏ qua một "tài liệu lưu trữ" trong số các bản tải xuống chưa?
elrobis

Câu trả lời:


3

Nếu bạn muốn xem xét các ứng dụng khác ngoài Spatial Analyst, bạn có thể xem xét việc tìm kiếm thư viện SEXTANTE . Mặc dù cá nhân tôi chưa sử dụng nó, nhưng nếu bạn xem video clip này , bạn có thể thấy rằng họ thể hiện các cách để làm việc với các trình quét.

Tại sao bạn có thể xem xét bộ công cụ này? Họ đã xây dựng " SEXTANTE cho tiện ích mở rộng ArcGIS " (miễn phí), cho phép người dùng sử dụng các công cụ SEXTANTE trong ArcMap.


Đó là một mẹo hay, tôi sẽ xem xét nó.
elrobis

Lưu ý, SEXTANTE cho ArcGIS không còn tồn tại nữa. Xem câu hỏi này .
Fezter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.