11 votos

¿Cualquier experiencia o "trucos" integración Whitebox GAT (libre y abierto) con la UI ArcMap?

Whitebox Geospatial Analysis Tools

Me escribió un número de ArcGIS VBA automatismos en la escuela de posgrado; sin embargo, son totalmente dependiente de la ESRI SpatialAnalyst extensión, que no sólo es de código cerrado, pero caro para el punto de disuasión.

Desde VBA es obsoleto, ya que algunos investigadores de la U todavía uso mi VBA herramientas, pensé que sería divertido volver a escribir .Net. Pero ahora, con más experiencia, más me doy cuenta de que podría ser más apropiado para uso académico, si esos servicios públicos consumidos abrir los algoritmos.

Con esto en mente, estoy pensando en Whitebox GAT como un potencial de stand-in para el SpatialAnalyst hidrología herramientas, y tengo la curiosidad de si hay historias de éxito o de ahorro de tiempo "trampas" relacionado con ArcGIS/Whitebox integración.

Me imagino que varias personas se quieren contador-sugieren la implementación de la Saga, HIERBA, R, et cetera. Si este es su posición, describa por qué perseguir un Whitebox integración sería imprudente. Por ejemplo, ¿sólo el soporte de varios formatos de entrada, tiene la mala manipulación de los grandes (de 1 a 2 GB+) archivos, es más lento que mi hockey patinaje.. Usted consigue la idea. :)

[Actualización]

Hice un poco jugando con la Whitebox interfaz de usuario, y con la ayuda de los tutoriales, no fue difícil para pre-procesar un 30 metros DEM yo tenía alrededor. Luego, después de alinear el hydro rásteres, he creado un punto de vertido y se representa su cuenca. Esto fue suficiente para conseguir una sensación para el Whitebox experiencia de usuario.

Whitebox es ampliable y/o el uso de consumibles .Net o Python. Después de haber logrado algunos conceptos básicos en el Whitebox interfaz de usuario, pensé en cadena de la típica DEM pre-procesamiento de tareas con un simple .Red de automatización (no ArcMap todavía). DEM pre-procesamiento generalmente significa lo siguiente:

  1. no se establece ningún valor de datos (Whitebox necesidades de este, pero el Arco nunca lo hizo)
  2. llene lavamanos
  3. crear una dirección de flujo de trama
  4. crear un flujo de acumulación de trama

Formé el siguiente Formulario Windows forms "aplicación" (aka WhiteboxDaisyChain). Se necesita un sistema de directorio que contiene una ArcGIS (Grid.FLT) y realiza las tareas señaladas anteriormente. Si quieres probar esto, usted necesitará descargar los binarios compilados, descomprimir, copiar todos los .dll archivos de ..\WhiteboxGAT_1_0_7\Plugins en el proyecto, puse todo en ..\WhiteboxDaisyChain\Whitebox. Sin embargo, en este ejemplo sólo se necesita el cuatro DLLs mencionado en la parte superior de la muestra de código.


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

Hasta ahora estoy cavando, pero yo todavía no tiene una verdadera historia de éxito o de cualquier show-tapones para describir.. Mi próxima meta será de forma interactiva la presentación de verter puntos de ArcMap. Básicamente, quiero haga clic en el mapa ..la cuenca.

3voto

aditya Puntos 111

Si usted desea considerar otras aplicaciones fuera de Spatial Analyst, puede considerar la opción en la que el SEXTANTE de la biblioteca. Mientras que yo no he utilizado personalmente, si usted mira este video clip, se puede ver que demuestran formas de trabajar con los rásteres.

¿Por qué podría considerar este conjunto de herramientas? Ellos ya han construido el "SEXTANTE para la extensión de ArcGIS" (libre), que permite a los usuarios consumir SEXTANTE herramientas de ArcMap.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X