<\/HEAD>
デジタル地図は通常、Basemapsとベクトルデータで構成されており、これらはレイヤーの形で重ねて表示されます。Basemapsは地理情報を取得できないジオリファレンスされた画像です。頻繁には更新されず、主に方向付けのために使用されます。一方、ベクトルデータはジオオブジェクト(Features)で、それぞれがジオメトリと関連情報から成り立っています。通常、Basemapsの上に適切なシンボロジーで表示されます。ベクトルデータはクライアント側で情報提供、分析、さらにはデータ収集にも利用できます。<\/P>
<\/P>
ArcGISは、さまざまなデバイスでBasemapsとベクトルデータをオフラインでも利用できる多様な方法を提供しています。このブログ<\/A>ではオフラインベクトルデータについて詳しく扱います。以下では、ArcGIS Runtime<\/A>を基盤としたアプリでのオフラインBasemapsとその利用について詳しく説明します。<\/P><\/P>
<\/P>
すべてのArcGIS Runtime SDKでTiled MapServicesからデータをエクスポートし、オフライン利用が可能です。その手順はすべて同じです。以下のステップでは適切な設定とユーザー権限があるTiled MapServiceが前提となります。
手順(ArcGIS Runtime SDK for .NET):
1. ExportTileCacheTask オブジェクトを生成:
_exportTileCacheTask = new ExportTileCacheTask(exportArcGisTiledMapServiceLayerServiceUri);
2. エクスポートパラメーター設定:Tile Package形式、全スケールではなく特定領域のみ指定
_generateTileCacheParameters = new GenerateTileCacheParameters
{
Format = ExportTileCacheFormat.TilePackage,
MinScale = CurrentEsriMapView.MinScale,
MaxScale = CurrentEsriMapView.MaxScale,
GeometryFilter = _areaToExportGraphic.Geometry.Extent
};
3. EstimateTileCacheSizeAsync 関数で要求タイル数とサイズを確認し、問題があれば対処。
var exportTileCacheJobStatusProgress = <\/SPAN>new<\/SPAN> Progress<\/SPAN><<\/SPAN>ExportTileCacheJob<\/SPAN>>();<\/SPAN>\nexportTileCacheJobStatusProgress.ProgressChanged += (p, q) =><\/SPAN><\/LI><\/OL>\n{<\/SPAN>\n if<\/SPAN> (q.Messages == <\/SPAN>null<\/SPAN>)<\/SPAN>\n return<\/SPAN>;<\/SPAN>\n \/\/何かを行う<\/SPAN>\n};<\/SPAN>\n\nawait<\/SPAN> _exportTileCacheTask.EstimateTileCacheSizeAsync(_generateTileCacheParameters,\n&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;(result, ex) => // 見積もり操作が完了したときのコールバック\n &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;( {\n &amp;amp;amp;amp;amp;amp;amp;amp&;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;;amp;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ;; amp ; </span>
if(ex == null) // 操作がエラーなしで完了したかどうかを確認
�
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789... += (p, q) =>
{
if (q.Messages.Count < 1)
return;
_model.SetMessageInfo(string.Format("{0}", q.Messages[1].Description));
};
var downloadProgressChanged = new Progress();
a) downloadProgressChanged.ProgressChanged += (p, q) =>
{
//do something
};
var downloadTileCacheResult = await _exportTileCacheTask.GenerateTileCacheAndDownloadAsync(
_generateTileCacheParameters,
downloadOptions, TimeSpan.FromSeconds(5), CancellationToken.None, generateStatusCheckProgress,
downloadProgressChanged);
すべてが正常に完了すると、オフラインベースマップとしてのタイルパッケージがローカルのデバイスに保存されます。
オフラインベースマップをArcGIS Runtimeに実装する
オフラインベースマップを地図に組み込むのは比較的簡単です。すべてのArcGIS Runtime SDKにはArcGisLocalTiledLayerオブジェクトがあります。これにタイルパッケージへのパスを指定し、その後地図のLayerCollectionに追加します。
以下のように行います(ArcGIS Runtime SDK for .NET):
var arcGisLocalTiledLayer = new ArcGISLocalTiledLayer(@c:\temp\basemap.tpk);
var offlineMap = new Map();
• offlineMap.Layers.Add(arcGisLocalTiledLayer);
var mapView = new MapView { Map = offlineMap };
CurrentEsriMapView = mapView;
追加情報
• ArcGIS開発者向け入門ページ
• ArcGIS Runtimeとオフラインに関する詳細情報のブログ
• 特にオフラインベクターデータに関するブログ
• サンプルアプリ GitHub上のCollector Light、ブログ内のスニペットはここから引用されています