Інтеграція Whitebox GAT (безкоштовно та відкрито) з інтерфейсом ArcMap? [зачинено]


11

Інструменти геопросторового аналізу Whitebox

Я написав ряд автоматичних систем VBA ArcGIS в середній школі; однак вони повністю залежать від розширення ArcGIS Spatial Analyst, яке є не тільки закритим джерелом, але й дорогим до точки стримування.

Оскільки VBA застаріло і оскільки деякі дослідники в США досі використовують мої інструменти VBA, я подумав, що було б цікаво переписати їх у .Net. Але тепер, маючи більший досвід, я розумію, що було б більш доречним для академічного використання, якби ці утиліти використовували відкриті алгоритми.

Зважаючи на це, я розглядаю Whitebox GAT як потенційну позицію для інструментів гідрології просторового аналітика, і мені цікаво, чи є історії успіху чи економія часу, пов'язані з інтеграцією ArcGIS / Whitebox.

Я припускаю, що декілька людей захочуть протидіяти впровадженню Saga, GRASS, R та ін. Якщо це ваша позиція, будь ласка, опишіть, чому домагатися інтеграції Whitebox було б нерозумно. Наприклад, чи підтримує він лише кілька вхідних форматів, чи погана робота з великими (1-2 ГБ +) файлами тощо.


Я пограв з інтерфейсом Whitebox, і за допомогою їхніх навчальних посібників було непросто попередньо обробити 30-метровий DEM, який я проклав. Далі, після вирівнювання гідрорастерів, я створив точку заливки і вивів її вододіл. Цього було достатньо, щоб відчути досвід користувачів Whitebox.

Whitebox можна розширювати та / або споживати, використовуючи .Net або Python. Виконавши деякі основи в інтерфейсі Whitebox, я подумав, що з’єднаю типові завдання попередньої обробки DEM за допомогою простої автоматизації .Net (поки ArcMap ще немає). Попередня обробка DEM зазвичай означає наступне:

  1. не встановлюйте значення даних (Whitebox цього не потребує, але Arc ніколи цього не робив)
  2. заповнення раковин
  3. створити растр напрямку руху
  4. створити растр накопичення потоку

Я зібрав наступну форму Windows "додаток" (ака WhiteboxDaisyChain). Він бере системний каталог, що містить сітку ArcGIS (.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, ей там, я визнаю тебе професором Ґельфа, який створив Whitebox. Коли я розпочав цю тему ще в січні 2012 року, у Whitebox було написано .Net, але тепер це я зрозумів на Java. Я вважаю, що видалення цього потоку не має значення, оскільки .Net матеріал не підтримується, але якщо старий реліз все ще доступний, навіть без збереження, він все ще цінний. Я думав над тим, щоб створити мобільний додаток для плаваючих ентузіастів, які споживали Whitebox у .Net WebServices, але я з тих пір висував цю ідею. Я не помітив "архіви" серед завантажень?
elrobis

Відповіді:


3

Якщо ви хочете розглянути інші програми за межами Spatial Analyst, можете заглянути в бібліотеку SEXTANTE . Хоча я особисто не використовував це, якщо ви дивитесь цей відеокліп , ви бачите, що вони демонструють способи роботи з растрами.

Чому ви можете розглянути цей набір інструментів? Вони вже створили " SEXTANTE для розширення ArcGIS " (безкоштовно), що дозволяє користувачам споживати інструменти SEXTANTE в ArcMap.


Це хороша порада, я розберуся.
elrobis

Зауважте, SEXTANTE для ArcGIS вже не існує. Дивіться це питання .
Фестер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.