<\/HEAD>
Mapas geralmente consistem em Camadas Basemap para orientação e Camadas Operacionais para visualizar, consultar, editar e analisar informações geográficas. No ArcGIS, são diferenciados dois tipos de Basemaps<\/A>: Serviços Raster Tile (Map Services e Image Services em cache) e os ainda relativamente jovens Serviços Vector Tile.<\/P><\/P>
<\/P>
Link para o Mapa ao Vivo<\/A><\/P><\/P>
<\/DIV>
Para o uso offline de Basemaps no
ArcGIS Runtime<\/A>, já é possível há muito tempo exportar diretamente Tile Packages (.tpk) a partir de Serviços Raster Tile. A novidade agora é a possibilidade de exportar áreas de Serviços Vector Tile e utilizá-las localmente como Vector Tile Packages (.vtpk):<\/DIV><\/P>
No código a seguir, apenas os dados (.vtpk) são exportados e não o Style.<\/P>
<SPAN class="comment token">// Criar a task<\/SPAN>
<SPAN class="keyword token">var<\/SPAN> exportTask <SPAN class="operator token">=<\/SPAN> <SPAN class="keyword token">await<\/SPAN> ExportVectorTilesTask<SPAN class="punctuation token">.<\/SPAN><SPAN class="token function">CreateAsync<\/SPAN><SPAN class="punctuation token">(<\/SPAN>portalItem<SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN>
<SPAN class="comment token">// Criar uma nova instância de parâmetros<\/SPAN>
<SPAN class="keyword token">var<\/SPAN> parameters <SPAN class="operator token">=<\/SPAN> <SPAN class="keyword token">new<\/SPAN> <SPAN class="token class-name">ExportVectorTilesParameters<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="punctuation token">)<\/SPAN>
<SPAN class="punctuation token">{<\/SPAN>
AreaOfInterest <SPAN class="operator token">=<\/SPAN> exportArea<SPAN class="punctuation token">.<\/SPAN>Geometry<SPAN class="punctuation token">,<\/SPAN> <SPAN class="comment token">// área para exportar<\/SPAN>
MaxLevel <SPAN class="operator token">=<\/SPAN> exportTask<SPAN class="punctuation token">.<\/SPAN>VectorTileSourceInfo<SPAN class="punctuation token">.<\/SPAN>LevelsOfDetail<SPAN class="punctuation token">.<\/SPAN>Count <SPAN class="operator token">-<\/SPAN> <SPAN class="number token">1<\/SPAN> <SPAN class="comment token">// níveis para exportar<\/SPAN>
<SPAN class="punctuation token">}<\/SPAN><SPAN class="punctuation token">;<\/SPAN>
<SPAN class="comment token">// Criar o job de exportação<\/SPAN>
<SPAN class="keyword token">var<\/SPAN> job <SPAN class="operator token">=<\/SPAN> exportTask<SPAN class="punctuation token">.<\/span><span class="token function">ExportVectorTiles</span><span class="punctuation token">(</span>parameters<span class="punctuation token">,</span> Path<span class="punctuation token">.</span><span class="token function">Combine</span><span class="punctuation token">(</span>_vectorTileCachePath<span class="punctuation token">,</span> "name.vtpk"<span class="punctuation token">)</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
<span class="comment token">// Inscrever-se para notificações de atualizações de status</span>
job<span class="punctuation token">.</span>JobChanged <span class="operator token">+=</span> <span class="punctuation token">(</span>sender<span class="punctuation token">,</span> e<span class="punctuation token">)</span> =>
<span class="punctuation token">{
if (job.Status == Esri.ArcGISRuntime.Tasks.JobStatus.Succeeded)
{
// fazer algo
}
else if (job.Status == Esri.ArcGISRuntime.Tasks.JobStatus.Failed)
{
// Notificar o usuário
ShowStatusMessage(job.Error.Message);
}
};
// Iniciar o job de exportação
job.Start();<span class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span> </ span ></ span ></ code >< / pre >< p >< / p >< p > Também é possível exportar o vtpk e o Style (se disponível) em uma única operação. Para isso, basta fornecer ao ExportVectorTilesJob o caminho adicional para uma pasta para o Style.< / p >< pre classe = "lia-code-sample line-numbers language-none" > < code > ExportVectorTilesJob job ;
if (exportTask.HasStyleResources)
{
job = exportTask.ExportVectorTiles(parameters, Path.Combine(_vectorTileCachePath, "name.vtpk"), _styleResourcePath);
}
else
{
job = exportTask.ExportVectorTiles(parameters, Path.Combine(_vectorTileCachePath, "name.vtpk"));
} << EM O J I _31 >> < span classe = "line-numbers-rows" > < span > << EM O J I _32 >> < / span > < span > << EM O J I _33 >> < / span > < span > << EM O J I _34 >> < / span > < span > << EM O J I _35 >> < / span > < span > << EM O J I _36 >> < / span > < span > << EM O J I _37 >> < / span > < span > << EM O J I _38 >> < / span > < span > << EM O J I _39 >> < / span > < span > << EM O J I _40 >> </ span > </ code > </ pre >< p >< / p >< p > E quando apenas o Style deve ser exportado, fica assim:<\/P><PRE class="lia-code-sample line-numbers language-none"><CODE><SPAN class="keyword token">var<\/SPAN> exportTask <SPAN class="operator token">=<\/SPAN> <SPAN class="keyword token">await<\/SPAN> ExportVectorTilesTask<SPAN class="punctuation token">.<\/SPAN><SPAN class="token function">CreateAsync<\/SPAN><SPAN class="punctuation token">(<\/SPAN>portalItem<SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN>
<SPAN class="keyword token">if<\/SPAN> <SPAN class="punctuation token">(<\/SPAN>exportTask<SPAN class="punctuation token">.<\/SPAN>HasStyleResources<SPAN class="punctuation token">)<\/SPAN>
<SPAN class="punctuation token">{<\/SPAN>
<SPAN class="keyword token">var<\/SPAN> exportStyleJob <SPAN class="operator token">=<\/SPAN> exportTask<SPAN class="punctuation token">.<\/SPAN><SPAN class="token function">ExportStyleResourceCache<\/SPAN><SPAN class="punctuation token">(<\/SPAN>_styleResourcePath<SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN>
<SPAN class="keyword token">var<\/SPAN> result <SPAN class="operator token">=<\/SPAN> <SPAN class="keyword token">await<\/SPAN> exportStyleJob<SPAN class="punctuation token">.<\/SPAN><SPAN class="token function">GetResultAsync<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN>
<SPAN class="comment token">\/\/faça algo<\/SPAN>
<SPAN class="punctuation token">}<\/SPAN><SPAN class="line-numbers-rows"><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><\/span><\/CODE><\/PRE><P><\/P><P>Se, por exemplo, todos os <A href="http:\/\/www.arcgis.com\/home\/search.html?q=vector%20tile%20v2%20for%20export%20world%20basemap&t=content&focus=layers&start=1&sortOrder=desc&sortField=relevance" rel="nofollow noopener noreferrer" target="_blank">serviços de Vector Tile do ArcGIS Online exportáveis descritos acima <\A> devem estar disponíveis localmente como Basemaps, deve-se exportar o vtpk de <span style="text-decoration: underline;">um</span> serviço e apenas os Styles de todos os serviços. Em uma pasta StyleResource só existem arquivos JSON com a descrição do Style, que são muito pequenos.<\span></P><P></P><P><IMG class="image-16 jive-image" src="https:\/\/us.v-cdn.net\/6038851\/uploads\/legacyfs\/online\/396344_pastedImage_1.png" style="width: 620px; height: 341px;" \/></P><H3 id="toc-hId-1751590101" id="toc-hId-1751590101"><\H3><H3 id="toc-hId--800566860" id="toc-hId--800566860">Uso de Pacotes e Styles locais de Vector Tile no ArcGIS Runtime</H3><P>O vtpk local e um Style existente podem então ser incorporados ao mapa da seguinte forma:<\P><P></P><PRE class="lia-code-sample line-numbers language-none"><CODE><span class="comment token">//Carregar um style</span>
<span class="keyword token">var</span> itemResourceCache <span class="operator token">=</span> <span class="keyword token">new</span> <span class="token class-name">ItemResourceCache</span>( _styleResourcePath );
<span class="comment token">//Carregar o vtpk</span>
<span class="keyword token">var</span> offlineVectorTileCache <span class="operator token">=</span> <span class="keyword token">new</span> <span class="token class-name">VectorTileCache</span>( Path.Combine( _vectorTileCachePath, "name.vtpk" ) );
<span class="comment token">// Criar uma camada tile com o cache e o style</span>
<span class="keyword token">var</span> layer <span class="operator token">=</span> <span class="keyword token">new</span> <span class="token class-name">ArcGISVectorTiledLayer</span>( offlineVectorTileCache, itemResourceCache );
<span class="comment token">// Criar uma camada tile somente com o cache</span>
<span class="comment token">//var layer = new ArcGISVectorTiledLayer(offlineVectorTileCache);</span>
<span class="comment token">// Criar um novo mapa com a camada como basemap</span>
<span class="keyword token">var</span> map <span class="operator token">=</span> <span class="keyword token">new</span> <span class="token class-name">Map</span>( <span class="keyword token">new</span> <span class="token class-name">Basemap</span>( layer ) );
<span class="comment token">// Aplicar o mapa ao mapview</span>
MyMapView.Map <span class="operator token">=</span> map;<SPAn cLass= "line-numbers-rows"><SPAn > </SPAn ><SPAn > </SPAn ><SPAn > </SPAn ><SPAn > </SPAn ><SPAn > </SPAn ><SPAn > </SPAn ><SPAn > </SPAn ><SPAn > </SPAn ><SPAn > </SPAn ><SPAn > </SPAn ><SPAn > </SPAn ><SPAn > </SPAn ><SPAn > </SPAn ><SPAn > </SPAn ><SPAn > </SPAn ><SPAn > </SPAn ><SPAn > </SPAn ></Span>Se o desenvolvedor combinar tudo que foi descrito, é possível usar localmente na aplicação ArcGIS Runtime vários Basemaps baseados em apenas um vtpk. Geralmente não é mais necessário se preocupar com o espaço de armazenamento dos dados no dispositivo. Em um teste com a área aproximadamente da Baviera em toda a profundidade de detalhes, o tamanho do vtpk + Styles é de cerca de 230 MB e a exportação levou quase 7 minutos. É importante também a informação de que existe um limite máximo ("maxExportTilesCount":10000) para uma exportação.<\P>

Piso Offline Vector Tile Basemap sem style extra (apenas o .vtpk carregado)<\Em>

Piso Offline Vector Tile Basemap com Style<\Em>

Piso Offline Vector Tile Basemap com <\Span>Style<\Em>

Piso Offline Vector Tile Basemap com <\Span>Style<\Em>

Piso Offline Vector Tile Basemap com <\Span>Style<\Em>