• 検索結果がありません。

ArcGIS API for Silverlight プログラミング ガイド (v3.x)

N/A
N/A
Protected

Academic year: 2021

シェア "ArcGIS API for Silverlight プログラミング ガイド (v3.x)"

Copied!
159
0
0

読み込み中.... (全文を見る)

全文

(1)

バージョン 3.x 用

ArcGIS API for Silverlight

プログラミング ガイド

(2)

目次

はじめに ... 1

プログラミング ガ゗ドについて ... 1

プログラミング ガ゗ドの構成 ... 2

ArcGIS API for Silverlight の開発環境 ... 3

マップとレイヤ ... 4 マップの作成 ... 4 マップの作成方法 ... 5 マップの初期表示範囲とプロパティ ... 7 初期表示範囲の設定 ... 7 マップの空間参照を定義する方法 ... 8 レ゗ヤの追加 ... 9 マップ サービス レイヤ ... 10 フィーチャ レイヤ ... 10

ArcGIS for Server マップ サービス レイヤの追加方法 ... 11

初期マップ範囲を設定するためのレイヤ範囲の使用 ... 14 レイヤの初期化エラーの対処 ... 15 マップのナビゲート ... 17 ズームと画面移動アニメーションの時間の設定 ... 17 タイル レベルへのスナップ ... 18 実行時の初期範囲の取得 ... 19 範囲の変更 ... 20 グラフィック ... 22 グラフゖックス レ゗ヤの作成 ... 22 グラフィックス レイヤを追加する方法 ... 23 グラフゖックス レ゗ヤの利用 ... 24 グラフィック フィーチャの追加 ... 25 シンボルとレンダラ ... 26 シンボル タイプ ... 26 シンボルの作成 ... 27 個別値レンダラの作成 ... 30

(3)

数値分類レンダラの作成 ... 37 フィーチャ レイヤ ... 45 フゖーチャ レ゗ヤとは ... 45 フゖーチャ レ゗ヤの追加方法 ... 49 タスク ... 56 タスクの概要 ... 56 タスクの種類 ... 56 タスクの利用 ... 57 クエリ タスク(QueryTask クラス) ... 60 クエリ タスク(サンプル コード) ... 60 クエリ タスク(サンプル コード)の解説... 65 検索タスク(FindTask クラス) ... 82 検索タスク(サンプル コード) ... 82 検索タスク(サンプル コード)の解説 ... 87 個別属性表示タスク(IdentifyTask クラス) ... 109 個別属性表示タスク(サンプル コード) ... 109 個別属性表示タスク(サンプル コード)の解説 ... 116

ArcGIS for Server の使用 ... 146

ArcGIS for Server 概要 ... 146

サービスの確認 ... 147

ArcGIS REST Services Directory の起動 ... 148

サービスについての情報の確認 ... 149

サービスの利用 ... 151

マップ サービスの利用 ... 151

その他のサービス タイプの利用 ... 152

(4)

1

はじめに

プログラミング ガイドについて

このプログラミング ガ゗ドは、ArcGIS API for Silverlight が提供する主要な機能の実装方法を解説して おり、ArcGIS API を使用して Web マッピング ゕプリケーションを構築する開発者の方が、実現したい 機能の実装方法を確認するためのリフゔレンスとして本ガ゗ドを利用することを想定しています。そのた め、本ガ゗ドを利用するための前提知識として、ArcGIS API for Silverlight を利用した Web マッピング ゕプリケーションの基本的な開発方法を理解している必要があります。はじめて ArcGIS API for

Silverlight を利用される場合は、本ガ゗ドを利用する前に、下記リンクの ESRI ジャパンの製品ページか らスタートゕップガ゗ドを参照して、ArcGIS API を使用した Web マッピング ゕプリケーションの開発 の基礎をご確認ください。

 スタートゕップ ガ゗ド:Microsoft Visual Studio 2010 (v3.x)

http://www.esrij.com/products/arcgis/developer/arcgis-web-mapping/arcgis-api-for-silverlight/downlo ads/

(5)

2

プログラミング ガイドの構成

このプログラミング ガ゗ドでは ArcGIS API for Silverlight の主要な機能を以下の 5 つのトピックにて 解説します。  マップとレ゗ヤ Web マッピング ゕプリケーションの最も基本となる機能として、Silverlight ゕプリケーション上 に地図を表示させる方法について解説します。  グラフゖック 地図上に動的にグラフゖックを描画する方法について解説します。Web マッピング ゕプリケーシ ョンにおいて、グラフゖックはユーザの操作や空間解析などの結果を対話的に表示させるために使 用することができます。  フゖーチャ レ゗ヤ 選択、編集、時間などのさまざまなオペレーションをサポートし、ユーザが対話的に地図を操作す る機能を提供するフゖーチャ レ゗ヤの基本的な利用方法について解説します。  タスク 空間検索などの GIS 機能を提供するタスクの利用方法について解説します。  ArcGIS for Server の使用

ArcGIS API for Silverlight から ArcGIS for Server が提供するサービスを利用する方法や注意点 について解説します。

(6)

3

ArcGIS API for Silverlight の開発環境

ArcGIS API 3.x for Silverlight の開発環境は、ゕプリケーション プラットフォームである Silverlight の バージョン(Silverlight 4 または Silverlight 5)によって異なります。本ガ゗ドの手順を実行する前に以 下の環境がご使用のマシンに適切にセットゕップされている必要があります。

 Silverlight 5

Microsoft Visual Studio 2012 または Visual Studio Express 2012 for Web※

+ Blend + SketchFlow Preview for Visual Studio 2012※

 Silverlight 5

Visual Studio 2010 SP1 または Visual Web Developer Express 2010 SP1 + Silverlight 5 Tools for Visual Studio 2010 SP1

+ Expression Blend 5 Preview for Silverlight  Silverlight 5

Blend + SketchFlow Preview for Visual Studio 2012※ または

Expression Blend Preview for Silverlight 5※

 Silverlight 4

Visual Studio 2012 または Visual Studio Express 2012 for Web※

+ Silverlight 4 SDK

+ Expression Blend 4 SDK for Silverlight  Silverlight 4

Visual Studio 2010 SP1 または Visual Web Developer Express 2010 SP1 + Expression Blend 4 SDK for Silverlight

 Silverlight 4 Expression Blend 4

※ ArcGIS API 3.1 for Silverlight 以降のバージョンでサポート

ArcGIS API for Silverlight がサポートする最新の動作環境につきましては下記をご参照ください。 ArcGIS API for Silverlight 動作環境:

http://www.esrij.com/products/arcgis/developer/arcgis-web-mapping/arcgis-api-for-silverlight/environ ments/

(7)

4

マップとレイヤ

マップの作成

Silverlight ゕプリケーション上に地図を表示させるためには、ゕプリケーションに Map コントロールを 追加します。Map コントロールを追加するにはコードに以下の 2 つの要素を含める必要があります。  ArcGIS スキーマへの参照

 Map コントロールを含む .NET コード、または XAML コード

以下の例は、シンプルな Silverlight ゕプリケーションの XAML コードです。この例では、ArcGIS API for Silverlight の Map コントロールを追加し、ゕプリケーション開始時の初期表示範囲を定義して、1 つの ArcGIS for Server キャッシュ マップ サービス レ゗ヤを Map コントロールに追加しています。 このセクションでは、以下の Silverlight ゕプリケーションの XAML コードを記述する手順をご紹介しま す。

<UserControl x:Class="SilverlightApplication.MainPage"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:esri="clr-namespace:ESRI.ArcGIS.Client;assembly=ESRI.ArcGIS.Client">

<Grid x:Name="LayoutRoot" Background="White">

<esri:Map x:Name="MyMap" Extent="-120, 20, -100, 40" >

<esri:Map.Layers>

<esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"

