<\/HEAD>
Um mapa digital geralmente consiste em Basemaps e dados vetoriais, que são exibidos em camadas sobrepostas. Basemaps são imagens georreferenciadas sem informações geográficas acessíveis. Eles não são atualizados com muita frequência e servem essencialmente para orientação. Dados vetoriais, por outro lado, são objetos geográficos (Features), que consistem em uma geometria e informações associadas. Eles geralmente são exibidos acima dos Basemaps com uma simbologia adequada. Dados vetoriais podem ser usados no cliente para informar, analisar e também para coleta de dados.<\/P>
<\/P>
ArcGIS oferece várias possibilidades para usar Basemaps e dados vetoriais offline em diferentes dispositivos. Neste Blog<\/A>será abordado mais detalhadamente os dados vetoriais offline. A seguir, vamos nos concentrar mais nos Basemaps offline e seu uso em aplicativos baseados no ArcGIS Runtime<\/A>.<\/P><\/P>
<\/P>
Com todos os ArcGIS Runtime SDKs é possível exportar dados de Tiled MapServices e usá-los offline. O procedimento é o mesmo para todos. Para os passos seguintes, pressupõe-se um Tiled MapService com as configurações apropriadas e direitos de usuário.
Aqui está como fazer (ArcGIS Runtime SDK for .NET):
1. Criar um objeto ExportTileCacheTask:
_exportTileCacheTask = new ExportTileCacheTask(exportArcGisTiledMapServiceLayerServiceUri);
2. Definir parâmetros para a exportação, queremos o formato Tile Package, não todas as escalas e apenas uma área específica
_generateTileCacheParameters = new GenerateTileCacheParameters
{
Format = ExportTileCacheFormat.TilePackage,
MinScale = CurrentEsriMapView.MinScale,
MaxScale = CurrentEsriMapView.MaxScale,
GeometryFilter = _areaToExportGraphic.Geometry.Extent
};
      3.&enspVerificar o tamanho e número dos tiles solicitados com a função EstimateTileCacheSizeAsync, e capturar problemas se necessário.
= <\/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 \/\/faça algo<\/SPAN>\n};<\/SPAN>\n\nawait<\/SPAN> _exportTileCacheTask.EstimateTileCacheSizeAsync(_generateTileCacheParameters,\n (result, ex) => <\/SPAN>\/\/ Callback para quando a operação de estimativa for concluída<\/SPAN>\n& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;{\n  ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; if < / span > (ex == < span style = "font - size : 4 . 0 pt" , "font - family" : "Consolas" , "color" : "blue" , "background" : "white" > null < / span > ) < span style = "font - size : 4 . 0 pt" , "font - family" : "Consolas" , "color" : "green" , "background" : "white" > \/\/ Verifique se a operação foi concluída com erros < / span > \ n < span style = "font - size : 4 . 0 pt" , "font - family" : "Consolas" , "color" : "black" , "background" : "white" > & nb sp ; & nb sp ; & nb sp ; & nb sp ; & nb sp ; & nb sp ; & nb sp ; & nb sp ; & nb sp ; & nb sp ; & nb sp ; { < / span > \ n < span style = "font - size : 4 . 0 pt" , "font - family" : "Consolas" , "color" : "black" , "background" : "white" > & nb sp ; & nb sp ; & nb sp ; & nb sp ; _model.SetMessageInfo(< / span > < span style = "font - size : 4 . 0 pt" , "font - family" : "Consolas" , "color" : "blue" , "background" : "white" > string < / span > .Format(< span style = "font - size : 4 . 0 pt" , "font - family" : "Consolas" , "color":#a31515,"background":"white">Tiles:< / span >< span style = += (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) =>
{
//fazer algo
};
var downloadTileCacheResult = await _exportTileCacheTask.GenerateTileCacheAndDownloadAsync(
_generateTileCacheParameters,
downloadOptions, TimeSpan.FromSeconds(5), CancellationToken.None, generateStatusCheckProgress,
downloadProgressChanged);
Quando tudo correr bem, agora temos um Offline Basemap salvo localmente em nosso dispositivo como um Tile Package.
Implementando Offline Basemaps no ArcGIS Runtime
Integrar Offline Basemaps no mapa é relativamente simples. Em todos os SDKs do ArcGIS Runtime existe o objeto ArcGisLocalTiledLayer. A ele damos o caminho para nosso Tile Package e então o adicionamos à LayerCollection do mapa.
É assim que se faz (ArcGIS Runtime SDK para .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;
Mais informações
• Página inicial para desenvolvedores ArcGIS
• Blog com mais informações sobre ArcGIS Runtime e Offline
• Blog especificamente sobre dados vetoriais Offline
• Sample App Collector Light no GitHub, os snippets no blog são retirados de lá