天天看點

淺談ArcGIS開發模式

Esri公司推出的ArcGIS産品是一個非常強大的體系,裡面包含ArcGIS Desktop、ArcGIS Server、ArcGIS Engine、ArcSDE、ArcGIS Online等,那麼這些産品不僅僅包含基礎平台軟體,也包含供使用者二次開發的元件,那麼這些元件也包含C/S、B/S、移動端的,下面就簡單的給大家說一下,也讓初學者有一個簡單的了解。

C/S架構

主要是應用于區域網路方面,一般是安裝開發軟體,一般情況下機器都不連網際網路,主要處理資料編輯、資料入庫、地圖整飾等對機器性能要求比較高,那麼這種開發模式包含

  • ArcGIS Engine\ArcObject(後簡稱AO)
  • Spatial SQL
  • ArcSDE API
  • FileGeodatabase API
  • ArcGIS Runtime(10.1版本)(先歸到這裡吧)

B/S架構

主要應用于區域網路或者網際網路,一般情況下使用浏覽器,主要是進行資料查詢、分析等

  • ADF(基本不用了)
  • WebAPI

ArcGIS API for JavaScript 

ArcGIS API for Flex

ArcGIS API for Silverlight

  • SOE(擴充)
  • Service API

ArcGIS Server Administrator API

ArcGIS Server REST API

ArcGIS Server SOAP API

ArcGIS Spatial Data Server REST API

ArcGIS Portal API  WebAPI主要關注用戶端的展現,比如加載地圖、符号、查詢、分析、報表 ServiceAPI主要關注服務的管理

針對現在火爆的移動開發

  • Mobile API for Windows Phone
  • Mobile API for Android
  • Mobile API for IOS

各種API相關的下載下傳位址:http://support.esrichina.com.cn/support/download/software/

因為本人對B/S和移動端沒有多少開發經驗,就根據自己的了解簡單介紹一下C/S的開發模式,其他的大家感興趣的參考幫助吧。

淺談ArcGIS開發模式

從上面的圖我們可以看出,針對ArcGIS提供的三種GDB類型,AO都可以進行操作,FileGDB API直覺看出隻能操作FileGDB,剩下的SQL和ArcSDE API隻能操作ArcSDE GDB,因為ArcGIS Runtime我沒怎麼用過,ArcGIS10.1才有,先不做讨論。

看看都能做什麼?

AO:可以這麼說,凡是ArcGIS Desktop能夠做的,AO都可以搞定,ArcGIS Engine開發(有些功能因為許可問題不能實作),這種開發模式就是開發系統或者在桌面的基礎上增加相關功能。

空間SQL:對ArcGIS簡單對象(點、線、面、多點、多片)進行查詢、編輯(增删改),編輯支援ArcGIS版本和非版本,不支援複雜對象(拓撲、幾何網絡等),支援影像

ArcSDE API:其實跟SQL類似,但是多了關于ArcSDE管理、投影轉換、Schema、XML對象操作等

FileGeodatabase API:FGDB建立删除、資料編輯、屬性查詢、簡單空間查詢等

開發語言