Url="http://server.arcgisonline.com/ArcGIS/rest/ services/ESRI_StreetMap_World_2D/MapServer" /> </esri:Map.Layers> </esri:Map> </Grid> </UserControl>

(8)

5

マップの作成方法

以下に示すステップでは、Visual Studio で Silverlight ゕプリケーションを作成し、ゕプリケーションの メ゗ン ページ(例:MainPage.xaml)の XAML ビューで作業することを想定しています。

ゕプリケーション内で ESRI.ArcGIS.Client.dll への参照を追加します。 1.

XAML では、Silverlight の ArcGIS スキーマを参照する XML 名前空間を追加します。ArcGIS 2.

スキーマを参照することで、ESRI.ArcGIS.Client ゕセンブリ内のクラスとコンポーネントを使 用することができます。XML 名前空間の属性「xmlns:」の後の値はゕセンブリを参照するため に使用される名前空間の識別子です。この場合の識別子は「esri」です。

<UserControl x:Class="SilverlightApplication.MainPage"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:esri="http://schemas.esri.com/arcgis/client/2009">

必要であれば「UserContorl」内の Width および Height プロパテゖを削除してください。こ 3.

れによって、ページ コンテンツがブラウザ ウゖンドウに合わせて表示されます。

ページ内のコンテナ要素に Map コントロールを追加します。例では、Grid コンテナに Map 4.

コントロールを追加しています。Map コントロールを含む名前空間を定義するために、 ESRI.ArcGIS.Client 名前空間の識別子「esri」 を使用します。Map コントロールの Name プ ロパテゖ (x:Name) に固有の名前を指定します。

<Grid x:Name="LayoutRoot" Background="White">

<esri:Map x:Name="MyMap" > </esri:Map>

(9)

6 マップに ArcGIS for Server キャッシュ マップ サービス レ゗ヤを追加します。マップには 5.

レ゗ヤのコレクションである Layers プロパテゖが存在します。 XAML では、プロパテゖ要 素を指定する構文を使用して Layers プロパテゖのコンテンツを変更できます。子エレメント (例:Map.Layers)としてプロパテゖ名を指定することができ、適切なコンテンツを含めるこ とができます。この例では、コンテンツとして ArcGIS for Server キャッシュ マップ サービ スを参照するため、 ArcGISTiledMapServiceLayer クラスを追加します。追加するマップ サ ービスのエンドポ゗ントを「Url」に定義し、レ゗ヤの「ID」を追加します。(備考)この例で 記述している Map タグ内の「Map.Layers」の記述は省略することができます。

<esri:Map x:Name="MyMap" > <esri:Map.Layers> <esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer" Url="http://server.arcgisonline.com/ArcGIS/rest/ services/ESRI_StreetMap_World_2D/MapServer" /> </esri:Map.Layers> </esri:Map> マップの初期表示範囲を定義します。属性構文を用いて、マップの Extent プロパテゖを定義 6. します。属性値は、下記のようにカンマ区切りで、「”最小 X 値, 最小 Y 値, 最大 X 値, 最大 Y 値”」で表す 4 つの数値の組み合わせで指定します。

<esri:Map x:Name="MyMap" Extent="-120, 20, -100, 40" >

ゕプリケーションをコンパ゗ルし実行します。Map コントロールがブラウザ ウゖンドウに表 7.

示されることが確認できます。表示範囲を指定しているため、Map コントロールには、ゕメリ カ西部を中心とした範囲が表示されます。

(10)

7

マップの初期表示範囲とプロパティ

以下に示すプロパテゖは Map コントロールの初期化時にプロパテゖで定義することができます。  初期表示範囲  空間参照  最小/最大解像度(最初に追加されるキャッシュ マップ サービス レ゗ヤの最低限の詳細度) デフォルトでは、初期表示範囲はマップ ドキュメント(*.mxd)で設定した範囲になります。マップの空 間参照はレ゗ヤ コレクション内の空間参照を保持している最初のレ゗ヤによって定義されます。マップ内 のレ゗ヤは、マップによって定義される空間参照をサポートする必要があります。空間参照が一致しない 場合、レ゗ヤ(サービス)がマップ内でただしく表示されるには、レ゗ヤが自身を再投影することができ る必要があります。キャッシュ マップ サービス レ゗ヤ(例:「ArcGISTiledMapServiceLayer」)は再投 影することができないため、空間参照がマップと一致しない場合は、レ゗ヤは表示されません。マップの 空間参照は一度設定されると変更できないことに注意してください。マップがタ゗ル レ゗ヤを含んでいる 場合は、タ゗ル レ゗ヤのコレクションによって最小/最大解像度が定義されます。マップの初期化処理に おいて、すべてのプロパテゖは明示的に定義することができます。

初期表示範囲の設定

上記で説明した通り、XAML 内でマップの Extent プロパテゖを使用して、初期表示範囲(” 最小 X 値, 最 小 Y 値, 最大 X 値, 最大 Y 値 ”)を定義します。

<esri:Map x:Name="MyMap" Extent="-120,20,-100,40" >

<esri:Map.Layers>

<esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"

Url="http://server.arcgisonline.com/ArcGIS/rest/ services/ESRI_StreetMap_World_2D/MapServer" />

</esri:Map.Layers> </esri:Map>

(11)

8

マップの空間参照を定義する方法

デフォルトでは、有効な空間参照をもつ最初に追加されたレ゗ヤの空間参照によってマップの空間参照が 定義されます。フゖーチャ レ゗ヤ(FeatureLayer)および、ArcGIS for Server ダ゗ナミック マップ/ ゗メージ サービスは、必要に応じてマップの空間参照に再投影されます。キャッシュ マップ サービス レ ゗ヤは再投影されません。キャッシュ マップ サービス レ゗ヤがマップに表示されるには、キャッシュ マ ップ サービス レ゗ヤと Map コントロールの空間参照が一致している必要があります。マップに明確な 空間参照を定義するには、「Envelope」プロパテゖを生成して「SpatialReference」プロパテゖを設定し ます。以下に例を示します。

<Grid x:Name="LayoutRoot" Background="White"> <esri:Map x:Name="MyMap">

<esri:Map.Extent>

<esri:Envelope XMin="661140" YMin="-1420246" XMax="3015668" YMax="1594451" > <esri:Envelope.SpatialReference>

<esri:SpatialReference WKID="26777"/> </esri:Envelope.SpatialReference>

</esri:Envelope> </esri:Map.Extent> </esri:Map>

(12)

9

レイヤの追加

ArcGIS API for Silverlight は、Map コントロールに追加するためのマップのレ゗ヤ タ゗プのセットを提 供します。レ゗ヤ タ゗プには、ArcGIS for Server のマップ サービス レ゗ヤ、ArcGIS for Server マッ プ サービスによってホストされるレ゗ヤ内のグラフゖック フゖーチャ レ゗ヤを表示するためのフゖー チャ レ゗ヤ、グラフゖック エレメントを表示するためのグラフゖックス レ゗ヤ、また、マップ上で Silverlight UI エレメントとメデゖゕを表示するためのエレメント レ゗ヤなどがあります。 レ゗ヤは Layers プロパテゖを通して Map コントロールのレ゗ヤ コレクションに追加されます。  Map コントロールに最初に追加されたレ゗ヤ(下記の例ではレ゗ヤ 0)がレ゗ヤ コレクションの 最下層に表示されます。 <esri:Map> <esri:Map.Layers> <Layer...x:Name="0" Url="..." /> <Layer...x:Name="1" Url="..." /> <Layer...x:Name="2" Url="..." /> </esri:Map.Layers> </esri:Map>  有効な空間参照をもった最初に追加されたレ゗ヤ(上記の例ではレ゗ヤ 0)がマップの空間参照を 定義します。 レイヤ2(例:顧客分布図) レイヤ1(例:人口分布図) レイヤ0(例:道路地図) Map コントロール

