ArcGIS Runtime SDK for iOS開發系列教程(4)——如何讓你的iOS應用具有GIS能力

首發地址:http://www.cnblogs.com/esrichina/archive/2012/11/05/2750569.html

     在我們開發iOS的應用程序時,常常需要嵌入地理信息相關的模塊來方便用戶定位和查找附近的美食、影院等設施。今天,我將給大家介紹如何讓你的iOS應用具有ArcGIS提供的GIS能力。

     最新官方參考:https://developers.arcgis.com/ios/info/install.htm

https://developers.arcgis.com/ios/guide/adding-a-map.htm

  1.使用ArcGIS for iOS提供的MapViewDemo來構建應用

  這種方式是最簡單的,也是比較常用的方式。這個Demo爲我們配置好了相關的引用路徑等信息,提供了最簡單的地圖瀏覽功能,當然用戶可以根據需求來修改相關的代碼。這種方式適合於項目開發初期。(Demo路徑:${HOME}/Library/SDKs/ArcGIS/Samples/MapViewDemo

  2.配置工程相關信息,使應用具有GIS能力;

  這種方式可以針對已有的iOS工程添加相關的GIS功能,當然也適合從零開始構建的iOS應用。下面我們來看如何操作:

  2.1新建工程,選擇相應的模版(每個模版有自己的適用範圍,具體可以參考網絡)

  設置項目名稱等信息、其中Devices後的下拉框可以選擇應用適用的設備,可以選擇iPad、iPhone、Universal(都適用)。接下來的三個複選框分別是是否適用iOS5提供的界面構建新特性(選擇就意味着該應用只能在iOS5及以上設備運行);第二個是內存管理相關的,建議大家手動管理;最後的是是否創建測試單元。

  2.2配置工程

  首先,添加引用路徑。點擊項目名稱後在右側選擇Build Settings選項卡,搜索framework就可以找到Framwork Search Paths,在右側空白處點擊添加ArcGIS for iOS的引用路徑:$(HOME)/Library/SDKs/ArcGIS/**;

  2.3同樣的方法,添加Other Linker Flags,在build Setting選項卡下搜索other link,點擊加號添加:-all_load -ObjC -framework ArcGIS

  2.4添加依賴庫,點擊左側的Targets下的MyMapView,選擇右側的Build Phases選項卡,

  點擊加號添加如下依賴庫:  

    • CoreGraphics.framework
    • CoreLocation.framework
    • Foundation.framework
    • QuartzCore.framework
    • UIKit.framework
    • CoreText.framework (dependency introduced at v1.8)
    • libstdc++.dylib (dependency introduced at v1.8)
    • MediaPlayer.framework (dependency introduced at v2.0)
    • MobileCoreServices.framework (dependency introduced at v2.0)
    • libz.dylib (dependency introduced at v2.1)
    • Security.framework (dependency introduced at v2.1)

  2.5設計界面,點擊工程下的.storyboard(可以對iPad和iPhone界面設計不同的佈局)打開界面構建器(Interface Builder),如下圖

  通過右下角的組件庫找到view組件拖放到左上角的view下,並在inspector下修改其繼承類爲AGSMapView,你會發現view已經變成了Map View。然後選中Map View右鍵畫線到@interface與@end之間,就會彈出如圖對話框,輸入Name:mapView就會生成相應代碼。但在生成的代碼前會有提示,是因爲沒有添加對ArcGIS.h的引用,添加即可。當然,這些操作我們也可以通過代碼來完成。

  #import <ArcGIS/ArcGIS.h>

  2.6界面與代碼綁定(如果上一步你使用的點擊Map View右鍵連線的方式,可以跳過,因爲系統會自動綁定),Objective-C中將與用戶交互相關的實例變量定義爲輸出口(插座),在Xcode中可以通過在點擊Esri View Controller,然後在右側屬性窗口的Connections選項卡中,可以看到Outlets裏有一個mapView對象,點擊右側的空心圓圈連線到左側View下的Map View或界面中的Map View對象上,空心圓圈變成實心,說明綁定成功。 

  2.7資源引用,如果你需要使用到ArcGIS Runtime for iOS自帶的一些資源文件,就需要添加

“ArcGIS.bundle”,路徑爲:

        ${HOME}/Library/SDKs/ArcGIS/ArcGIS.framework/Versions/Current/Resources/ArcGIS.bundle

      使用方法:

    AGSPictureMarkerSymbol *pt=[AGSPictureMarkerSymbol pictureMarkerSymbolWithImageNamed:@"ArcGIS.bundle/GpsDisplay.png"];

    2.8添加代碼,Map View的操作都是在esriViewController.m文件中實現的,如地圖加載代碼

  command+S保存,command+R運行; 

3,舊版本的工程遷移

      如果你的工程中使用了ArcGIS Runtime for iOS的早期版本,希望能夠升級到最新版的SDK獲得更多的功能和更高效的操作。那麼,你需要做以下嘗試 :

  3.1在ArcGIS for iOS的2.2版本中用“ArcGIS.Framework”取代了之前的靜態庫“libArcGIS.a”,所以首先要刪除libArcGIS.a的引用;

  3.2刪除“Build”設置中的“Library Search Paths”參數,路徑:${HOME}/Library/SDKs/ArcGIS/iOS.sdk/usr/local/lib;

  3.3刪除Build設置中的the User Header Search Paths參數,路徑:${HOME}/Library/SDKs/ArcGIS/iOS.sdk/usr/local/include/**;

  3.4在Build中設置Frameworks Search Paths參數,增加${HOME}/Library/SDKs/ArcGIS/**;

  3.5在Build中設置Other Linker Flags參數,增加“-framework”和“ArcGIS”(“-all_load”和 “-ObjC”依然保留);

  3.6修改相關引用import <ArcGIS/ArcGIS.h>代替之前的import "ArcGIS.h";

  3.7如果使用了ArcGIS.bundle包中的資源,還需刪除並重新添加該資源文件ArcGIS.bundle,即

        ${HOME}/Library/SDKs/ArcGIS/ArcGIS.framework/Versions/Current/Resources/ArcGIS.bundle

  3.8接口變更:隨着SDK版本的變遷有些接口會做一些調整,對於這些變化我們應該參考ArcGIS for iOS Reference來做相應的調整;

    如self.tiledLayer.mapServiceInfo.tileInfo.lods應該改爲self.tiledLayer.tileInfo.lods        

        mapView.envelope會出現envelope has been deprecated錯誤,應該改爲mapView.visibleArea.envelope 

  注:以上修改只是針對於ArcGIS for iOS相關功能;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章