ArcGIS Runtime SDK for iOS開發系列教程(6)——Tasks使用的一般流程

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

      使用過ArcGIS的Web APIs或者其他平臺SDKs的人員,一定對各種各樣的Tasks印象深刻,他們都功能強大且使用方便。如大家熟悉的QueryTask、FindTask、IdentifyTask、RouteTask、ClosesFacilityTask、ServiceAreaTask等,那麼,在ArcGIS for iOS中也同樣具有這些好用的Tasks,其用法也比較類似。這一講我將通過QueryTask的實現來向大家展示Tasks在iOS中使用的一般流程。

  首先,與其他平臺不同是在ArcGIS for iOS中基本每個Task都有一個與子對應的TaskDelegate,他們是用來使用這些Tasks的類必須要遵守的協議。上一講我向大家介紹了通過使用協議的方式實現委託模式的簡單流程(要素繪製), 那麼,在ArcGIS for iOS中所有的這些Delegates都是預先爲大家封裝好的協議,而在iOS開發中大量的使用委託這種設計模式,因此,這些Delegates爲我們實現各種Tasks下的委託處理帶來了極大的便捷。

  接下來,我先向大家介紹QueryTask的實現過程,然後,我們再來總結在iOS中Tasks的使用的一般流程。

  同樣,我們先構建一個支持ArcGIS服務能力的工程,這裏我添加了系統的Search Bar來輸入查詢條件,以之前介紹的方法右鍵連線到.h文件,調節其位置,包含相關協議,並聲明QueryTask的相關對象QueryTask、Query,聲明要素顯示土層GraphicsLayer等,具體如下圖。

  和之前的MapViewTouchDelegate協議使用方法相同,只需要在類的聲明中用<>包含協議即可。SearchBar的使用也是類似,包含協議後就可以實現該協議的相關方法,在iOS設備上的虛擬鍵盤相信大家都不陌生,當我們輸入完成點擊Search按鈕是應用系統會執行查詢操作,其實它都說通過SearchBarDelegate這個協議實現了相關委託。

  在類的聲明種包含相關協議後,就可以在該類的實現文件中添加所包含協議的實現方法來完成相關操作。首先來看Searchbar點擊Search按鈕的實現函數。

  可以看出,我們需要做的操作其實很簡單,就是對QueryTask和Query進行初始化,設置相應參數,這些與其他APIs用法類似,相信大家都已經不再陌生。唯一不同的就是大家要不斷總結和掌握Objective-C的語法和靈活應用。

  在此說明下,這裏的_queryTask和_query就是我們在.h文件中聲明的相應對象的實例變量(以後出現_XXXX也是類似)。

  接下來我們需要做就是對QueryTask的執行情況來進行相應的處理,同樣因爲有QueryTaskDelegate協議的包含,我們可以來實現該協議的方法,主要包括有查詢結果的操作和查詢出錯的提示。

  首先,我們對返回的紀錄條數判斷,大於0說明命中,然後,定義面要素的渲染樣式,在for循環裏面處理要素,如果只有唯一的命中結果,我們通過mapView的zoomToEnvelope來進行縮放,這些操作都與其他的APIs相似,大家可以查看ArcGIS for iOS自帶的幫助文檔,裏面都有詳細說明。當記錄等於0說明沒有命中,做提示

  其次,我們還需要對查詢出錯做相應的提示

  另外,QueryTaskDelegate協議還包含如下方法,大家可以參考幫助,按照需要來實現相應的操作。

  最後我們來看看運行效果:

  溫馨提示:也許,你也這樣做了,而且程序運行良好,可就是沒有得到想看到的結果,那麼你需要考慮如下兩點:第一,查詢的要素圖層投影與當前底圖投影是否一致;第二,查詢結果要素是否使用了正確的渲染符號。

  最後,我們來總結下Tasks使用的一般流程。相信通過上面QueryTask的實現,我們不難發現其使用方法與其他APIs並沒有太多區別,就是使用了協議的委託模式來實現

    1.聲明使用相關TaskDelegate協議的類時,用<>包含相關協議,並聲明相關Task和所需對象;

    2.實現協議的相關方法;

    3.初始化Task以及所需參數;

    4.設置Task的委託對象(可以是自己哦);

    5.執行Task;

  總結:本講希望通過對QueryTask的實現來向大家介紹ArcGIS for iOS中各種Tasks使用的一般流程,建議大家多參考聯機幫助的文檔來實現相關功能。下一講我將向大家介紹GeometryService和GeometryEngine的使用,歡迎大家繼續關注!

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