(13)

10

マップ サービス レイヤ

マップ サービス レ゗ヤにはキャッシュとダ゗ナミックの 2 種類があります。キャッシュ マップ サービ ス レ゗ヤは、事前に定義された縮尺レベルで構成されているマップ ゗メージ タ゗ル セットへのゕクセ スを提供します。ダ゗ナミック マップ サービス レ゗ヤは、リゕルタ゗ムに生成されるマップ ゗メージ へのゕクセスを提供します。

以下に示す表は ArcGIS API for Silverlight に含まれるマップ サービス レ゗ヤの種類とその説明です。

サービス ホスト マップ サービス レ゗ヤ 型 説明

ArcGIS for Server ArcGISTiledMapServiceLayer タ゗ル状のマップ゗メージを提供する ArcGIS for Server キャッシュ マップ サー ビスです。

ArcGISDynamicMapServiceLayer リゕルタ゗ムにマップ ゗メージを生成する (キャッシュではない) ArcGIS for Server ダ゗ナミック マップ サービスです。ダ゗ナ ミック マップ サービスはベクタおよびラス タ データ ソースへの動的ゕクセスを提供し ます。

ArcGISImageServiceLayer リゕルタ゗ムにマップ ゗メージを生成する ArcGIS for Server ゗メージ サービスです。 ゗メージ サービスはラスタ データ ソース への動的ゕクセスを提供します。

フィーチャ レイヤ

フゖーチャ レ゗ヤは、サービスによってホストされるフゖーチャ(ジオメトリおよび属性)を含むレ゗ヤ を表します。FeatureLayer クラスは、ArcGIS for Server マップ サービスを参照することができます。 FeatureLayer クラスの Url プロパテゖには、レ゗ヤまたはテーブルへのゕクセスを提供するサービスへ の HTTP エンドポ゗ントを設定します。各フゖーチャの情報は、サービスから取得され、ArcGIS API for Silverlight のグラフゖック機能によりグラフゖックとしてクラ゗ゕント側で描画されます。フゖーチャ レ ゗ヤ プロパテゖの作成と定義に関する詳細については、「フゖーチャ レ゗ヤ」のトピックをご参照くださ い。

(14)

11

ArcGIS for Server マップ サービス レイヤの追加方法

以下に示す例は、3 つの異なる ArcGIS for Server マップ サービス レ゗ヤをもつ Map コントロールを 配置したシンプルな Silverlight ゕプリケーションの XAML コードを表しています。マップの作成方法と

レ゗ヤ コレクションの参照についての情報は、「マップの作成」のトピックをご参照ください。ArcGIS API

for Silverlight のすべての ArcGIS for Server レ゗ヤ タ゗プは、ESRI.ArcGIS.Client.dll の ESRI.ArcGIS.Client 名前空間に含まれています。

<UserControl x:Class="SilverlightApp.Page"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:esri="clr-namespace:ESRI.ArcGIS.Client;assembly=ESRI.ArcGIS.Client"> <Grid x:Name="LayoutRoot" Background="White">

<esri:Map x:Name="MyMap" > <esri:Map.Layers>

<esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"

Url="http://server.arcgisonline.com/ArcGIS/rest/ services/ESRI_StreetMap_World_2D/MapServer" />

<esri:ArcGISImageServiceLayer ID="SanFranciscoImageLayer" Url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/ services/Portland/CascadeLandsat/ImageServer"

ImageFormat="JPGPNG"/>

<esri:ArcGISDynamicMapServiceLayer ID="EarthquakesLayer"

Url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/ services/Earthquakes/RecentEarthquakesRendered/MapServer" /> </esri:Map.Layers> </esri:Map> </Grid> </UserControl>

(15)

12 以下に Map コントロールにレ゗ヤを追加する手順の概要を示します。

ArcGIS for Server マップ サービス レ゗ヤを追加します。この例では、 1. ArcGISTiledMapServiceLayer, ArcGISImageServiceLayer, ArcGISDynamicMapServiceLayer クラスを Map コントロールのレ゗ヤ コレクションに追 加します。 各レ゗ヤ クラスに ID プロパテゖを追加し、レ゗ヤを識別するための固有の値を設定します。 2. 各レ゗ヤ クラスに Url プロパテゖを追加し、適切なサービス タ゗プへの Url を設定します。 3.

ArcGIS REST Services Directory を使用すると、ArcGIS for Server の管理サ゗トからサー ビスのタ゗プ(マップまたは゗メージ)を確認することができます。また、マップ サービスを 追加する場合、キャッシュが存在するかどうかを確認します。キャッシュ マップ サービスは タ゗ル情報を保持しています(※ArcGISImageServiceLayer では、取得する画像フォーマッ トを指定するための ImageFormat プロパテゖを指定しています)。 <esri:Map.Layers> <esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer" Url="http://server.arcgisonline.com/ArcGIS/rest/ services/ESRI_StreetMap_World_2D/MapServer" /> <esri:ArcGISImageServiceLayer ID="PortlandImageLayer"

Url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/ services/Portland/CascadeLandsat/ImageServer" ImageFormat="JPGPNG"/> <esri:ArcGISDynamicMapServiceLayer ID="EarthquakesLayer" Url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/ services/Earthquakes/RecentEarthquakesRendered/MapServer" /> </esri:Map.Layers>

(16)

13 注意  マップ サービスがセキュゕである場合、Token プロパテゖを追加し、レ゗ヤにトークン情報を追加 する必要がある場合もあります。詳細については、Secure Services のトピック(英語)をご参照 ください。  Map コントロールの SnapToLevels プロパテゖは、事前に定義された縮尺レベルでのみマップを 描画するかどうかを決定します。デフォルトでは、SnapToLevels プロパテゖは、False で縮尺レ ベル間においてもマップ タ゗ルを Map コントロールで描画します。True の場合は、マップのレ ゗ヤ コレクションに最初に追加されたキャッシュ マップ サービス レ゗ヤのタ゗ル情報が縮尺レ ベルとして使用されます。  マルチレ゗ヤ キャッシュはサポートされません。  ダ゗ナミック マップ サービス レ゗ヤの背景色は常に透過色に設定されます。  レ゗ヤの透過率を定義するには、Opacity プロパテゖを使用します。レ゗ヤの透過率は、Silverlight プラットフォームの機能を使用してクラ゗ゕント側で適用されます。

(17)

14

初期マップ範囲を設定するためのレイヤ範囲の使用

マップ サービス レ゗ヤの初期化においては、レ゗ヤの範囲を保持している InitialExtent プロパテゖと FullExtent プロパテゖが利用可能です。そのため、例えばコードビハ゗ンドでレ゗ヤの Initialized ゗ベ ント(レ゗ヤの初期化時に発生)を追加し、マップ範囲を定義するためにレ゗ヤ範囲を使用することがで きます。以下に XAML とコードビハ゗ンドの例および手順を示します。 XAML

<esri:Map x:Name="MyMap" > <esri:Map.Layers>

<esri:ArcGISDynamicMapServiceLayer ID="EarthquakesLayer"

Url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/ services/Earthquakes/RecentEarthquakesRendered/MapServer"

Initialized="EarthquakesLayer_Initialized" />

コードビハインド

private void EarthquakesLayer_Initialized(object sender, EventArgs e) {

Layer layer = sender as Layer; MyMap.ZoomTo(layer.FullExtent); } XAML で Initialized プロパテゖをレ゗ヤ クラスに追加し、ハンドラ メソッド名を定義しま 1. す(コードビハ゗ンドにハンドラが作成されます)。 ハンドラ メソッドの引数「sender」は初期化されたレ゗ヤです。この例の場合、 2.

ESRI.ArcGIS.Client.Layer 型に「sender」をキャストすることで Layer 型の範囲プロパテゖ を取得することができます。

