ArcGIS API for Silverlight 學習筆記

暖楓無敵發表於2011-12-29

ArcGIS Silverlight API:是構建在微軟Silverlight平臺之上,通過ArcGIS Server Rest API消費ArcGIS

Server 服務,同時支援直接消費Bing地圖服務的應用程式程式設計介面。

 

ArcGIS Server服務:

   1、MapService             --地圖展示、要素查詢

   2、GeometryService        - -實現基於Geometry的功能模組

   3、Geoprocessing Service  --在Web端消費GP工具

   4、GeoCodeService         --實現地理編碼和解碼

 

Bing服務:

   1、Map Services           --訪問Bing線上快取地圖資料

   2、GeoCode Service        --提供世界範圍的地理編碼服務

   3、Routin Service         --駕駛/導航路線服務

 

學習Silverlight官網:

1、http://silverlight.net/

2、http://www.codeplex.com/Silverlght

3、http://msdn.microsoft.com/zh-cn/library/cc838158(VS.95).aspx

 

 

 

API Library概述:

 

ESRI.ArcGIS.Client.dll                     核心類庫,包括Map、Layer、Graphics、Geometry、Symbol、Task

ESRI.ArcGIS.Client.Behaviors.dll           包含一套行為和動作,用來與Map及其內容互動

ESRI.ArcGIS.Client.Bing.dll                專門針對Bing(Virtual Earth)服務的類庫,支援新增Bing的MapService、GeoCode Service和Routin Services。

ESRI.ArcGIS.Client.ToolKit.dll             包含Bookmark、Magnifier、MapTip、Toolbar、Navigation、OverviewMap等控制元件。

 

 

Silverlight API開發---------Map&Layer

 

支援的圖層型別:

ArcGISDynamicMapServiceLayer

ArcGISTiledMapServiceLayer

ArcGISImageServiceLayer

GraphicsLayer

FeatureLayer --指定型別的GraphicsLayer

               url   --必須指定MapService圖層的地址

              where --定義的查詢條件

              FeatureSymbol --用於所有的Graphics

              Clusterer --要素點按簇顯示

              OutFields --指定返回的欄位

TileLayer   --Bing Layer

ElementLayer --Silverlight UI/Media

 

 

 

 

 

 

 

 

圖層拓撲關係圖:

 

                              Layer

 

DynamicLayer       ElementLayer        TiledMapServiceLayer          GraphicLayer

 

DynamicMapServiceLayer                                         FeatureLayer

  

      GPResultImageLayer                   Bing.TileLayer

 

      ArcGISImageServiceLayer               ArcGISTiledMapServiceLayer

 

      ArcGISDynamicMapServiceLayer

 

 

注意事項:

1、  地圖顯示的順序依照載入的先後順序

2、  Map初始化空間參考和比例尺級別

3、  ArcGISDynamicMapServiceLayer的背景色總是透明

4、  Multi-Layer Cache不支援

5、  地圖服務安全策略

6、  SnapToLevels屬性

7、  控制地圖動畫時間->ZoomDuration(1.5)&PanDuration(0.75)

 

API支援的Task類(ESRI.ArcGIS.Client.Tasks)

QueryTask      --針對單個圖層

IdentifyTask     --與位置相交的要素

FindTask        --指定要素的模糊查詢

Locator         --獲取地址的地理座標(GeoCode)

Address         --獲取地理座標的地址(Reverse GeoCode)

GeometryService --執行Geometry操作

GeoProcessor    --做複雜的GIS分析

 

 

GeometryService

功能                                       描述

面積和周長工具                             計算輸入的polygons的面積和周長

AreasAndLengths

測距                                       計算輸入polylines的長度

Lengths

 

緩衝區工具

Buffer                                      計算緩衝距離,計算輸入點的緩衝區

 

計算標註點                                 計算輸入polygons的標註點

LabelPoints

 

簡化                                       對輸入的geometries進行拓撲校正

Simplify

 

投影                                       對輸入的geometries進行投影轉換

Project

 

空間關係                                   計算geometries之間的空間關係

Relation

 

 

使用Task三步走原則:

1、  例項化Task物件,註冊Task完成、失敗的監聽事件。

QueryTaskqueryTask;

queryTask= new QueryTask(“http://localhost/ArcGIS/rest/services/USA/MapServer/5”);

queryTask.ExecuteCompleted+=QueryTask_ExecuteCompleted;

queryTask.Failed+=QueryTask_Failed;

 

2、  例項化Task引數物件,為必要的屬性賦值,傳送請求。

Queryquery = new Query();

query.ReturnGeometry= true;

query.OutFields.AddRange(newstring[] {“STATE_NAME”});

query.Where= QueryTextBox.Text;

queryTask.ExecuteAsync(query);

 

3、  在Completed事件中處理返回結果/處理失敗的結果。

privatevoid QueryTask_ExecuteCompleted(object sender,QueryEventArgs args)

{

GraphicsLayer graphicsLayer = myMap.Layers[“MyGLayer”]as GraphicsLayer;

graphicsLayer.ClearGraphics();

   }

 

   private voidQueryTask_Failed(object sender,TaskFailedEventArgs args)

   {

      MessageBox.Show(“Query Failed:”+args.Error);

}

 

GPService

   執行GP服務的2套成員

同步GP服務 -----短處理事件ExecuteAsync

     只要執行一完成,就返回每個操作的結果給客戶端,在伺服器端不儲存結果。

 

非同步GP服務 ---長處理時間 SubmitJobAsync

     儲存結果在伺服器上,返回一個job ID給客戶端,客戶端然後使用這個ID返回結果。

 

Behavior->被設計為操作基於map的預定義事件,並且生成結果

 --ConstrainExtentBehavior

--MaintainExtentBehavior

--ShowCoordinatesBehavior

Action->被設計為操作map及其內容,並生成結果

  --PanToAction

  --ZoomToAction

 --ZoomToFullExtentAction

  --MeasureAction

需要新增System.Windows.Interactivity.dll引用。

 

 

Silverlight API開發---ToolKit工具欄

Bookmarks       書籤

FeatureDataGrid   要素表格

Magnifier         放大鏡

MagnifyingGlass   放大鏡 

MapProgressBar   地圖進度條

MapTips         地圖提示

Navigation        導航工具

OverviewMap     鷹眼

 

 

 

客戶化控制元件外觀

目的:

改變現實樣式、改變狀態、改變與使用者互動方式,但不改變功能。

實現思路:

1、             分析控制元件結構和控制元件狀態

2、             在資源字典中根據控制元件協議自定義新的控制元件模板

3、             在xaml中為控制元件的Template屬性賦值

 

Silverlight API實現專題圖繪製:

目的:

在地圖上展現專題業務資訊,為使用者實現控制元件維分析

實現思路:

1、 專題要素需要在GraphicLayer中顯示,構建GraphicLayer

2、 自定義專題要素符號,並繫結專題要素屬性

3、 queryTask返回查詢要素

4、 在GraphicLayer中新增Graphic,完成專題圖繪製

 

Silverlight API可擴充套件性–--自定義圖層

 目的:

     在地圖控制元件中載入Silverlight API未原生支援的圖層。

實現思路:

1、          瞭解自定義圖層的訪問原理(訪問協議)

2、          根據服務特點選擇繼承物件

3、          初始化資源(過載Initiallize方法)

4、          構造請求服務的URL

 

 

經典案例:

    SilverlightShowCase官網上有案例原始碼,一定要學習一下。

 

 

 


相關文章