開發Widget開發工具:Flex Builder3 開發語言:ActionScript & mxml 1)開發環境配置: a) 首先確定Flex Builder3(Flex SDK 3.1)安裝成功,并下載下傳Flex viewer(libs目錄中包含ArcGIS API for Flex v1.0)。 b) 解壓下載下傳下來的Flex viewer壓縮包。 c) 打開Flex Builder3,将剛解壓出來的源代碼導入到flex workspace中。在導入向導中選擇源代碼的目錄,點選finish。 d) 編譯Flex Viewer。選中目前工程,在Project 菜單下選擇Build Project。 2)自定義widget開發 a) 建立一個mxml元件(右鍵單擊flex Viewer ,選擇New->MXML Component)。選擇元件目錄,輸入元件名稱,并確定該元件繼承BasWidget類。 b) 将建立好的widget添加Flex Builder Project Module list。 右鍵單擊Flex Viewer 工程,選擇屬性(properties),打開屬性配置框,然後在左邊清單擇Flex Modules。單擊Add按鈕,選擇MyFirstWidget.mxml。這一步的目的是確定MyFirstWidget能夠被編譯成單獨的swf檔案。 c) 編譯widget。 重新編譯整個Flex Viewer 工程即可。編譯完成之後在bin-debug目錄下就會有MyFirstWidget.swf。 3)使用WidgetTemplate 打開MyFirstWidget.mxml檔案,内置的WidgetTemplate提供了豐富的界面元素。下面介紹如何部署Widget。 a) 把Widget加入到config.xml檔案中。 打開config.xml檔案并在 标簽中添加代碼: b) 儲存config.xml檔案并重新編譯Flex Viewer。 c) 運作Flex Viewer。 d) 從Tool菜單中選擇My First Widget。 至此,通過代碼就完成了個基本的Widget UI 設計,已經有了最大化,最小化,關閉等功能。下一步,就是實作業務邏輯。 4) 通路地圖 (Accessing a Map) Flex Viewer是一個以地圖為中心的應用程式,所有的操作都是圍繞地圖來進行。Flex Viewer初始化之後,Widget就可以通路地圖了(來自ArcGIS Server 的地圖服務)。 map是BaseWidget類中定義的一個public 屬性,隻要是繼承BaseWidget的類都可以通路改屬性,該屬性是com.esri.ags.Map(ArcGIS API for Flex)類型,是以可以使用map對象通路任何在ArcGIS API for Flex中的對象。當widget 被加載之後,widget manager會動态的把目前活動的地圖對象關聯到widget。 5) 在地圖上顯示業務資料 a) 添加Graphics Layer 建議為每個Widget都建立一個Graphics Layer。 b) Widget打開/最小化的時候打開/關閉Graphics Layer WidgetTemplate提供了2個視窗狀态的事件:widgetOpened 和 widgetClosed,可以使用這兩個事件來同步WidgetTemplate視窗狀态的變化和Graphics Layer顯示。當widget打開的時候顯示Graphics Layer,當widget關閉的時候隐藏Graphics Layer。例子如下: 首先偵聽widgetOpened 和 widgetClosed事件。 在widgetOpened 和 widgetClosed事件的響應函數中控制Graphics Layer的顯示。 6)Widget中使用繪制功能 在 Flex Viewer 中通過調用setMapAction方法,可以友善的進行地圖上的繪制。setMapAction是在BaseWidget類中定義的public方法,是以隻要繼承于BaseWidget類的Widget都可以使用該方法。 setMapAction方法的定義如下: 參數: action: String 類型,定義為目前繪制操作的要素類型。對應ArcGIS Flex API 中繪制工具的繪制要素類型。對應清單如表3-2: 表 3-2:flexViewrer與ArcGIS API for Flex繪制消息對應表 Flex Viewer ArcGIS API for Flex extent Draw.EXTENT point Draw.MAPPOINT line Draw.LINE polyline Draw.POLYLINE polygon Draw.POLYGON multipoint Draw.MULTIPOINT freehandpolyline Draw.FREEHAND_POLYLINE freehandpolygon Draw.FREEHAND_POLYGON status: String 類型,在控制欄上顯示的狀态文本。 callback: Function類型,繪制結束後調用的回調函數。回調函數的定義可以參考下面代碼: