WhiteMap GAT (무료 및 공개)를 ArcMap UI와 통합 하시겠습니까? [닫은]


11

화이트 박스 지리 공간 분석 도구

나는 대학원에 많은 ArcGIS VBA 자동화를 썼습니다; 그러나 이들은 ArcGIS Spatial Analyst 확장에 전적으로 의존합니다. ArcGIS Spatial Analyst 확장은 폐쇄 소스 일뿐만 아니라 억제력까지 비쌉니다.

VBA는 더 이상 사용되지 않으며 U의 일부 연구원은 여전히 ​​내 VBA 도구를 사용하기 때문에 .Net에서 다시 작성하는 것이 재미있을 것이라고 생각했습니다. 그러나 이제는 더 많은 경험을 바탕으로 유틸리티가 개방형 알고리즘을 사용하는 경우 학업에 더 적합하다는 것을 알았습니다.

이를 염두에두고 Whitebox GAT 를 Spatial Analyst 수 문학 도구의 잠재적 인 표준으로 고려 하고 있으며 ArcGIS / Whitebox 통합과 관련된 성공 사례 나 시간을 절약 할 수있는 "gotchas"가 있는지 궁금합니다.

여러 사람들이 Saga, GRASS, R 등의 구현을 반대 제안하기를 기대합니다. 이것이 당신의 입장이라면, Whitebox 통합을 추구하는 것이 현명하지 못한 이유를 설명하십시오. 예를 들어, 몇 가지 입력 형식 만 지원합니까, 대용량 (1-2GB +) 파일 처리가 좋지 않은 경우 등


Whitebox UI를 가지고 놀았 으며 튜토리얼을 사용 하여 30 미터 DEM을 사전 처리하는 것은 어렵지 않았습니다. 다음으로 하이드로 래스터를 정렬 한 후 유동점을 만들고 유역을 렌더링했습니다. 이것은 Whitebox 사용자 경험을 느끼기에 충분했습니다.

Whitebox는 .Net 또는 Python을 사용하여 확장 가능하거나 소모품입니다. Whitebox UI에서 몇 가지 기본 사항을 달성 한 후, 일반적인 DEM 사전 처리 작업을 간단한 .Net 자동화 (아직 ArcMap 없음)로 연결한다고 생각했습니다. DEM 전처리는 일반적으로 다음을 의미합니다.

  1. 데이터 값을 설정하지 않음 (화이트 박스에 필요하지만 Arc는 절대 사용하지 않음)
  2. 싱크대 채우기
  3. 흐름 방향 래스터 생성
  4. 흐름 축적 래스터 생성

다음 Windows Form "application"(일명 WhiteboxDaisyChain)을 정리했습니다 . ArcGIS Grid (.FLT)가 포함 된 시스템 디렉토리를 사용하여 위에서 언급 한 작업을 수행합니다. 이것을 시도 하려면 컴파일 된 바이너리다운로드하고 압축을 푼 다음 모든 .dll파일을 ..\WhiteboxGAT_1_0_7\Plugins프로젝트로 복사해야합니다 ..\WhiteboxDaisyChain\Whitebox. 그러나이 예제 DLLs는 코드 샘플 맨 위에 언급 된 4 개만 필요합니다 .


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를 만든 Guelph 교수로 인정합니다. 2012 년 1 월 에이 스레드를 다시 시작했을 때 Whitebox는 .Net으로 작성되었지만 이제는 Java로 이해합니다. .Net 항목이 유지 관리되지 않기 때문에이 스레드를 삭제하는 것은 무의미한 것으로 간주했지만 이전 릴리스가 여전히 사용 가능하고 유지 관리되지 않아도 여전히 가치가 있습니다. .Net WebServices에서 Whitebox를 사용한 플로팅 애호가를위한 모바일 앱을 만드는 것에 대해 생각했지만 그 아이디어를 표로 작성했습니다. 다운로드 중 "아카이브"를 간과 했습니까?
elrobis

답변:


3

Spatial Analyst 외부의 다른 응용 프로그램을 고려하려면 SEXTANTE 라이브러리를 살펴보십시오 . 개인적으로 사용하지는 않았지만이 비디오 클립 을 보면 래스터로 작업하는 방법을 보여줍니다.

왜이 툴셋을 고려할 수 있습니까? 그들은 이미 " SEXTANTE for ArcGIS 확장 "(무료) 을 구축했으며 ,이를 통해 ArcMap에서 SEXTANTE 도구를 사용할 수 있습니다.


좋은 팁입니다. 내가 살펴 보겠습니다.
elrobis

SEXTANTE for ArcGIS는 더 이상 존재하지 않습니다. 이 질문을 참조하십시오 .
Fezter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.