マップ表示の固定スケール制御手法

方法1:マップコントロールの基本プロパティ設定

マップコントロールにはズーム係数を制御するための基本プロパティが提供されています:

public double ZoomFactor {get; set;}

ArcGIS API SDKにおけるズーム操作のトリガーとなるユーザーインタラクション:

ArcGIS API for SilverlightおよびArcGIS API for WPF:

  • 左マウスダブルクリック
  • 左マウスダブルクリック + Shiftキー
  • マウスホイールスクロール
  • + キー
  • - キー
  • ダブルタップジェスチャー

ArcGIS API for Windows Phone:

  • ダブルタップジェスチャー

方法2:タイルレイヤーに基づくスケールレベル制御

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

Silverlightプラットフォームでは、リッチなWebクライアント環境向けに効率的な画像リサンプリング機能を提供しています。ArcGIS Silverlight APIのマップコントロールは、このリサンプリングエンジンを活用して、キャッシュタイル(ArcGISTiledMapServiceLayer)や動的マップ画像(ArcGISDynamicMapServiceLayer)などのマップサービスレイヤーに関連する画像を描画します。これにより、スムーズで柔軟なユーザー体験が実現され、クライアントは任意のスケールでキャッシュタイルを表示できます。SnapToLevelsプロパティを使用して、最初のタイルマップサービスレイヤーの詳細レベル(LOD)にマップを強制的にスナップさせることを選択できます。このプロパティをtrueに設定すると、マップはタイルマップサービスレイヤーで定義されたスケール(LOD)でのみ表示可能になります。

<esri:Map x:Name="MainMap" SnapToLevels="True">
   <esri:Map.Layers>
       <esri:ArcGISTiledMapServiceLayer ID="BaseMapLayer"
           Url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer" />
   </esri:Map.Layers>
</esri:Map>

特定のタイルレイヤーレベルの解像度にズームする場合は、Map.ZoomToResolutionメソッドを使用します。解像度はマップ単位/ピクセルで定義されます。画面のDPIまたはPPI(ピクセル/インチ)が分かっている場合は、対応するクライアントの正確なマップスケールを計算できます。

TileMapService baseLayer = MainMap.Layers["BaseMapLayer"] as TileMapService;
LevelDefinition scaleLevel = baseLayer.TileInfo.ScaleLevels[5];
MainMap.ZoomToResolution(scaleLevel.Resolution);

タグ: ArcGIS マップ制御 スケール管理 タイルレイヤー Silverlight

6月11日 16:26 投稿