天天看點

ArcGIS API for Silverlight 學習筆記

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官網上有案例源碼,一定要學習一下。