【ArcGIS Engine二次開發】入門基礎(2):ArcGIS開發方式(VBA、DLL、Add-in、Engine)對比

文章目錄

  • 2.1 使用VBA進行桌面軟件開發
    • 2.1.1 VBA開發方式
    • 2.1.1 VBA代碼的安全性
  • 2.2 使用DLL進行桌面軟件開發
    • 2.2.1 DLL開發方式
    • 2.2.2 DLL功能的應用部署
  • 2.3 使用Add-in進行桌面軟件開發
  • 2.4 使用ArcGIS Engine構建獨立應用程序


對于桌面GIS應用來說,ArcGIS平臺不僅提供了用于開發獨立運行的GIS應用軟件的二次開發工包ArcGIS Engine,還提供了對ArcGIS Deskop桌面軟件進行擴展的開發的話,在開發個具體的GIS 行業應用軟件時,程序員應該根據系統規權用戶水平和其體應用環境等設計相應的系統架構,從而決定是采用C/S還是B/S架構。如果采用C/S架構,是開發一個獨立的系統還是在現有的ArcGIS桌面軟件上進行擴展。因此,選擇合適的開發方式是進行GIS軟件設計的第一步。特別需要注意的是,并不是所有的GIS應用系統都一定要基于ArcGIS Enine開發。

2.1 使用VBA進行桌面軟件開發