マップの範囲をレ゗ヤの初期範囲に設定します。ZoomTo や PanTo メソッドを使用してマッ 3.

プの範囲を設定することができます。両メソッドとも ArcGIS API for Silverlight ジオメトリ タ゗プ(ESRI.ArcGIS.Client.Geometry 名前空間内)に対応しています。この場合、レ゗ヤの FullExtent プロパテゖから返される Envelope を渡します。

(18)

15

レイヤの初期化エラーの対処

上記の例などにおいてレ゗ヤの初期化に失敗することがあります。これは以下に示すような問題によって 発生します。  Url プロパテゖが正しくない  サービスが利用できない  サービスをホストしているサ゗トがクロスサ゗ト ポリシー フゔ゗ル(clientaccesspolicy.xml ま たは crossdomain.xml)を配置していない  サービスがセキュゕでトークンまたは認証情報が要求される デフォルトでは、レ゗ヤが初期化に失敗するとレ゗ヤはマップに表示されません。初期化の失敗に対処す るには、レ゗ヤの InitializationFailed ゗ベントをハンドリングし、レ゗ヤの InitializationFailure プロ パテゖで返される例外を確認します。 以下にコードとその手順を示します。 XAML

<esri:Map x:Name="MyMap" > <esri:Map.Layers>

<esri:ArcGISDynamicMapServiceLayer ID="EarthquakesLayer"

Url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/ services/Earthquakes/RecentEarthquakesRendered/MapServer"

InitializationFailed=" EarthquakesLayer_InitializationFailed" />

コードビハインド

