Whitebox GAT'ı (ücretsiz ve açık) ArcMap UI ile entegre etmek? [kapalı]


11

Whitebox Mekansal Analiz Araçları

Grage okulunda bir dizi ArcGIS VBA otomasyonu yazdım; ancak, tamamen kapalı kaynak olmakla kalmayıp caydırma noktasına pahalı olan ArcGIS Uzamsal Analist uzantısına tamamen bağımlıdırlar.

VBA kullanımdan kaldırıldığından ve U'daki bazı araştırmacılar hala VBA araçlarını kullandığından, bunları .Net'te yeniden yazmanın eğlenceli olacağını düşündüm. Ancak şimdi, daha fazla deneyimle, bu yardımcı programlar açık algoritmalar tüketirse, akademik kullanım için daha uygun olacağını da anlıyorum.

Bunu akılda tutarak, Whitebox GAT'ı Mekansal Analist hidroloji araçları için potansiyel bir stand-in olarak görüyorum ve ArcGIS / Whitebox entegrasyonu ile ilgili herhangi bir başarı hikayesi veya zaman kazandıran "gotchas" olup olmadığını merak ediyorum.

Ben birkaç millet Saga, GRASS, R, et cetera uygulamak karşı önermek isteyeceğini tahmin ediyorum. Bu sizin konumunuzsa, lütfen Whitebox entegrasyonunu takip etmenin neden mantıklı olmayacağını açıklayınız. Örneğin, yalnızca birkaç giriş biçimini destekliyor mu, büyük (1-2 GB +) dosyaları vb.


Whitebox UI ile biraz oynadım ve eğitmenlerinin yardımıyla, 30 metre uzunluğundaki bir DEM'i önceden işlemek zor değildi. Sonra, hidro rasterleri sıraladıktan sonra, bir akma noktası oluşturdum ve havzasını oluşturdum. Bu, Whitebox kullanıcı deneyimi hakkında fikir edinmek için yeterliydi.

Whitebox .Net veya Python kullanılarak genişletilebilir ve / veya sarf edilebilir. Whitebox kullanıcı arayüzünde bazı temelleri tamamladıktan sonra, tipik bir DEM ön işleme görevlerini basit bir .Net otomasyonuyla (henüz ArcMap yok) birlikte zincirleyeceğimi düşündüm. DEM ön işleme genellikle şu anlama gelir:

  1. veri değeri belirlemez (Whitebox buna ihtiyaç duyar, ancak Arc hiçbir zaman gerektirmez)
  2. lavaboları doldur
  3. akış yönü taraması oluştur
  4. akış birikim rasteri oluştur

Aşağıdaki Windows Form "uygulamasını" (aka WhiteboxDaisyChain) bir araya getirdim . ArcGIS Grid (.FLT) içeren bir sistem dizini alır ve yukarıda belirtilen görevleri gerçekleştirir. Bunu denemek istiyorsanız , derlenmiş ikili dosyaları indirmeniz, açmanız ve ardından tüm .dlldosyaları ..\WhiteboxGAT_1_0_7\Pluginsprojenize kopyalamanız gerekir - her şeyi koydum ..\WhiteboxDaisyChain\Whitebox. Ancak, bu örnek yalnızca DLLskod örneğinin üstünde belirtilen dördüne ihtiyaç duyar .


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

Şimdiye kadar bunu kazıyorum, ama henüz tanımlayacağım gerçek bir başarı hikayem ya da herhangi bir gösteri durdurucum yok .. Bir sonraki hedefim etkileşimli olarak ArcMap'tan akma noktaları sunmak olacak. Temel olarak, haritayı tıklamak istiyorum .. havza olsun.


1
Sadece Whitebox'ın en son sürümlerinin, havza aracına girmek için ekrandaki bir şekil dosyası akma noktasını sayısallaştırmanıza izin verdiğini belirtmek istedim. Oldukça iyi çalışıyor. JL

JohnLindsay, hey, seni Whitebox'ı yaratan Guelph profesörü olarak tanıyorum. Bu konuyu Ocak 2012'de tekrar başlattığımda, Whitebox .Net ile yazılmıştı, ancak şimdi Java'da anlıyorum. Net şeyler korunmadığı için bu konuyu silmeyi önemsiz gördüm, ancak eski sürüm hala mevcutsa, korunmasa bile, hala değerli. .Net WebServices'ta Whitebox'ı tüketen yüzen meraklılar için bir mobil uygulama oluşturmayı düşündüm, ancak o zamandan beri bu fikri masaya yatırdım. İndirilenler arasında bir "arşiv" i göz ardı ettim mi?
elrobis

Yanıtlar:


3

Spatial Analyst dışındaki diğer uygulamaları göz önünde bulundurmak isterseniz, SEXTANTE kütüphanesine bakmayı düşünebilirsiniz . Ben şahsen kullanmamış olsam da, bu video klibi izlerseniz, bunların rasterlerle çalışmanın yollarını gösterdiklerini görebilirsiniz.

Neden bu araç setini düşünebilirsiniz? Zaten kullanıcıların ArcMap'taki SEXTANTE araçlarını kullanmalarını sağlayan " ArcGIS için SEXTANTE eklentisini " (ücretsiz) oluşturmuşlardır.


Bu güzel bir ipucu, içine bakacağım.
elrobis

Not: ArcGIS için SEXTANTE artık mevcut değil. Bu soruya bakın .
Fezter
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.