<\/HEAD>
Une carte numérique se compose généralement de Basemaps et de données vectorielles, qui sont affichées sous forme de couches superposées. Les Basemaps sont des images géoréférencées sans informations géographiques consultables. Elles ne sont pas mises à jour très fréquemment et servent essentiellement à l'orientation. Les données vectorielles, en revanche, sont des objets géographiques (Features), composés chacun d'une géométrie et des informations associées. Elles sont généralement affichées au-dessus des Basemaps avec une symbologie appropriée. Les données vectorielles peuvent être utilisées dans le client pour informer, analyser et aussi pour la collecte de données.<\/P>
<\/P>
ArcGIS offre différentes possibilités pour utiliser les Basemaps et les données vectorielles hors ligne sur différents appareils. Ce Blog<\/A> traite plus en détail des données vectorielles hors ligne. Nous allons ci-après nous concentrer davantage sur les Basemaps hors ligne et leur utilisation dans des applications basées sur ArcGIS Runtime<\/A>.<\/P><\/P>
<\/P>
Tous les SDK ArcGIS Runtime permettent d’exporter des données depuis des Tiled MapServices et de les utiliser hors ligne. La procédure est identique pour tous. Les étapes suivantes supposent un Tiled MapService avec les paramètres appropriés et les droits utilisateur requis.
Voici comment procéder (ArcGIS Runtime SDK for .NET) :
1. Créer un objet ExportTileCacheTask :
_exportTileCacheTask = new ExportTileCacheTask(exportArcGisTiledMapServiceLayerServiceUri);
2. Définir les paramètres d’exportation, nous voulons un Tile Package comme format, pas toutes les échelles et seulement une zone spécifique
_generateTileCacheParameters = new GenerateTileCacheParameters
{
Format = ExportTileCacheFormat.TilePackage,
MinScale = CurrentEsriMapView.MinScale,
MaxScale = CurrentEsriMapView.MaxScale,
GeometryFilter = _areaToExportGraphic.Geometry.Extent
};
3. Vérifier la taille et le nombre de tuiles demandées avec la fonction EstimateTileCacheSizeAsync et gérer les problèmes éventuels.
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 \/\/faire quelque chose<\/SPAN>\n};<\/SPAN>\n\nawait<\/SPAN> _exportTileCacheTask.EstimateTileCacheSizeAsync(_generateTileCacheParameters,<\/SPAN>\n (result, ex) => <\/SPAN>\/\/ Callback for when estimate operation has completed<\/SPAN>\n ,& nbsp,& nbsp,& nbsp,& nbsp,& nbsp,& nbsp,& nbsp,& nbsp,& nbsp,& nbsp,& nbsp,& nbsp,& nbsp,{<\/SPAN>\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,& nbsp,& nbsp,if(ex == null) \/\/ Vérifier si l'opération s'est terminée avec des erreurs\n&nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , {\n&nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , &nb sp , & nbsp , & nbsp , & nbsp , _model.SetMessageInfo(string.Format("Tuiles :{0} - Taille (ko) :{1 }"</ SPan >,< SPan style ="font-size :2b91af;background:white" >result.TileCount,result.Size/1024));</ SPan >\n< SPan style ="font-size :
background:white" >& nbsp;</ SPan >} \n                      else \n{ \n& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;_model.SetMessageInfo(string.Format(< spanstyle = " fontsize :-webkit-text-fill-color-mediumseagreen-background-white " >{0}</ span >< spanstyle = " fontsize :-webkit-text-fill-color-mediumseagreen-background-white " >{ex.Message}</ span >< spanstyle = " fontsize :-webkit-text-fill-color-mediumseagreen-background-white " > </ span >", ex.Message));</ span >\n& nbsp;</ span >} \n& nbsp;</ span >}, < spanstyle = " fontsize :-webkit-text-fill-color-blue-background-white " >TimeSpan</ span >< spanstyle = " fontsize :-webkit-text-fill-color-black-background-white " >.FromSeconds(5), </ span >< spanstyle = " fontsize :-webkit-text-fill-color-blue-background-white " >CancellationToken</ span >< spanstyle = " fontsize :-webkit-text-fill-color-black-background-white " >.None, exportTileCacheJobStatusProgress);</ span >< /PRE>< /P>& Nbsp; . Création du package de tuiles sur le serveur et téléchargement vers le client y compris la vérification du statut:< /P>< /P>< SPan Style = " Font Size :7。 Pt; Font Family :Consolas; Color :Blue; Background :White; ">var</ SPan >< SPan Style = " Font Size :7。 Pt; Font Family :Consolas; Color :Black; Background :White; ">downloadOptions = </ SPan >< SPan Style = " Font Size :7。 Pt; Font Family :Consolas; Color :Blue; Background :White; ">new</ SPan> < SPan Style = " Font Size :7。 Pt; Font Family :Consolas; Color :#2b91af; Background :White; ">DownloadTileCacheParameters</ SPan >( _exportMapPath )\n < SPan Style = " Font Size :7。 Pt; Font Family :Consolas; Color :Black; Background :White; ">{</ SPan>\n < SPan Style = " Font Size :7。 Pt; Font Family :Consolas; Color :Black; Background :White; ">& Nbsp;& Nbsp;& Nbsp;& Nbsp; OverwriteExistingFiles = </ SPan >< SPan Style = " Font Size :7。 Pt; Font Family :Consolas; Color :Blue; Background :White; ">true</ SPan>\n < SPan Style = " Font Size :7。 Pt; Font Family :Consolas; Color :Black; Background :White; ">};</ SPan>\n\n < SPan Style = " Font Size :7。 Pt; Font Family :Consolas; Color :Blue; Background :White; ">var</ SPan >< SPan Style = " Font Size :7。 Pt; Font Family :Consolas; Color :Black; Background :White; ">generateStatusCheckProgress = </ SPan >< SPan Style = " Font Size :7。 Pt; Font Family :Consolas; Color :Blue; Background :White; ">new</ SPan> < SPan Style = " Font Size :7。 Pt; Font Family :Consolas; Color:#2b91af,Background:White,">Progress</ Span ><< Span Style = += (p, q) =><\/SPAN><\/LI><\/OL>
{<\/SPAN>
si<\/SPAN> (q.Messages.Count < 1)<\/SPAN>
retourner<\/SPAN>;<\/SPAN>
_model.SetMessageInfo(<\/SPAN>string<\/SPAN>.Format(<\/SPAN>"<\/SPAN>{0}<\/SPAN>"<\/SPAN>, q.Messages[1].Description));<\/SPAN>
};<\/SPAN>
var<\/SPAN> downloadProgressChanged = <\/SPAN>new<\/SPAN> Progress<\/SPAN><<\/SPAN>ExportTileCacheDownloadProgress<\/SPAN>> ; (); < \/ SPAN >
< OL style = "list-style-type : lower-alpha ;" > < LI > < SPAN style = "font-size : 7.0pt ; font-family : Consolas ; color : black ; background : white ;" > downloadProgressChanged.ProgressChanged += (p, q) =>< \/ SPAN > < \/ LI > < \/ OL >
< SPAN style = "font-size : 7.0pt ; font-family : Consolas ; color : black ; background : white ;" > { < \/ SPAN >
& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; < SPAN style = "font-size : 7.0pt ; font-family : Consolas ; color : green ; background : white ;" > \/\ / faire quelque chose < \/ SPAN >
< SPAN style = "font-size : 7.0pt ; font-family : Consolas ; color : black ; background : white ;" > } ; < \/ SPAN >
< SPAN style = "font-size : 7.0pt ; font-family : Consolas ; color : blue ; background : white ;" > var < \/ SPAN >< SPAN style = "font-size : 7.0pt ; font-family : Consolas ; color : black ; background : white ;" > downloadTileCacheResult = < \/ SPAN >< SPAN style = "font-size : 7.0pt ; font-family : Consolas ; color : blue ; background : white ;" > await < \/ SPAN >< SPAN style = "font-size : 7.0pt ; font-family : Consolas ; color : black ; background : white ;" > _exportTileCacheTask.GenerateTileCacheAndDownloadAsync(< \/ SPAN >
< SPAN style = "font-size : 7.0pt ; font-family : Consolas ; color : black ; background : white ;" >& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; _generateTileCacheParameters , < \/ SPAN >
< SPAN style = "font-size : 7.0pt ; font-family : Consolas ; color : black ; background : white ;" >& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; downloadOptions , < \/ SPAN >< SPAN style = "font-size : 7.0pt;font-family : Consolas;color:#2b91af;background:white" > TimeSpan < \/ SPAN >< SPAN style = "font-size : 7.0pt;font-family : Consolas;color:black;background:white" > .FromSeconds(5), < \/ SPAN >< SPAN style = "font-size : 7.0pt;font-family : Consolas;color:#2b91af;background:white" > CancellationToken < \/ SPAN >< SPAN style = "font-size : 7.0pt;font-family : Consolas;color:black;background:white" > .None, generateStatusCheckProgress , < \/ SPAN >
< SPAN style = "font-size : 7.0pt;font-family : Consolas;color:black;background:white" >& nbsp         downloadProgressChanged);< \/ SPAN >< \/ PRE >< P >< \/ P >< P > Wenn tout s'est bien passé, nous avons maintenant une carte de base hors ligne en tant que Tile Package stocké localement sur notre appareil.< \/ P >< P >< \/ P >< P >< \/ P >< H2 id = "toc-hId-329411284" id = "toc-hId-329411284" > Implémentation des cartes de base hors ligne dans ArcGIS Runtime < \/ H2 >< P >< \/ P >< P > L'intégration des cartes de base hors ligne dans la carte est relativement simple. Dans tous les SDK ArcGIS Runtime, il existe l'objet ArcGisLocalTiledLayer. Nous lui donnons le chemin vers notre Tile Package et l'ajoutons ensuite à la LayerCollection de la carte.< \/ P >< P >< \/ P >< P > Voici comment cela se fait (ArcGIS Runtime SDK pour .NET) :< \/ P >< P >< \/ P >< PRE class= "lia-code-sample line-numbers language-none" >var arcGisLocalTiledLayer = new ArcGISLocalTiledLayer(@c:\temp\basemap.tpk);
var offlineMap = new Map();
offlineMap.Layers.Add(arcGisLocalTiledLayer);
var mapView = new MapView { Map = offlineMap };
CurrentEsriMapView = mapView;Informations complémentaires
- Page d'accueil pour les développeurs ArcGIS
- Blog avec plus d'informations sur ArcGIS Runtime et le mode hors ligne
- Blog spécialement sur les données vectorielles hors ligne
- Application exemple Collector Light sur GitHub, les extraits du blog en sont tirés