AO:.Net(C#、VB)、Java、QT、C++(有些根據版本不同不再支援)

SQL:會寫SQL語句即可

ArcSDE API:Java、C++

FileGeodatabase API:C++

系統部署

AO:在ArcGIS Desktop機器上使用VBA、AddIn、Python或者其他

ArcGIS Engine:開發的話安裝ArcGIS Engine Developkit,部署的話安裝ArcGIS Engine Runtime

SQL:不同的資料庫配置不太相同,以oracle為例,需要引用相關的dll或者so檔案

ArcSDE10.1配置Oracle 監聽器來使用SQL操作ST_Geometry

怎麼配置 Oracle 偵聽器來使用SQL操作ST_Geometry

FileGeodatabase API:把相關的dll加載上去即可

ArcSDE API:因為C++我沒有用過,java的也沒有怎麼部署過,應該和普通java開發引用包部署類似

開發效率

以下是我的一個同僚做的相關測試在如下環境進行測試比較AO和SQL的效率

測試環境:
資料庫伺服器:				
CPU: Interl(R) Xeon™  2.8G
     4core 
     memory: 4G
     CentOS 5.2 32bit
     Oracle: 11.2.0.1
測試資料:一個包含60個點串坐标的面狀要素
測試方法:分别使用PL/SQL和ArcObject在loadonly模式下錄入同樣的資料1千萬次
           

在測試過程中,使用AO每秒可以插入500條記錄,但是使用SQL每秒隻能插入50條記錄。

解釋一下,為什麼SQL查詢和編輯比AO慢

編輯情況:WKT(string)============>AO對象================>BLOB

如果了解SQL操作的話都知道,我們傳入的都是WKT串,比如POLYGON ((10.0 10.0, 50.0 10.0, 50.0 50.0, 10.0 50.0, 10.0 10.0)),那麼我們需要将這個WKT串轉換為AO對象,這一步是比較耗費CPU資源的,那麼AO的話我們之間使用接口就可以将傳入的坐标轉換為AO對象,差别就出來了,剩下的就是将AO對象存儲在資料庫的BLOB對象。

查詢情況:BLOB=================>AO對象============>WKT(string)===========>展現

那麼在查詢的時候,還需要将在資料庫存儲的BLOB轉換為AO對象,AO可以直接将這些對象展示在Mapcontrol上,但是SQL還需要将AO對象轉換為WKT串,最主要的是這些WKT串并不是最終的展示結果,我們還需将WKT串的坐标解析出來,顯示出來,點對象或者線對象還好說,如果是面對象,洞、島等就更耗時了。

那麼性能最快的是什麼呢,當然是ArcSDE API,光從名字上就可以看出來,ArcSDE API底層是C的程式,AO也是将ArcSDE API封裝為COM元件,是以理論上也有性能的損失,是以性能方面的比較就是

ArcSDE API>AO>SQL

以下僅供參考

淺談ArcGIS開發模式

為什麼SQL效率最低,還會有人用呢?

從上面的開發環境我們可以看出,SQL的開發對環境要求不高,可以說隻要能夠執行SQL語句就可以進行操作,前提還需要進行配置SQL引用

因為不是所有公司都是專業的GIS公司,其他IT公司也可以承擔GIS項目,那麼沒有GIS專業或者ArcGIS經驗的開發者來說,使用SQL操作就比較方面了,不需要再花時間去學習AO或者ArcSDE API的開發,這是好多公司選擇SQL的一個原因。

另外好多公司的業務比如電力或者電信都是點、線居多,那麼資料量少的話,效率方面差别是沒有感覺的。

還有一點,SQL開發可以內建多種查詢、構造函數與一體執行,這是其他兩種開發方式不可比拟的

SQL>select objectid from hamlet where st_within(shape,st_buffer(st_point(118.9297,32.7093,2),0.01))=1;

OBJECID
----------
1
2
3
4
5           

從上面可以看到我使用WKT串構造一個點,使用ST_Buffer做一個緩沖區,然後再做一個查詢,一個SQL語句都可以搞定,想想這個操作,那些開發方式需要幾行代碼?

另外,在SQL開發中還需要注重效率問題。

關于SQL開發的效率參考

另外,SQL開發并不是簡單的SQL語句執行就行了,都是在一定的應用環境下,不能把空間SQL與簡單的非空間資料表的操作進行比較,可以這麼說,如果是對空間資料讀,你随便折騰都沒有問題,但是對空間資料寫的話,就不是普通資料增删改那麼簡單了。

因為空間資料與非空間資料差別很大,簡單說明,空間資料要記錄位置,有投影,有空間索引,等,使用AO開發或者ArcSDE API這些東西系統都會自動做了,根本不需要使用者來管理,舉個例子,往一個要素類裡面添加資料,北京要素類,我添加了個天津薊縣的資料,如果是AO操作,添加完畢之後,系統會自動更新該要素類的extent,因為天津的資料以及超出了北京要素類的範圍,但是使用SQL操作增加肯定能加進去,但是自動更新要素類extent的步驟你明沒有操作。你也可以了解為AO執行了兩步SQL語句第一步insert資料,第二步就是更新extent,但是如果你不了解GIS的知識,隻走第一步,肯定會有問題的。

是以SQL使用需謹慎。

ArcObject和ArcGIS Engine

好多ArcGIS開發者對這兩個概念比較模糊,其實這些東西沒有必要糾結,ArcObject是相關的COM元件

ArcObjects components are installed with ArcGIS for Desktop, ArcGIS Engine, and ArcGIS for Server and can be used in the following ways:
To customize ArcGIS for Desktop applications
To build stand-alone mapping applications
To develop Web applications            

從上面的幫助可以看出,ArcObject包含三個方向

ArcGIS Desktop的自定義應用,擴充

ArcGIS Engine建立自己的應用

ArcGIS Server建立自己的Web應用(如果大家都覺得Web是經常使用WebAPI,其實原來的ADF或者現在的SOE都是AO的概念)

總體來說,沒有必要糾結這個概念問題,ArcObject是基礎,但是ArcObject可以實作的功能,ArcGIS Engine不一定可以實作。(至少我是這樣了解的)

參考一下幫助文檔其實也很清楚

淺談ArcGIS開發模式

上面的是支援ArcGIS Desktop開發

淺談ArcGIS開發模式

上面的ArcGIS Engine就可以用

PS參考:

File Geodatabase API開發及空間SQL應用

SQL通路Geodatabase

ArcSDE SDK介紹

File Geodatabase API介紹

感謝@風的專欄作者幫助

-------------------------------------------------------------------------------------------------------

版權所有,文章允許轉載,但必須以連結方式注明源位址,否則追究法律責任!

------------------------------------------------------------------------------------------------------

繼續閱讀