VBA(Visual Basic for Applications)可理解為簡化的Visual Basic語言,它是VisualBasic 語言的子集,主要用于對支持VBA的Windows程序(稱為“宿主程序")進行擴展和定制。微軟公司的Word、Excel等Office辦公套件很早就集成了VBA語言,利用它可以進一步擴充這些宿主程序的功能,或者基于這些宿主程序開發較為復雜的應用系統。Visual Basic開發的系統可以脫離Visual Basic而運行,但是基于VBA開發的系統不能脫離宿主軟件運行,它的代碼存儲在宿主程序的文檔中,如對Word進行VBA定制和開發的代碼存儲在*.doc文件中,對ArcMap進行擴展的代碼存儲于. .mxd地圖文檔中。

使用VBA進行系統擴展是一種輕量級的軟件開發模式。 Esri目前不特別推薦使用VBA進行系統開發,而更側重于推薦使用Python語言進行擴展。但在很多情況下,特別是一些業務模式相對固定的生產和管理部門,并不需要復雜的GIS分析功能,而是更側重于地理數據的管理,并且這些用戶基本掌握了ArcGIS軟件的使用,通過VBA開發方式將一系列業務管理流程自動化為工具按鈕置于ArcGIS桌面軟件中,既能滿足行業管理的需求,又能充分利用ArcGIS本身強大的空間數據管理功能,這時使用VBA開發定制無疑是種較好的方式。

2.1.1 VBA開發方式

通過VBA開發環境進行ArcGIS桌面軟件的擴展和定制是最簡單的GIS軟件開發方式,開發者只需專注于ArGIS軟件不能提供的功能,對于ArcGIS軟件已經提供的工具,直接拿過來可以使用。

ArcGIS Desktop默認是沒有安裝VBA開發環境的,需要手動安裝安裝包中的VBACompatibility,如下圖所示,點擊setup.exe,一路完成即可。安裝完VBA之后,就可以在ArcMap的自定義菜單下看到macro了。

在這里插入圖片描述

1. 宏命令方式

在這里插入圖片描述
將那些能夠自動執行某種操作的命令統稱為宏(Macros),是一種操作命令。

宏命令對話框如下:

在這里插入圖片描述
VBA程序實現界面如下:

在這里插入圖片描述

2. UIControl方式

在這里插入圖片描述

2.1.1 VBA代碼的安全性

VBA代碼保存在文檔或者模板中,開發人員編寫的代碼很容易被別人使用。為了保護,可以設置VBA密碼,增加安全性。

2.2 使用DLL進行桌面軟件開發

DLL(動態鏈接庫)是Windows 平臺下的一種類文件編譯格式,這種格式的文件可以被任何支持COM規則的語言所支持和引用,ArcObjects組件本身的物理文件就是DLL文件。DLL開發方式的特點是開發環境脫離了ArcGIS Desktop軟件,讀者可以使用自己熟悉的開發語言,如Java、C#等語言進行開發;開發的功能可以更為強大和靈活;編譯的結果是DLL文件,封裝性更好,功能分發只需傳遞DLL文件即可。后期維護也只需要更新相應的DLL文件即可,而不需要對源程序做任何修改。

2.2.1 DLL開發方式

在這里插入圖片描述
選擇命名空間引用。

在這里插入圖片描述
以新建一個工具為例,在項目名稱上右鍵→添加→新建項。

在這里插入圖片描述
由于我們開發的工具實際上是對已有的工具進行調用和擴充,因此選擇第二項ArcMap,MapControl,or PageLyaoutControl Tool

在這里插入圖片描述

2.2.2 DLL功能的應用部署

2.3 使用Add-in進行桌面軟件開發

1. addin介紹

ArcGIS從10.0開始支持addin(ArcGIS軟件中又叫作加載項)的方式進行插件制作。相對于以往9.x系列,addin的無論是從使用或者編寫都更加方便快捷。通過開發語言,可以制作ArcGIS Desktop各個軟件模塊的插件。

ArcGIS Add-In插件開發是對ArcGIS Desktop應用軟件的功能擴充,ArcGIS Desktop 本身就是一個插件式框架,可以允許用戶根據自己的需求定制開發擴充功能,開發的功能主要是置于工具欄上。

2. addin開發方式

ArcGIS Add-In插件開發有兩大類型,如下:

  • 一是Python Add-In開發,但是需要從ESRI官網上下載Python加載項向導才能進行。。

  • 二是基于Arc0bject/ArcGIS Engine的Add-In開發,又分command、tool、toolbar、Dockable Window開發。

(1)Python Add-In開發

Esri提供了Python加載項向導工具來實現Addin界面的搭建,可以到Esri官網去下載該工具Python加載項向導 。從介紹來看,該設計器要求的最低ArcGIS版本為10.1 ,如下圖所示:

在這里插入圖片描述

插件下載地址:https://www.arcgis.com/home/item.html?id=5f3aefe77f6b4f61ad3e4c62f30bff3b

雙擊安裝包中的addin_assistant.exe,即可。

在這里插入圖片描述
在這里插入圖片描述
(2)基于ArcObject/ArcGIS Engine的Add-In開發

2.4 使用ArcGIS Engine構建獨立應用程序

對大型、專業的GIS應用系統來講,由于功能的復雜性和軟件版本保護等原因,往往需要所包含的GIS功能脫離ArcGIS平臺軟件獨立運行,這就需要使用AE開發。

例1 :

打開VS2010,新建項目。

在這里插入圖片描述
選擇需要添加的引用項,點擊Next。

在這里插入圖片描述
勾選需要的軟件許可和擴展模塊,點擊Finish。

在這里插入圖片描述
從工箱中添加ToolbarControl、TOCControl和MapControl,簡單的界面構造如下(如果想要更優美的界面,可以借助DevExpress插件來構造個性化的界面):

在這里插入圖片描述
ToolbarControl屬性設置如下:

在這里插入圖片描述
TOCControl屬性設置如下:

在這里插入圖片描述
MapControl屬性設置如下:

在這里插入圖片描述
運行程序,點擊Add Data按鈕加載一個柵格數,如下圖所示。

在這里插入圖片描述
例2:

在這里插入圖片描述

private void button1_Click(object sender, EventArgs e)
{string sPath = Application.StartupPath + "\\world.mxd";if (axMapControl1.CheckMxFile(sPath)){axMapControl1.LoadMxFile(sPath);}
}

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285514.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285514.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285514.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用.Net驅動Jetson Nano的OLED顯示屏

背景最近幾年,邊緣計算的需求急劇爆發。人工智能、物聯網和 5G 的演進給邊緣計算帶來了無限的可能性。因為工作原因,有幸在2019開始接觸了英偉達 Jetson 家族的各種邊緣計算設備:Nano,TX2,AGX,NX等&#xf…

工程測量不用愁,120個視頻動畫幫你忙,簡單易學直觀明了!

工程測量不用愁,120個視頻動畫幫你忙,簡單易學直觀明了!文末提供下載地址。

2016-2017-2學期《程序設計與數據結構》教學進程

2016-2017-2學期《程序設計與數據結構》教學進程 目錄 考核方式課前準備教學進程 第00周學習任務和要求第01周學習任務和要求第02周學習任務和要求第03周學習任務和要求第04周學習任務和要求第05周學習任務和要求第06周學習任務和要求第07周學習任務和要求第08周學習任務和要求…

[轉]Spring SpringMVC SpringBoot SpringCloud概念、關系及區別

一、正面解讀: Spring主要是基于IOC反轉Beans管理Bean類,主要依存于SSH框架(StrutsSpringHibernate)這個MVC框架,所以定位很明確,Struts主要負責表示層的顯示,Spring利…

C語言試題121之輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。

?作者簡介:大家好我是碼莎拉蒂,CSDN博客專家?????? ??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 1、題目 題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。 分析:利用 w…

5.4 Spring AOP

2019獨角獸企業重金招聘Python工程師標準>>> 5.4.1 從代理機制初探AOP 來看一個簡單的例子,當需要在執行某些方法時留下日志信息,可能會這樣寫: import java.util.logging.*; public class HelloSpeaker{ pirvate Logger loggerL…

WPF 實現心電圖曲線繪制

本文經原作者授權以原創方式二次分享,歡迎轉載、分享。原文作者:流浪g原文地址:https://www.cnblogs.com/cong2312/p/16411637.html一、前言項目中之前涉及到胎兒心率圖曲線的繪制,最近項目中還需要添加心電曲線和血樣曲線的繪制功…

C語言試題110之利用條件運算符的嵌套來完成此題:學習成績大于等于90分的同學用 A 表示,60到89 分之間的用 B 表示, 60 分以下的用 C 表示。

?作者簡介:大家好我是碼莎拉蒂,CSDN博客專家?????? ??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 1、題目 題目:C語言試題110之利用條件運算符的嵌套來完成此題:學習成績大于等于90分的同學用 A 表…

【NOIp 2015】【DFS】斗地主

題面 自己網上去搜吧… 代碼 #include <cstdio> #include <cstring> #include <algorithm> #define INF 10000000 #define maxn 40 using namespace std;int t,n,temp,a,zhang[maxn],ansINF;void dfs(int,int,int,int); void shunzi(int,int,int,int,int);vo…

[轉]從入門到精通,Java學習路線導航

引言 最近也有很多人來向我"請教"&#xff0c;他們大都是一些剛入門的新手&#xff0c;還不了解這個行業&#xff0c;也不知道從何學起&#xff0c;開始的時候非常迷茫&#xff0c;實在是每天回復很多人也很麻煩&#xff0c;所以在這里統一作個回復吧。 Java學習路線…

如何讓 Dapper 支持 DateOnly 類型

前言在上次的文章中&#xff0c;我們讓 EF Core 6 支持了 DateOnly 類型。那么&#xff0c;Dapper 是否支持 DateOnly 類型呢&#xff1f;public class User {public int Id { get; set; }public string Name { get; set; }public DateOnly Birthday { get; set; } }using (var…

HP proliant服務器從usb啟動

1&#xff0c;開機出現自檢畫面開始按F9進入設置&#xff0c;進入BIOS 選擇standard boot order&#xff08;rpl&#xff09;&#xff0c;把usb driver放在第一位&#xff0c;保存好 2&#xff0c;按F1開始啟動。 &#xff08;注&#xff1a;我使用ubuntu14.04&#xff0c;到啟…

VB常用內部函數大全一覽表(建議收藏)

VB提供了大量的內部函數供用戶在編程時調用。內部函數按其功能分為數學運算函數、字符串函數、轉換函數、日期與時間函數、判斷函數和格式輸出函數等。 文章目錄 算術函數字符串函數日期和時間函數數據類型轉換函數算術函數 字符串函數 日期和時間函數

數據庫分類介紹

在當今的互聯網中&#xff0c;最常見的數據庫模型主要是兩種&#xff0c;即“關系型數據庫”和“非關系型數據庫”。 一、關系型數據庫 1、關系型數據庫的由來 雖然網狀數據庫和層次數據庫已經很好的解決了數據的集中和共享問題&#xff0c;但是在數據庫獨立性和抽象級別上扔有…

BZOJ 1717 [Usaco2006 Dec]Milk Patterns 產奶的模式(后綴數組)

【題目鏈接】http://www.lydsy.com/JudgeOnline/problem.php?id1717 【題目大意】 求一個最長的串&#xff0c;使得其在母串中出現的次數達到要求 【題解】 二分答案&#xff0c;利用后綴數組求出的height數組進行檢驗 【代碼】 #include <cstdio> #include <cstring…

記一次 .NET 某物管后臺服務 卡死分析

一&#xff1a;背景 1. 講故事這幾個月經常被朋友問&#xff0c;為什么不更新這個系列了&#xff0c;哈哈&#xff0c;確實停了好久&#xff0c;主要還是打基礎去了&#xff0c;分析 dump 的能力不在于會靈活使用 windbg&#xff0c;而是對底層知識有一個深厚的理解&#xff0c…

【C#程序設計】教學講義——第三章:C#語言基礎

完整C#教學課件系列: 【C#程序設計】教學講義——第一章:C#語言概述 【C#程序設計】教學講義——第二章:簡單C#程序設計 【C#程序設計】教學講義——第三章:C#語言基礎 文章目錄 3.1 C#程序結構3.2 變量和常量3.3 常用數據類型3.4 運算符和表達式3.1 C#程序結構 3.1.1 組成…

直接在script里面換樣式IE6,7,8不兼容

1 <!DOCTYPE HTML>2 <html>3 <head>4 <meta http-equiv"Content-Type" content"text/html; charsetutf-8">5 <title>無標題文檔</title>6 </head>7 8 <body>9 10 <input id"inp1" type&quo…

C語言試題111之 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一個數字。例如 2+22+222+2222+22222(此時 共有 5 個數相加),幾個數相加有鍵盤控制。

?作者簡介:大家好我是碼莎拉蒂,CSDN博客專家?????? ??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 1、題目 題目: s=a+aa+aaa+aaaa+aa…a 的值,其中 a 是一個數字。例如 2+22+222+2222+22222(此時 共…

Redis常用配置參數詳解及查看修改命令

目錄 Redis常用配置參數 Redis配置參數查看命令 語法 舉例 說明&#xff1a; Redis配置參數修改命令 語法 舉例 說明&#xff1a; Redis常用配置參數 序號配置項說明1daemonize noRedis 默認不是以守護進程的方式運行&#xff0c;可以通過該配置項修改&#xff0c;使…