<\/HEAD>
Los mapas generalmente consisten en capas Basemap para orientación y capas operativas para visualizar, consultar, editar y analizar información geográfica. En ArcGIS se distinguen dos tipos de Basemaps<\/A>: Servicios Raster Tile (servicios de mapas en caché y servicios de imágenes) y los aún bastante jóvenes Vector Tile Services.<\/P><\/P>
<\/P>
Enlace al mapa en vivo<\/A><\/P><\/P>
<\/DIV>
Para el uso sin conexión de Basemaps en
ArcGIS Runtime<\/A> desde hace mucho tiempo se pueden exportar directamente Tile Packages (.tpk) desde Raster Tile Services. Lo completamente nuevo ahora es la posibilidad de exportar áreas de Vector Tile Services y usarlas localmente como Vector Tile Packages (.vtpk):<\/DIV><\/P>
1. Autenticar< /H5 >< P > La exportación anónima no está permitida, se requiere autenticación. Hay varias opciones para ello, por ejemplo en este < A href = "https://developers.arcgis.com/net/latest/wpf/sample-code/oauth.htm " rel = "nofollow noopener noreferrer " target = "_blank " > Ejemplo < /A > . < / P >< P >< / P >< H5 id = "toc-hId--2127057579 " id = "toc-hId--2127057579 " > 2. Crear PortalItem del Vector Tile Service < /H5 >< P > En nuestro ejemplo de código usamos la < A href = "http://www.arcgis.com/home/item.html?id=df541726b3df4c0caf99255bb1be4c86 " rel = "nofollow noopener noreferrer " target = "_blank " > World Topographic Map (for Export) < /A > . Se necesita su ID del portal.< / P >< P >< / P >< PRE class = "lia-code-sample line-numbers language-none " >< CODE >< SPAN class = "keyword token " > var < /SPAN > portal < SPAN class = "operator token " > = < /SPAN > < SPAN class = "keyword token " > await < /SPAN > ArcGISPortal< SPAN class = "punctuation token " > . < /SPAN >< SPAN class = "token function " > CreateAsync < /SPAN >< SPAN class = "punctuation token " >( )< /SPAN >< SPAN class = "punctuation token " > ; < /SPAN >
< SPAN class = "keyword token " > var < /SPAN > portalItem < SPAN class = "operator token " > = < /SPAN > < SPAN class = "keyword token " > await < /SPAN > PortalItem< SPAN class = "punctuation token " > . < /SPAN >< SPAN class = "token function " > CreateAsync < /SPAN >< SPAN class = "punctuation token " >( portal , < SPAN class = "string token " > "df541726b3df4c0caf99255bb1be4c86" < /SPAN >< SPAN class = "punctuation token " )< /SPAN >< SPAN class = "punctuation token " > ; < /SPAN >
< P >< / P >< PRE class= lia-code-sample line-numbers language-none > CONSEJO :
No es posible consultar servicios equivalentes con otros estilos desde un Vector Tile Service. Para automatizar esto se puede buscar tipos y etiquetas PortalItems en ArcGIS Runtime.
Por ejemplo, las Basemaps descritas aquí tienen la etiqueta específica «World_Basemap_Export_v2».
Para servicios propios debe elegirse una etiqueta específica propia.
Así es como se busca:< /PRE >< PRE class= lia-code-sample line-numbers language-none >< CODE >< SPAN class= keyword token > var queryExpression < SPAN class= operator token >= < SPAN class= keyword token > string .< SPAN class= punctuation token > Format (< SPAN class= string token > id="toc-hId--384247244" id="toc-hId--384247244">3. Crear y ejecutar Task, Parameter y Job
En el siguiente código solo se exportan los datos (.vtpk) y no el Style.<\/P>
<SPAN class="comment token">\/\/ Crear la 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">\/\/ Crear una nueva instancia de parameters<\/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 a 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">\/\/niveles a exportar<\/SPAN>
<SPAN class="punctuation token">}<span>;\n</span>
<span><span>// Crear el job de exportación</span></span>
<span>var job = exportTask.ExportVectorTiles(parameters, Path.Combine(_vectorTileCachePath, "name.vtpk"));</span>
<span>// Suscribirse a notificaciones para actualizaciones de estado</span>
job.JobChanged += (sender, e) =>
{
if (job.Status == Esri.ArcGISRuntime.Tasks.JobStatus.Succeeded)
{
//hacer algo
}
else if (job.Status == Esri.ArcGISRuntime.Tasks.JobStatus.Failed)
{
// Notificar al usuario
ShowStatusMessage(job.Error.Message);
}
};
// Iniciar el job de exportación
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>
También se puede exportar el vtpk y el Style (si está disponible) en un solo paso. Para ello, al ExportVectorTilesJob solo se le debe proporcionar adicionalmente la ruta de almacenamiento para una carpeta del Style.<\/p>
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"));
}<spanspanclass=\"line-numbers-rows\"><spanspan><<EMOJI_32>></spanspan>
<span><<EMOJI_33>></spanspan>
<span><<EMOJI_34>></spanspan>
<span><<EMOJI_35>></spanspan>
<span><<EMOJI_36>></spanspan>
<span><<EMOJI_37>></spanspan>
<span><<EMOJI_38>></spanspan>
<span><<EMOJI_39>></spanspan>
<span><<EMOJI_40>></spanspan>
y cuando solo se debe exportar el Style se ve así:<\/P>
<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 class="punctuation token">)<span class="punctuation token">;<span class="comment token">//hacer 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>Por ejemplo, si todas las exportables ArcGIS Online Vector Tile Services descritas más arriba deben estar disponibles localmente como Basemaps, se debe exportar el vtpk de un único Service y solo los Styles de todos los Services. En una carpeta StyleResource solo hay archivos JSON con la descripción del Style, estos son muy pequeños.<\/p>

