1、前言
今天再一次在官網看到了ArcGIS Runtime SDK for Android下一個版本“Quartz”版的更新資料,它將是一個非常重要的更新,包括API接口的重構和開發思路的調整。具體如下圖所示:
在ArcGIS Runtime SDK概述一文中已經給大家介紹了ArcGIS Runtime SDK for Android的前世今生,從2011年6月發布ArcGIS Runtime SDK for Android beta版開始,到2015年10月1日發布ArcGIS Runtime SDK for Android 10.2.7 。期間大大小小經歷了十幾個大小版本的迭代。期間功能不斷完善,從一開始API提供的在線地圖瀏覽功能的到后期逐漸加入的離線矢量,離線分析、離在線一體化數據生產流程。功能也越來越豐富。但是不論怎么變化API結構始終沒有發生過大的調整。仔細研究現有API的結構時我們也不難發現一些現象,同樣功能的類函數會出現在多個包里面,有時候給人有點暈的感覺,例如:com.esri.core.tasks.ags.query 和 com.esri.core.tasks.query 同樣是query,但是因為支持的查詢同步異步方式的不同,就直接成為了兩個類。再比如對於圖層類ArcGISFeatureLayer繼承於GraphicsLayer支持要素的在線編輯修改,GraphicsLayer繼承於基類Layer。FeatureLayer繼承於基類Layer支持離線數據源的加載,這些開發的時候都是需要深入了解並理清楚思路的,並且需要特別注意。
從API從開發者的角度來說有沒有更簡單更高效的一種方式呢,接口更加簡單清晰? 我想這也是“Quartz”版目標之一。
“Quartz”版重構API結構使接口更清晰。大的調整即將到來。
轉載請注明出處:http://www.cnblogs.com/gis-luq/p/4923469.html
2、現有版本分析
官網地址:https://developers.arcgis.com/android/
ArcGIS Android 10.2.7 API 結構圖
類結構是大家多年來所熟悉的樣子,但是確實不夠清晰明了(對比於新版來說)。
舉個簡單例子,在10.2.7及之前的版本里。整個地圖的容器為MapView,在MapView類可以執行地圖的一些基本操作,例如圖層管理。放大、縮小、平移、相關事件監聽。例如我們要顯示一張地圖;具體過程如下:
1)、設置應用程序Activity的UI信息
打開res>>layout>>activity_main.xml文件,添加Mapview的UI信息
<com.esri.android.map.MapView
android:id="@+id/map"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</com.esri.android.map.MapView>
2) 新建MapView並設置UI和代碼的綁定
private MapView mapView = null;
private ArcGISTiledMapServiceLayer arcGISTiledMapServiceLayer = null; this.mapView = (MapView)this.findViewById(R.id.map);//設置UI和代碼綁定
3) 新建地圖圖層並添加到MapView中
String strMapUrl="http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer"; this.arcGISTiledMapServiceLayer = new ArcGISTiledMapServiceLayer(strMapUrl); this.mapView.addLayer(arcGISTiledMapServiceLayer);
4) 至此一張簡單的地圖就添加完成了
更多配置過程可以參考文章 《基於Android Studio構建ArcGIS Android開發環境》 。
3、未來版本分析
官網地址:https://developers.arcgis.com/android/beta/
ArcGIS Android “Quartz”版 API 結構圖
對於“Quartz”版,類名包名首先進行了調整,同時在接口使用上也有一定的改動。首先在“Quartz”版中采用MVC結構進行重構(MVC結構一般包括模型、視圖、控制器),增加了一個Map類,Map代表了模型,用於存儲地圖數據源,一般來說包含一個底圖圖層及若干業務圖層數據。MapView代表了視圖,用於直接和用戶交互,但是已經不負責對Layer的直接管理和操作了,內容的操作主要通過Map來實現管理,這個在API接口方法中也有體現。對於顯示一張底圖的過程如下:
1)、設置應用程序Activity的UI信息
打開res>>layout>>activity_main.xml文件,添加Mapview的UI信息
<com.esri.arcgisruntime.mapping.view.MapView android:id="@+id/mapViewLayout" android:layout_width="fill_parent" android:layout_height="fill_parent"> </com.esri.arcgisruntime.mapping.view.MapView>
2)、新建MapView
private MapView mMapView;
2)、設置MapView資源綁定、及相關圖層數據的設置
//設置MapView UI和代碼的綁定 mMapView = (MapView) findViewById(R.id.mapViewLayout); //利用在線的服務創建一個切片圖層
String strMapUrl="http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer"; ArcGISTiledLayer tiledLayerBaseMap = new ArcGISTiledLayer(strMapUrl); //設置切片圖層作為底圖 Basemap basemap = new Basemap(tiledLayerBaseMap); //創建一個map包含basemap地圖數據 Map map = new Map(basemap); //設置mao顯示的視圖MapView中 mMapView.setMap(map);
從上面的代碼我們可以看出,結構上已經變成了遵循MVC結構的模式,MapView已經不負責直接對Layer的管理。
4、結語
從量變到質變,新的API已經悄無聲息的的開始內測,對於開發者來說免不了又是新的一輪學習和適應。但是更簡潔的結構,統一的風格設計,支持二維以及三維的數據顯示,這一切還是值得我們期待的。
最后附上2015Esri全球用戶大會top10的QA 中關於“Quartz”的說明。
今年在用戶大會,用戶交流以及Developer Showcase Island上你將會聽到團隊提出“Quartz”,它是ArcGIS Runtime SDK下一個大版本的代號。這一版本包括了一系列顯著的功能增強,正式版本預期於2016年第一季度發行,之前會有幾個beta版本發行,第一個測試版定 於2015年8月發行。
ArcGIS Runtime Quartz版本的新功能,包括:
1) 地圖性能改進
2) 支持更多數據格式,矢量數據包括移動地理數據庫(Runtime geodatabase),shapefile文件,KML;柵格圖像主要包括JPEG, JPEG2000, NITF, GeoTIFF, MrSID,CADRG, ECRG, DTED, SRTM, HRE以及激光雷達。此外,還支持OGC的GeoPackage,以及自定義的矢量和柵格數據源
3) 本地分析在內的更多GIS分析功能
4) 支持智能制圖,矢量切片和讀寫在線地圖的功能
5) 支持3D場景,瀏覽、分析3D數據
6) 支持Xamarin,允許.NET開發人員構建跨平台運行的應用程序。
“ArcGIS發展的重要計划有哪些?長期的路線圖是怎樣的?”
引用其中一句話 “未來12個月,ArcGIS Web and Runtime SDKs將完全支持3D,允許設備應用建立在Runtime和Web上,充分利用3D工作流和信息產品的優勢。” 伴隨着“Quartz”版,ArcGIS 移動3D時代即將到來。