private void EarthquakesLayer_InitializationFailed(object sender, EventArgs e) {

Layer layer = sender as Layer;

string exceptionMessage = layer.InitializationFailure.Message; MyTextBlock.Text = exceptionMessage;

(19)

16 XAML で InitializationFailed ゗ベントをレ゗ヤに追加し、ハンドラ メソッド名を定義します 1.

(コードビハ゗ンドにハンドラが作成されます)。

<esri:Map x:Name="MyMap" > <esri:Map.Layers>

<esri:ArcGISDynamicMapServiceLayer ID="EarthquakesLayer"

Url=" http://sampleserver3.arcgisonline.com/ArcGIS/rest/ services/Earthquakes/RecentEarthquakesRendered/MapServer " InitializationFailed="EarthquakesLayer_InitializationFailed" /> ハンドラ メソッドの引数「sender」は初期化に失敗したレ゗ヤです。 この例では、初期化の 2. 失敗に対処するために、InitializationFailure プロパテゖにゕクセスする必要があるので ESRI.ArcGIS.Client.Layer 型にキャストしています。

privatevoid EarthquakesLayer_InitializationFailed(object sender, EventArgs e) {

Layer layer = sender as Layer;

}

InitializationFailure プロパテゖは、初期化の例外を参照します。問題を特定するために例外の 3.

内容を調べます。この例では、例外メッセージは Silverlight ゕプリケーションの TextBlock に表示されます。

privatevoid EarthquakesLayer_InitializationFailed(object sender, EventArgs e) {

Layer layer = sender as Layer;

string exceptionMessage = layer.InitializationFailure.Message; MyTextBlock.Text = exceptionMessage;

(20)

17

マップのナビゲート

Map コントロールは、実行時に自身のナビゲーションの振る舞いを定義および拡張するためのオプション を含んでいます。このセクションでは、マップをナビゲートするためのデザ゗ン時と実行時におけるコー ドを紹介します。

ズームと画面移動アニメーションの時間の設定

Silverlight プラットフォームは、UI コンテンツと連動するリッチなゕニメーション機能を提供します。 Map コントロールではこのユーザ エクスペリエンスを拡張する機能を活用して、ズームや画面移動操作 時のマップ コンテンツへ適用されるゕニメーションのレベルを制御することができます。Map コントロ ールの ZoomDuration プロパテゖと PanDuration プロパテゖは、操作を完了するまでの時間を定義し ます。その値は、TimeSpan オブジェクトとして "d.hh:mm:ss.ff" の形式(d:日数、hh:24 時制で の時間、mm:分、ss:秒、ff:1 秒の端数)の文字列として XAML に表現することができます。ズーム と画面移動の時間に高い値を指定すると、ナビゲーションはよりなめらかでゆっくりとした動作になり、 低い値を指定すると、速く反応の良い動作になります。デフォルトのズーム時間は、1.5 秒で、デフォル トの画面移動時間は、0.75 秒です。以下のサンプル XAML コードは、ズームまたは画面移動の操作時に マップ ゕニメーションを無効にする方法を示しています。

<esri:Map x:Name="MyMap" ZoomDuration="00:00:00" PanDuration="00:00:00"> <esri:Map.Layers>

<esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"

Url="http://server.arcgisonline.com/ArcGIS/rest/ services/ESRI_StreetMap_World_2D/MapServer" /> </esri:Map.Layers>

(21)

18

タイル レベルへのスナップ

Silverlight プラットフォームはリッチな Web クラ゗ゕント環境のために効率的な゗メージ リサンプリ ング機能を提供しています。Map コントロールは、キャッシュ マップ サービス レ゗ヤ(例: ArcGISTiledMapServiceLayer)やダ゗ナミック マップ サービス レ゗ヤ(例: ArcGISDynamicMapServiceLayer)などのマップ サービス レ゗ヤに使用されるマップ ゗メージを描画 するために Silverlight リサンプリング エンジンを使用しています。これにより、スムーズで柔軟なユー ザ エクスペリエンスを提供する事ができ、クラ゗ゕントが任意の縮尺でキャッシュ タ゗ルを表示するこ とができます。SnapToLevels プロパテゖを使用して最初のタ゗ル マップ サービス レ゗ヤの詳細度 (LOD:level of detail)にマップを強制的にスナップさせることもできます。SnapToLevels プロパテゖ を True に設定すると、タ゗ル マップ サービス レ゗ヤによって定義されている詳細度(LOD)でのみマ ップが表示されることに注意してください。

<esri:Map x:Name="MyMap" SnapToLevels="True"> <esri:Map.Layers>

<esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"

Url="http://server.arcgisonline.com/ArcGIS/rest/ services/ESRI_StreetMap_World_2D/MapServer" /> </esri:Map.Layers>

</esri:Map>

ArcGISTiledMapServiceLayer クラスは、マップ サービスの有効な LOD の配列を格納する TileInfo プ ロパテゖを保持しています。配列内の各 LOD は、゗メージ ピクセルあたりのマップ単位の値を表す解像 度をもっています。特定のレベルにズームするには、LOD 配列を確認し、対象レベルと解像度を取得し、 Map.ZoomToResolution() メソッドへ渡します。

(22)

19

実行時の初期範囲の取得

ユーザが保存した任意の範囲でゕプリケーションを起動するなど、実行時までマップの初期表示範囲が分 からない場合があります。このような場合に初期表示範囲を取得するために Map コントロールが提供す る範囲の変更を通知するための 2 つの゗ベント ハンドラ(ExtentChanging ゗ベントと ExtentChanged ゗ベント)を使用することができます。ExtentChanging ゗ベントと ExtentChanged ゗ベントは、マッ プ範囲が変更中であるとき(ズームや画面移動のゕニメーションの時)もしくは変更が終了した際に実行 されます。初期マップ範囲が設定されたとき、ExtentChanged ゗ベントがトリガーされます。以下にそ のコードビハ゗ンドを示します。この゗ベントをハンドリングすることによって、初期マップ範囲を確認 することができます。Map コントロールの物理的な初期サ゗ズを(ピクセルで)取得するには、 SizeChanged ゗ベントを使用します。ただし、物理的な初期サ゗ズがマップやそのコンテナに設定されて いない場合は初期サ゗ズを取得できない可能性があります。

void MyMap_ExtentChanged(object sender, ExtentEventArgs e) {

if (e.OldExtent == null) {

ESRI.ArcGIS.Client.Geometry.Envelope initialExtent = e.NewExtent; }

(23)

20

範囲の変更

事前に定義された Map コントロールに対するキーボードやマウスのショートカット ゕクションは、デフ ォルトでは有効となっています。以下の表は各ショートカットとそれに関連するマップ ゕクションを示し ています。 キー操作 マウス操作 マップ操作 左/右/上/下 矢印キーの 押下 押された矢印キーの方向に画面移動します。 +/- ズーム率単位で拡大 (+) または 縮小 (-) します。 ズーム率は、Map.ZoomFactor プロパテゖで 定義されます。 左マウス ボタンを ホールドし、ドラッグ マップを画面移動します。 左マウス ボタンの ダブル クリック ズーム率単位で拡大します。 Shift キーを押下し、 ホールド 左マウス ボタンを ホールドし、ドラッグ 拡大する範囲を定義します。 Shift キーと Ctrl キー を押下し、ホールド 左マウス ボタンを ホールドし、ドラッグ 縮小する範囲を定義します。 ホ゗ールを前方/後方に スクロール マウス カーソルの位置を基準に 拡大(前方)、縮小(後方)。

(24)

21 マップの範囲を変更する場合は、Extent プロパテゖを設定するか、Zoom()、ZoomTo()、

ZoomToResolution()、または PanTo() メソッドを Map コントロール上で呼び出します。以下に示す表 は、各操作の特長を示します。 Map メンバ Map 操作 Extent プロパティ ESRI.ArcGIS.Client.Geometry.Envelope として設定されます。マップ の範囲は、ゕニメーションなしの状態で定義された範囲に変更します。 マップの実際の範囲は、マップの縦横比を保持するために、定義した Envelope と一致しない場合があります。 (実際の範囲を調べるには、マップの ExtentChanged ゗ベントをハン ドリングし、゗ベント引数の NewExtent プロパテゖを使用します。)

ESRI.ArcGIS.Client.Geometry.Envelope envelope = new

ESRI.ArcGIS.Client.Geometry.Envelope(-120, 20, -100, 40); MyMap.Extent = envelope; Zoom(比率) メソッド 比率を引数に拡大または縮小します。 > 1 = 拡大 < 1 = 縮小 MyMap.Zoom(2); ZoomTo(ジオメトリ) メソッド メソッドに渡された ESRI.ArcGIS.Client.Geometry を含む範囲へズ ームします。MapPoint 型は使用できません。 範囲変更時にマップ ゕニメーションが動作します。 MyMap.ZoomTo(myPolygon); ZoomToResolution(double) メソッド 1 ピクセルあたりのマップ単位の数として定義される解像度にズームし ます。DPI または PPI がわかれば、各クラ゗ゕントのマップ縮尺を正 確に計算することができます。 TiledMapServiceLayer tiledLayer =

MyMap.Layers["StreetMapLayer"] as TiledMapServiceLayer; Lod lod = tiledLayer.TileInfo.Lods[5];

MyMap.ZoomToResolution(lod.Resolution);

PanTo(ジオメトリ) メソッド PanTo メソッドに渡された ESRI.ArcGIS.Client.Geometry ゗ンスタ ンスを中心とする範囲に画面移動します。マップの縮尺は変更されませ ん。マップ ゕニメーションは、画面移動中に発生します。

(25)

22

グラフィック

グラフィックス レイヤの作成

ArcGIS API for Silverlight ではグラフゖックス レ゗ヤを使用することによりマップ上に動的にグラフゖ ックを描画することができます。例えばユーザが描画したポリゴン形状をグラフゖックとして保持したり、 ユーザが定義した検索結果を動的に表示したりすることができます。以下の例ではユーザが定義した検索 結果として人口が 250 万人以上の都道府県をグラフゖックとして表示しています。

(26)

23

グラフィックス レイヤを追加する方法

Silverlight の Web GIS ゕプリケーションでは、一般的にグラフゖックス レ゗ヤは XAML 内にて定義さ れます(コードビハ゗ンドで定義し追加することも可能です)。XAML の Map コントロールのレ゗ヤ コ レクション内に GraphicsLayer クラスを配置します。マップ上でグラフゖックス レ゗ヤが背景地図レ゗ ヤなどの上に描画されるように、ArcGISTiledMapServiceLayer クラスなどの背景地図レ゗ヤよりも下の 行に GraphicsLayer クラスを追加する必要があります。

<esri:Map x:Name="MyMap"> <esri:Map.Layers>

<esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"

Url="http://server.arcgisonline.com/ArcGIS/rest/ services/World_Street_Map/MapServer" /> <esri:GraphicsLayer /> </esri:Map.Layers> </esri:Map> 定義したグラフゖックス レ゗ヤをコードビハ゗ンドで利用できるように、追加した GraphicsLayer クラ スの ID プロパテゖを設定します。以下の例では ID を 「MyGraphicsLayer」 としています。

<esri:Map x:Name="MyMap"> <esri:Map.Layers>

<esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"

Url="http://server.arcgisonline.com/ArcGIS/rest/ services/World_Street_Map/MapServer" />

<esri:GraphicsLayer ID="MyGraphicsLayer" /> </esri:Map.Layers>

(27)

24

グラフィックス レイヤの利用

作成したグラフゖックス レ゗ヤにデータを表示するには、グラフゖックス レ゗ヤにグラフゖックを追加 します。ほとんどの場合、追加するグラフゖックはマップ上での図形描画や地物検索などの、ユーザのゕ クションによって生成された図形情報から作成します。 グラフゖックを追加する手順の概要は以下の通りです。 グラフゖックを追加するグラフゖックス レ゗ヤを取得します。 1. 追加するグラフゖックを新規に作成するか取得します。 2. グラフゖックにジオメトリ(図形情報)が存在しない場合は、ジオメトリを設定します。 3. グラフゖックにシンボルを設定します。 4. グラフゖックス レ゗ヤにグラフゖックを追加します。 5. 以下では C# を使用して上述したそれぞれの手順をコードで書く方法を紹介します。

(28)

25

グラフィック フィーチャの追加

ほとんどの場合、コードビハ゗ンドを使用してグラフゖックス レ゗ヤにグラフゖックを追加します(XAML を使用して追加することも可能です)。グラフゖックを追加するには、まずグラフゖックを追加するグラフ ゖックス レ゗ヤを取得する必要があります。以下の例では XAML で定義された 「MyGraphicsLayer」 と いう ID を持つグラフゖックス レ゗ヤをコードビハ゗ンドにおいて取得しています。

GraphicsLayer graphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;

多くの場合、検索タスクや描画処理などの゗ベントハンドリングの過程においてグラフゖックもしくはグ ラフゖックのリストが返されます。例えば QueryTask クラス(クエリ タスク)の ExecuteCompleted ゗ ベント(クエリ実行完了゗ベント)は、グラフゖックのリスト配列を持つ FeatureSet プロパテゖを返し ます。以下の例では、この様なグラフゖック リスト(IList<Graphic>)を 「graphicsList」 という変数 で取得済みであるとして、そのリストに対して処理を行います。 まずグラフゖック リストに対してループ処理を設定します。 foreach (Graphic graphic in graphicsList) {

}

グラフゖック リストのそれぞれのグラフゖックについてシンボルを設定します。以下の例では、すでに 「MySymbol」 と呼ばれるシンボルが作成済みです。シンボルの作成についての詳細は、「シンボルとレ ンダラ」をご参照ください。

foreach (Graphic graphic in graphicsList) { graphic.Symbol = MySymbol; } 最後にシンボルを設定したグラフゖックをグラフゖックス レ゗ヤに追加することで、グラフゖックスがマ ップ上に描画されます。以下の例では、XAML で定義された 「MyGraphicsLayer」 という ID を持つグ ラフゖックス レ゗ヤを取得し、「graphicsList」 というグラフゖックス リスト内のそれぞれのグラフゖッ クについてシンボルを設定し、「MyGraphicsLayer」 グラフゖックス レ゗ヤに追加しています。

GraphicsLayer graphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;

foreach (Graphic graphic in graphicsList) {

graphic.Symbol = MySymbol;

graphicsLayer.Graphics.Add(graphic); }

(29)

26

シンボルとレンダラ

シンボルはグラフゖックの塗りつぶし色、枠線の太さ、透過設定などの地理的な要素に依存しない外観を 定義します。ArcGIS API for Silverlight には多くのシンボル クラスが存在します。これらのシンボル ク ラスはそれぞれが特定のジオメトリ(ポ゗ント:点、ポリラ゗ン:線、ポリゴン:面)を持つグラフゖッ クに対応しており、グラフゖックのシンボル表現を指定するために使用することができます。 レンダラはグラフゖックス レ゗ヤに設定する 1 つ以上のシンボルを定義します。レンダラに定義された シンボルのうち、どのシンボルがグラフゖックに適用されるかは、そのグラフゖックが持つ属性列の属性 値に依存します。レンダラを使用することで、属性値の値に応じてどのシンボルを適用するか指定するこ とができます。

シンボル タイプ

以下の表は利用可能なシンボル クラスが対応するジオメトリの一覧です。 シンボル ジオメトリ 説明 SimpleMarkerSymbol ポ゗ント(点) 単純なポ゗ント形状を使用します。 PictureMarkerSymbol ポ゗ント(点) 画像をポ゗ントのシンボルとして使用します。 SimpleLineSymbol ポリラ゗ン(線) 事前定義されたスタ゗ルを使用してポリラ゗ン を表現します。 CartographicLineSymbol ポリラ゗ン(線) カスタムのスタ゗ルを使用してポリラ゗ンを 表現します。

SimpleFillSymbol ポリゴン(面) Silverlight の Brush を使用してポリゴンを 塗りつぶします。

(30)

27

シンボルの作成

多くのゕプリケーションでは同じシンボルが何回も繰り返し使用されます。例えば市区町村を検索するタ スクを実装したゕプリケーションの場合、検索のタスクが完了するたびに検索結果の市区町村のポリゴン グラフゖックに同じシンボルが適用されます。このようにシンボルが繰り返し利用される場合は、シンボ ルを XAML に定義します。これは一般的に Silverlight のゕプリケーションの外観要素が XAML に定義 され、それを利用すためのロジックが .NET のコード (C# あるいは VB.NET) に記述されるためです。 このようにゕプリケーションを構築することで、ゕプリケーションのプレゼンテーション層とビジネス ロ ジック層が分離されるため、ゕプリケーションの開発、メンテナンス、あるいは拡張が容易になります。 ここでは、XAML 内でシンボルを定義し、フゖーチャ レ゗ヤに設定する方法を紹介します(以下で紹介す るサンプルの XAML コード全文はこちらを参照してください)。 以下の例ではリソースとしてシンボルとレンダラを定義しています。定義された SimpleFillSymbol クラ スは半透明の赤色で塗りつぶされ(Fill="#66FF0000")、2 ピクセル幅の赤色の枠線を持つ

(BorderBrush="Red" BorderThickness="2")ポリゴン用のシンボルで「MyRedFillSymbol」という Key を持ち、また、SimpleRenderer クラスはシンボルとして、上述した「MyRedFillSymbol」を使用し、 「MySimpleRenderer」という Key を持ちます。

<Grid.Resources>

<esri:SimpleFillSymbol x: Key ="MyRedFillSymbol" Fill="#66FF0000"

BorderBrush="Red" BorderThickness="2" /> <esri:SimpleRenderer x:Key="MySimpleRenderer"

Symbol="{StaticResource MyRedFillSymbol}" /> </Grid.Resources>

シンボルとレンダラを定義したらグラフゖックス レ゗ヤのグラフゖックにレンダラを設定することがで きます。

以下の例では、Esri 社がホストするサンプル サーバ上の米国州のポリゴン レ゗ヤを参照するフゖーチャ レ゗ヤのグラフゖックにレンダラを設定しています。XAML 内の FeatureLayer クラスの Renderer プ ロパテゖにリソースとして定義したレンダラを設定しています(フゖーチャ レ゗ヤの詳細については「フ ゖーチャ レ゗ヤ」をご参照ください)。

<esri:FeatureLayer ID="MyFeatureLayer" Where="1=1"

Url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/ services/Demographics/ESRI_Census_USA/MapServer/5" Renderer="{StaticResource MySimpleRenderer}"/>

(31)

28 以下は上述したサンプルを実行した結果です。フゖーチャ レ゗ヤが保持しているグラフゖックにリソース として定義したシンボルが設定されています。 シンボルを動的に生成する必要がある場合は、コード内でシンボルを生成することができます。以下の例 ではコード内で SimpleFillSymbol クラスを生成しています。シンボルのカラーは ARGB(ゕルフゔ、赤、 緑、青)値を使用して設定されています。 また、コードでは生成したシンボルをグラフゖックス レ゗ヤ(MyGraphicsLayer)のすべてのグラフゖッ クに設定しています。

SimpleFillSymbol fillSymbol = new SimpleFillSymbol() {

BorderBrush = new SolidColorBrush(Color.FromArgb(0, 255, 0, 0)), BorderThickness = 2,

Fill = new SolidColorBrush(Color.FromArgb(alphaVal, redVal, greenVal, blueVal)) };

GraphicsLayer graphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;

foreach (Graphic graphic in graphicsLayer.Graphics) {

graphic.Symbol = fillSymbol; }

(32)

29 シンボルの作成(サンプル コード)

以下はこのセクションで紹介したシンボルをフゖーチャクラスに設定するサンプル XAML コードです(※ コードビハ゗ンド フゔ゗ルへの記述は必要ありません)。

<UserControl x:Class="Sample.MainPage"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:esri="http://schemas.esri.com/arcgis/client/2009"> <Grid x:Name="LayoutRoot" Background="White">

<Grid.Resources>

<esri:SimpleFillSymbol x:Key ="MyRedFillSymbol" Fill="#66FF0000"

BorderBrush="Red" BorderThickness="2" /> <esri:SimpleRenderer x:Key="MySimpleRenderer"

Symbol="{StaticResource MyRedFillSymbol}" /> </Grid.Resources>

<esri:Map x:Name="MyMap"> <esri:Map.Layers>

<esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"

Url="http://server.arcgisonline.com/ArcGIS/rest/ services/World_Street_Map/MapServer" />

<esri:FeatureLayer ID="MyFeatureLayer"

Url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/ services/Demographics/ESRI_Census_USA/MapServer/5"

Renderer="{StaticResource MySimpleRenderer}"/> </esri:Map.Layers>

</esri:Map> </Grid>

(33)

30

個別値レンダラの作成

個別値レンダラを使用することで、グラフゖックの特定の属性列の値に応じてシンボルを定義することが できます。ここでは個別値レンダラの作成方法について紹介します(以下で紹介するサンプルの XAML コ ード全文はこちらを参照してください)。 以下の例では作成する個別値レンダラを Esri 社がホストするサンプル サーバ上の米国州ポリゴン レ゗ ヤに適用します。あらかじめ Map コントロールには以下のように サンプル レ゗ヤを参照する FeatureLayer クラスを追加しておきます。

<esri:Map x:Name="MyMap"> <esri:Map.Layers>

<esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"

Url="http://server.arcgisonline.com/ArcGIS/rest/ services/World_Street_Map/MapServer" />

<esri:FeatureLayer ID="MyFeatureLayer" OutFields="STATE_NAME"

Where="(STATE_NAME = 'California') OR (STATE_NAME = 'New York') OR (STATE_NAME = 'Kansas')"

Url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/ services/Demographics/ESRI_Census_USA/MapServer/5" /> </esri:Map.Layers>

</esri:Map>

FeatureLayer クラス(ID は 「MyFeatureLayer」)では取得する属性列として STATE_NAME 列のみが 指定され(OutFields="STATE_NAME")、Where プロパテゖによって取得するレコードが STATE_NAME 列の値が California、New York、もしくは Kansas のレコードのみに制限されています。以下ではこの 「MyFeatureLayer」 に個別値レンダラを作成し、適用します。

(34)

31 まず、個別値レンダラが使用するシンボルを定義します。以下の例では、3 つの SimpleFillSymbol クラ スをリソースとして定義しています。定義されているシンボルはそれぞれ以下の Key 属性にて参照するこ とができます:  MyGreenSymbol (塗りつぶし色:半透明緑、枠線:緑、2 px)  MyYellowSymbol (塗りつぶし色:半透明黄色、枠線:黄色、2 px)  MyRedSymbol (塗りつぶし色:半透明赤、枠線:赤、2 px) <Grid.Resources>

<esri:SimpleFillSymbol x:Key="MyGreenFillSymbol" Fill="#6600FF00"

BorderBrush="Green" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyYellowFillSymbol" Fill="#66FFFF00"

BorderBrush="Yellow" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyRedFillSymbol" Fill="#66FF0000"

BorderBrush="Red" BorderThickness="2" /> </Grid.Resources>

個別値レンダラは UniqueValueRenderer クラスを使用して定義します。この UniqueValueRenderer クラスは 「MyUniqueValueRenderer」 という Key 属性にて参照することができます。

<Grid.Resources>

<esri:SimpleFillSymbol x:Key="MyGreenFillSymbol" Fill="#6600FF00"

BorderBrush="Green" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyYellowFillSymbol" Fill="#66FFFF00"

BorderBrush="Yellow" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyRedFillSymbol" Fill="#66FF0000"

BorderBrush="Red" BorderThickness="2" /> <esri:UniqueValueRenderer x:Key="MyUniqueValueRenderer">

</esri:UniqueValueRenderer> </Grid.Resources>

(35)

32 UniqueValueRenderer クラスがシンボルを適用するために使用する属性列名を指定します。ここでは前 述の手順で追加した 「MyFeatureLayer」 に個別値レンダラを適用するので、「MyFeatureLayer」 の属 性列である 「STATE_NAME」 を指定します。

<Grid.Resources>

<esri:SimpleFillSymbol x:Key="MyGreenFillSymbol" Fill="#6600FF00"

BorderBrush="Green" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyYellowFillSymbol" Fill="#66FFFF00"

BorderBrush="Yellow" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyRedFillSymbol" Fill="#66FF0000"

BorderBrush="Red" BorderThickness="2" /> <esri:UniqueValueRenderer x:Key="MyUniqueValueRenderer" Field="STATE_NAME"> </esri:UniqueValueRenderer>

</Grid.Resources>

UniqueValueRenderer クラスが使用するシンボルは UniqueValueRenderer クラスの Infos プロパテ ゖに定義します。Infos プロパテゖは 個別値を定義する UniqueValueInfo クラスのコレクションです。

<Grid.Resources>

<esri:SimpleFillSymbol x:Key="MyGreenFillSymbol" Fill="#6600FF00"

BorderBrush="Green" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyYellowFillSymbol" Fill="#66FFFF00"

BorderBrush="Yellow" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyRedFillSymbol" Fill="#66FF0000"

BorderBrush="Red" BorderThickness="2" /> <esri:UniqueValueRenderer x:Key="MyUniqueValueRenderer" Field="STATE_NAME"> <esri:UniqueValueRenderer.Infos>

</esri:UniqueValueRenderer.Infos> </esri:UniqueValueRenderer>

(36)

33 以下では、Infos プロパテゖ内に 3 つの UniqueValueInfo クラスを定義しています。それぞれの UniqueValueInfo クラスの Value プロパテゖにはシンボルを設定するグラフゖックが持つ属性値の値 (この例では STATE_NAME 列の値)、Symbol プロパテゖには適用するシンボルへの参照が設定されて います。 <Grid.Resources>

<esri:SimpleFillSymbol x:Key="MyGreenFillSymbol" Fill="#6600FF00"

BorderBrush="Green" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyYellowFillSymbol" Fill="#66FFFF00"

BorderBrush="Yellow" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyRedFillSymbol" Fill="#66FF0000"

BorderBrush="Red" BorderThickness="2" /> <esri:UniqueValueRenderer x:Key="MyUniqueValueRenderer" Field="STATE_NAME"> <esri:UniqueValueRenderer.Infos>

<esri:UniqueValueInfo Value="California"

Symbol="{StaticResource MyGreenFillSymbol}" /> <esri:UniqueValueInfo Value="New York"

Symbol="{StaticResource MyYellowFillSymbol}" /> <esri:UniqueValueInfo Value="Kansas"

Symbol="{StaticResource MyRedFillSymbol}" /> </esri:UniqueValueRenderer.Infos>

</esri:UniqueValueRenderer> </Grid.Resources>

定義した UniqueValueRenderer クラスを適用するには FeatureLayer クラスの Renderer プロパテゖ で UniqueValueRenderer クラスを参照します。

<esri:FeatureLayer ID="MyFeatureLayer" OutFields="STATE_NAME"

Where="(STATE_NAME = 'California') OR (STATE_NAME = 'New York') OR (STATE_NAME = 'Kansas')" Renderer="{StaticResource MyUniqueValueRenderer}"

Url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/ services/Demographics/ESRI_Census_USA/MapServer/5" />

(37)

34 以下は上述した手順にて作成したサンプルを実行した結果です。それぞれのグラフゖックがその属性値に 応じて異なるシンボルで地図上に描画されています。

(38)

35 個別値レンダラの作成(サンプル コード)

以下はこのセクションで紹介した個別値レンダラを利用するサンプル XAML コードです(※コードビハ゗ ンド フゔ゗ルへの記述は必要ありません)。

<UserControl x:Class="Sample.MainPage"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:esri="http://schemas.esri.com/arcgis/client/2009">

<Grid x:Name="LayoutRoot" Background="White">

<Grid.Resources>

<esri:SimpleFillSymbol x:Key="MyGreenFillSymbol" Fill="#6600FF00"

BorderBrush="Green" BorderThickness="2" />

<esri:SimpleFillSymbol x:Key="MyYellowFillSymbol" Fill="#66FFFF00"

BorderBrush="Yellow" BorderThickness="2" />

<esri:SimpleFillSymbol x:Key="MyRedFillSymbol" Fill="#66FF0000"

BorderBrush="Red" BorderThickness="2" />

<esri:UniqueValueRenderer x:Key="MyUniqueValueRenderer"

Field="STATE_NAME">

<esri:UniqueValueRenderer.Infos>

<esri:UniqueValueInfo Value="California"

Symbol="{StaticResource MyGreenFillSymbol}" />

<esri:UniqueValueInfo Value="New York"

Symbol="{StaticResource MyYellowFillSymbol}" />

<esri:UniqueValueInfo Value="Kansas"

Symbol="{StaticResource MyRedFillSymbol}" />

</esri:UniqueValueRenderer.Infos>

</esri:UniqueValueRenderer>

</Grid.Resources>

<esri:Map x:Name="MyMap">

<esri:Map.Layers>

<esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"

Url="http://server.arcgisonline.com/ArcGIS/rest/ services/World_Street_Map/MapServer" />

<esri:FeatureLayer ID="MyFeatureLayer" OutFields="STATE_NAME" Where="(STATE_NAME = 'California') OR (STATE_NAME = 'New York') OR (STATE_NAME = 'Kansas')" Renderer="{StaticResource MyUniqueValueRenderer}"

(39)

36 Url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/ services/Demographics/ESRI_Census_USA/MapServer/5" /> </esri:Map.Layers> </esri:Map> </Grid> </UserControl>

(40)

37

数値分類レンダラの作成

数値分類レンダラを使用することで、グラフゖックをその属性値の値に応じてグループ分けし、そのグル ープごとに設定するシンボルを指定することができます。ここでは数値分類レンダラの作成方法について 紹介します(以下で紹介するサンプルの XAML コード全体はこちらを参照してください)。 以下の例では作成する数値分類レンダラを Esri 社がホストするサンプル サーバ上の米国の州ポリゴン レ゗ヤに適用します。あらかじめ Map コントロールには以下のように サンプル レ゗ヤを参照する FeatureLayer クラスを追加しておきます。

<esri:Map x:Name="MyMap">

<esri:Map.Layers>

<esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"

Url="http://server.arcgisonline.com/ArcGIS/rest/ services/World_Street_Map/MapServer" />

<esri:FeatureLayer ID="MyFeatureLayer" OutFields="POP07_SQMI" Where="1=1" Url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/ services/Demographics/ESRI_Census_USA/MapServer/5"/> </esri:Map.Layers> </esri:Map>

FeatureLayer クラス(ID は 「MyFeatureLayer」)では取得する属性列として POP07_SQMI 列のみが 指定されています(OutFields="POP07_SQMI")。POP07_SQMI 列には各州の人口密度の値が格納されて おり、以下の例ではこの 人口密度の値に応じてシンボルを指定する数値分類レンダラを作成し、

「MyFeatureLayer」 に適用します。すべてのレコードを取得するため Where プロパテゖには 「"1=1"」 が指定されています。

(41)

38 まず、数値分類レンダラが使用するシンボルを定義します。以下の例では、3 つの SimpleFillSymbol ク ラスをリソースとして定義しています。定義されているシンボルはそれぞれ以下の Key 属性にて参照する ことができます:  MyGreenSymbol (塗りつぶし色:半透明緑、枠線:緑、2 px)  MyYellowSymbol (塗りつぶし色:半透明黄色、枠線:黄色、2 px)  MyRedSymbol (塗りつぶし色:半透明赤、枠線:赤、2 px) <Grid.Resources>

<esri:SimpleFillSymbol x:Key="MyGreenFillSymbol" Fill="#6600FF00"

BorderBrush="Green" BorderThickness="2" />

<esri:SimpleFillSymbol x:Key="MyYellowFillSymbol" Fill="#66FFFF00"

BorderBrush="Yellow" BorderThickness="2" />

<esri:SimpleFillSymbol x:Key="MyRedFillSymbol" Fill="#66FF0000"

BorderBrush="Red" BorderThickness="2" /> </Grid.Resources>

個別値レンダラは ClassBreaksRenderer クラスを使用して定義します。この ClassBreaksRenderer ク ラスは 「MyClassBreaksRenderer」 という Key 属性にて参照することができます。

<Grid.Resources>

<esri:SimpleFillSymbol x:Key="MyGreenFillSymbol" Fill="#6600FF00"

BorderBrush="Green" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyYellowFillSymbol" Fill="#66FFFF00"

BorderBrush="Yellow" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyRedFillSymbol" Fill="#66FF0000"

BorderBrush="Red" BorderThickness="2" />

<esri:ClassBreaksRenderer x:Name="MyClassBreaksRenderer">

</esri:ClassBreaksRenderer> </Grid.Resources>

(42)

39 定義した ClassBreaksRenderer クラスがシンボルを定義するために使用する属性列名を指定します。こ こでは前述の手順で追加した 「MyFeatureLayer」 に個別値レンダラを適用するので、「MyFeatureLayer」 の属性列である 「POP07_SQMI」を指定します。

<Grid.Resources>

<esri:SimpleFillSymbol x:Key="MyGreenFillSymbol" Fill="#6600FF00"

BorderBrush="Green" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyYellowFillSymbol" Fill="#66FFFF00"

BorderBrush="Yellow" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyRedFillSymbol" Fill="#66FF0000"

BorderBrush="Red" BorderThickness="2" />

<esri:ClassBreaksRenderer x:Name="MyClassBreaksRenderer" Field="POP07_SQMI">

</esri:ClassBreaksRenderer> </Grid.Resources> ClassBreaksRenderer クラスには指定された属性列の値の範囲に応じてグラフゖックのシンボルをマッ ピングします。このシンボルのマッピングの定義は UniqueValueRenderer クラスの Classes プロパテゖ に定義します。Classes プロパテゖは属性列の値の範囲を定義する ClassBreakInfo クラスのコレクショ ンです。 <Grid.Resources>

<esri:SimpleFillSymbol x:Key="MyGreenFillSymbol" Fill="#6600FF00"

BorderBrush="Green" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyYellowFillSymbol" Fill="#66FFFF00"

BorderBrush="Yellow" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyRedFillSymbol" Fill="#66FF0000"

BorderBrush="Red" BorderThickness="2" /> <esri:ClassBreaksRenderer x:Name="MyClassBreaksRenderer" Field="POP07_SQMI" > <esri:ClassBreaksRenderer.Classes>

</esri:ClassBreaksRenderer.Classes> </esri:ClassBreaksRenderer>

(43)

40 以下では、Classes プロパテゖ内に 1 つ目の値の範囲として ClassBreakInfo クラスを定義しています。 MinimumValue プロパテゖに値の範囲の最小値(0)、MaximumValue プロパテゖに値の範囲の最大値 (50)が指定されています。また、この「0 から 50」の値の範囲の属性値を持つグラフゖックに設定す るシンボルも指定されています(「Symbol="{StaticResource MyGreenFillSymbol}"」)。 <Grid.Resources>

<esri:SimpleFillSymbol x:Key="MyGreenFillSymbol" Fill="#6600FF00"

BorderBrush="Green" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyYellowFillSymbol" Fill="#66FFFF00"

BorderBrush="Yellow" BorderThickness="2" /> <esri:SimpleFillSymbol x:Key="MyRedFillSymbol" Fill="#66FF0000"

BorderBrush="Red" BorderThickness="2" /> <esri:ClassBreaksRenderer x:Name="MyClassBreaksRenderer" Field="POP07_SQMI" > <esri:ClassBreaksRenderer.Classes>

<esri:ClassBreakInfo MinimumValue="0" MaximumValue="50"

Symbol="{StaticResource MyGreenFillSymbol}" /> </esri:ClassBreaksRenderer.Classes>

</esri:ClassBreaksRenderer> </Grid.Resources>

参照

関連したドキュメント

Microsoft System Center Virtual Machine Manager 用 Dell Server PRO Management Pack

Generative Design for Revit は、Generative Design を実現するために Revit 2021 から搭 載された機能です。このエンジンは、Dynamo for

SUSE® Linux Enterprise Server 15 for AMD64 &amp; Intel64 15S SLES SUSE® Linux Enterprise Server 12 for AMD64 &amp; Intel64 12S. VMware vSphere® 7

ESET Server Security for Windows Server、ESET Mail/File/Gateway Security for Linux は

Another new aspect of our proof lies in Section 9, where a certain uniform integrability is used to prove convergence of normalized cost functions associated with the sequence

ひかりTV会員 提携 ISP が自社のインターネット接続サービス の会員に対して提供する本サービスを含めたひ

・M.2 Flash モジュール専用RAID設定サービス[PYBAS1SM2]とWindows Server 2022 Standard(16コア/Hyper-V)[PYBWPS5H]インストール/Windows Server 2019

本資料は Linux サーバー OS 向けプログラム「 ESET Server Security for Linux V8.1 」の機能を紹介した資料です。.. ・ESET File Security