<\/h3>Uso de paquetes Vector Tile locales y Styles en ArcGIS Runtime<\/h3>El vtpk local y un Style existente pueden integrarse en el mapa así:<\/p><span class="comment token">//Cargar un 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">//Cargar el 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">// Crear una capa de mosaico con la caché y el 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">// Crear una capa de mosaico solo con la caché</span>
<span class="comment token">//var layer = new ArcGISVectorTiledLayer(offlineVectorTileCache);</span>
<span class="comment token">// Crear un nuevo mapa con la capa 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 el mapa a la vista del mapa</span>
MyMapView.Map <span class="operator token">=</span> map;<spanspanclass=line-numbers-rows"><spanspan </spanspan><spanspan </spanspan><spanspan </spanspan><spanspan </spanspan><spanspan </spanspan><spanspan </spanspan><spanspan </spanspan><spanspan </spanspan><spanspan </spanspan><spanspan </spanspan><spanspan </spanspan><spanspan </spanspan><spanspan </spanspan><spanspan </spanspan><spanspan </spanspan><spanspan </spanspan><spanspan </spanspan></spann>Si el desarrollador combina todo lo descrito, en la aplicación ArcGIS Runtime se pueden usar localmente varios Basemaps basados en un solo vtpk. Generalmente no hay que preocuparse por el espacio de almacenamiento de los datos en el dispositivo. En una prueba con la región aproximadamente Bayern en todo su nivel de detalle, el tamaño del vtpk + Styles es solo alrededor de 230 MB y la exportación tomó casi 7 minutos. Es importante también la información de que existe un límite máximo ("maxExportTilesCount":10000) para una exportación.<\/p>
Capa base Offline Vector Tile sin style extra (solo se cargó el .vtpk)<\/em>
Capa base Offline Vector Tile con Style<\/em>
Capa base Offline Vector Tile con Style<\/em>
Capa base Offline Vector Tile con Style<\/em>
Capa base Offline Vector Tile con Style<\/em>