一般情況下,我們使用AO/AE來開發C/S架構的GIS程序,使用WebAPI開發B/S架構的GIS程序,但是隨着服務、REST、JSON等概念的不斷普及和被廣大開發者所接受,越來越多的開發者更依賴於服務的形式來獲得相關的數據源,那么原有的C/S開發者又不願意舍棄已經培養好的陣地,這就出現了很多AE調用AGS服務的物理需求。不可否認,這個在技術上也可以走得通,而且很多開發者也屢試不爽,但是基於COM的AO本不是為了服務設計的,所以在調用效率各個方面都有所欠缺。
Esri在ArcGIS Runtime推出后衍生了很多產品,搞得很多人傻傻分不清楚,那么本次介紹的是Esri會代替原來推出的一個綜合產品,鑒於Esri與微軟友好的合作關系,Esri在原來的C++內核程序進行了wrapper,推出了ArcGIS Runtime SDK for .net產品,這個包含桌面開發、WP開發、Windows Store開發的集成包,替代原來的WPF等相關產品,成為了C/S開發服務的輕量級產品。(這里主要介紹桌面開發)。目前還是Beta版本。
相關幫助:https://developers.arcgis.com/net/
系統需求
Windows Desktop
- Platform: .NET 4.5/4.5.1
- OS: Windows 7, Windows 8, Windows 8.1
- IDE: Visual Studio 2012, Visual Studio Express 2012 for Windows Desktop, Visual Studio 2013, Visual Studio Express 2013 for Windows Desktop
Windows Store
- Platform: Windows Store 8.1
- OS: Windows 8.1
- IDE: Visual Studio 2013, Visual Studio Express 2013 for Windows
Windows Phone
- Platform: Windows Phone 8.1
- OS: Windows 8.1
- IDE: Visual Studio 2013 with Update 2, Visual Studio Express 2013 for Windows with Update 2
- SDK: Windows Phone SDK 8.1 (included with Update 2 for all Visual Studio 2013 editions)
授權部署
因為目前還只是Beta版本,所以還不需要進行授權文件,但是在實際部署時,相關授權機制有點類似於ArcGIS Engine的授權。用戶可以參考如下鏈接:
https://developers.arcgis.com/net/desktop/guide/license-your-app.htm
| 許可級別 | 功能 |
| Developer (用於開發和測試) | 全功能(水印和調試信息,Local Server有警告窗口 *) |
| Basic(基礎版) | 在線功能—全功能離線功能—僅能瀏覽地圖 |
| Standard(標准版) | 全功能,包括:
•離線數據(geodatabase)編輯
•離線數據與服務器同步
•離線路徑分析
•Local Server *
|
下載試用
這個估計需要用戶申請一個賬號才可以下載。
安裝步驟
關於Windows下的安裝非常簡單,只需要下一步就可以完成。
相關示例
Esri為開發者提供了豐富的示例,相關下載地址:https://github.com/Esri/arcgis-runtime-samples-dotnet
以桌面開發為例
查看了一下,發現開發方式跟ArcGIS API for Silverlight基本類似,所以有這方面開發經驗的開發者可以0成本獲得另外一種開發技能。
從提供的例子可以看到,目前ArcGIS 10.2.3 版本支持的功能包括:各種不同服務類型的支持(GP服務、動態服務、切片服務等)、SOE的擴展、相關Task(網絡分析、查詢、統計、Geocoding等)、符號化、對各種幾何類型的編輯及操作、在線和離線的同步、打印、安全設置(Token)、Portal支持等功能。
產品定位
ArcGIS Runtime 分32Bit和64Bit,有易於部署和輕松授權的特點,而且只有70M左右的大小,定位於輕量級的桌面C/S程序開發,如果說與SilverLight有什么區別的話,可能SL是在Web瀏覽器,它借助於一個Mapview控件的桌面程序,開發方式都是借助於服務,了解回調函數、匿名函數等概念后,可能runtime會使用一些最新.net frameworks的新特性,我還沒有找到runtime與sl webapi的區別。而且說是桌面開發,它的功能又比ArcGIS Engine差太遠,以我個人的認識和感覺來說,我仍然不看好ArcGIS Runtime關於桌面開發這塊(因為WP和Windows Store開發沒有涉及,不包括其中),如果真正的C/S開發者有所期待,可以期待ArcGIS 10.3可能會推出的ArcGIS Pro SDK,相信這個會是C/S開發者的新寵。不過不管怎樣,定位不同嘛,或許有用戶就需要這種輕量級的需求。
突出特點
1:全新的Map控件 MapView
在之前的版本包含兩個控件,一個MapView,主要顯示Map的容器,另一個是Map,主要是圖層的集合,在新版本這兩個控件集成到一個了,讓開發者使用更加的方便。
2:FeatureLayer的變化
featurelayer的數據來自於featuretables
var gdb = await Geodatabase.OpenAsync(GDB_PATH); Envelope extent = new Envelope(); foreach (var table in gdb.FeatureTables) {....}
通過QueryAsync直接查詢,而不需要必須借助於QueryTask
var features = await cities.FeatureTable.QueryAsync(new QueryFilter() { WhereClause = where.Text}); queryResults.GraphicsSource = features.Select(f => new Graphic(f.Geometry));
更多的是用Task的方式,而區別於以前的Event模式
QueryTask queryTask = new QueryTask( new Uri("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/5")); var stateName = (string)(QueryComboBox.SelectedItem as Graphic).Attributes["STATE_NAME"]; Query query = new Query(string.Format("STATE_NAME = '{0}'", stateName)) { OutFields = OutFields.All, ReturnGeometry = true, OutSpatialReference = mapView.SpatialReference }; var result = await queryTask.ExecuteAsync(query);
Task是從.Net frameworks4.0引進的,它的出現是為了使多線程編程變得簡單,Task和Thread還不是一回事,Task由TaskManager管理,一個Task會執行在一個Thread上,但是如果沒有足夠的Thread,TaskManager會暫時掛起這個Task,直到有足夠的Thread資源為止。Task的另外一個好處是TaskManager會把執行這些Task的Thread自動的分配在不同的Core上,就是所謂的並行編程。
await極大簡化了異步代碼量,await和async是.Net Frameworks4.5的新特性,是長時間操作任務的福音。在.NET4.5中新增了異步編程的新特性async和await,使得異步編程更為簡單。通過特性可以將這項復雜的工作交給編譯器來完成了。之前傳統的方式來實現異步編程較為復雜,這樣對於程序猿來說處理起來比較困難,調試也沒那么方便,后續的維護工作也比較痛苦。
Async和Await關鍵字是C#異步編程的核心。通過使用這兩個關鍵字,你可以使用.NET Framework 或 Windows Runtime的資源創建一個異步方法如同創建一個同步方法一樣容易。
