Modalités d'utilisation du cache de carte par les clients
Cette rubrique se compose de trois parties. La première section porte sur la façon dont les applications ArcGIS accèdent aux tuiles et les utilisent dans un cache de carte. La deuxième partie explique comment ces applications stockent les tuiles pour les utiliser ultérieurement. La troisième section explique comment améliorer les performances d'affichage des tuiles en ajustant la durée pendant laquelle un navigateur Web réutilisera les tuiles dans son cache local. La dernière section décrit comment superposer des caches de carte dans les applications ArcGIS.
Comment les applications accèdent au cache et l'utilisent
Lorsque vous définissez une structure de tuilage pour votre service de carte, il essaie immédiatement d'utiliser le cache. Toutes les applications ArcGIS capables d'afficher un service de carte utilisent le cache, même si la façon dont les tuiles sont récupérées et utilisées varie selon les applications.
Applications Web
Lorsque vous développez avec les API ArcGIS pour JavaScript, Flex et Silverlight, vous utilisez une classe spécifique pour indiquer que vous vous connectez à un service de carte tuilé (mis en cache). Par exemple, avec l'API JavaScript, vous utilisez ArcGISTiledMapServiceLayer pour vous connecter à un service mis en cache. Lorsque vous utilisez le service mis en cache, les tuiles sont récupérées du répertoire de cache par des appels REST vers le service de carte. La demande de tuiles prend la forme http://<URL du service de carte>/tile/<niveau>/<ligne>/<colonne>.
Si vous affichez un seul service mis en cache dans une application Web et que vous effectuez un panoramique sur une zone qui ne contient aucune tuile, l'application n'affiche pas d'image dynamique et rien n'apparaît. Pour être certain de voir une carte lorsque vous effectuez un panoramique sur une zone non mise en cache, activez la mise en cache à la demande.
Si la carte apparaît plus lentement qu'elle ne le devrait, examinez les URL des images de la carte pour vérifier que l'application récupère des tuiles. Une manière consiste à ouvrir l'application dans Mozilla Firefox et à cliquer sur Firefox > Développeur Web > Console Web. Lorsque la console apparaît, cliquez sur le bouton Suivant et effectuez un zoom ou un déplacement sur la carte.
Si les URL que vous voyez ressemblent à ceci, votre application réussit à obtenir des tuiles à partir de demandes REST :
http://gisserver.domain.com:6080/arcgis/rest/services/myService/MapServer/tile/10/1723/3495.jpg
Si les URL que vous voyez suivent un autre format pour vos cartes de type image, votre application récupère la tuile d'une manière moins efficace ou le cache n'est pas utilisé.
ArcMap
Pour ajouter des services de carte mis en cache dans ArcMap, utilisez le bouton Ajouter des données tout comme vous le feriez pour n'importe quel autre service de carte. Vous pouvez afficher un cache dans ArcMap de deux façons :
- Accédez au cache par l'intermédiaire d'un service de carte. Pour afficher un cache de cette façon, accédez au serveur SIG et au service de carte utilisé pour créer le cache. Dans ce scénario, ArcMap établit une connexion initiale au serveur SIG pour déterminer si le service possède un cache. ArcMap récupère alors des tuiles du répertoire de cache dans le système de fichiers du serveur.
- Accédez au cache sous forme de jeu de données raster. Pour afficher un cache de cette façon, accédez au répertoire qui contient les tuiles en cache et choisissez d'ajouter le jeu de données à ArcMap. Le cache est représenté avec la même icône que celle utilisée pour ajouter tous les autres rasters à l'aide du bouton Ajouter des données. Un cache auquel vous avez accédé sous forme de raster est en lecture seule et ne peut pas être interrogé. L'avantage de ce type de cache est qu'il n'est pas lié à un service de carte et qu'il peut être affiché lorsqu'il est déconnecté du serveur, tant que vous pouvez encore accéder au répertoire de cache.
Lorsqu'une demande est effectuée pour une tuile à une échelle qui correspond exactement à un niveau d'échelle dans le cache, le service de carte renvoie directement la tuile. La plupart du temps, les demandes ne correspondent pas exactement aux niveaux d'échelle du cache. Dans ce cas, ArcMap demande généralement la tuile du niveau d'échelle suivant le plus proche et la ré-échantillonne pour qu'elle corresponde à l'échelle demandée. Ce rééchantillonnage est encore beaucoup plus rapide que la génération dynamique d'une tuile. Toutefois, l'image qui en résulte est différente de la tuile originale. En raison de ce rééchantillonnage, les étiquettes de carte mises en cache peuvent être difficiles à lire à certaines échelles dans ArcMap. Pour optimiser les résultats, affichez la carte aux échelles (ou à des échelles proches) de celles à partir desquelles le cache a été créé.
ArcGlobe et ArcGIS Explorer
ArcGlobe et ArcGIS Explorer peuvent lire des caches 2D et les draper à la surface du globe. Vous obtiendrez des performances optimales si vous construisez le cache avec la structure de tuilage ArcGIS Online/Google Maps/Bing Maps. Si vous ne pouvez pas utiliser l'une de ces structures de tuilage, vous obtiendrez des performances optimales en faisant appel aux services de globe.
Vous pouvez par exemple ajouter un service de carte à ArcGlobe lorsque vous avez créé un cache de carte 2D et que vous souhaitez créer un cache de globe 3D identique à partir du cache 2D. Dans ce scénario, vous souhaitez simplement générer le cache et non pas accéder au globe.
Amélioration des performances d'affichage des services de carte mis en cache
Lorsque les clients envoient des demandes à ArcGIS for Server pour afficher un service de carte, la réponse du serveur est généralement mise en cache par le navigateur et réutilisée pendant un certain temps. Ce comportement aide ArcGIS for Server à optimiser les performances d'affichage pour votre service de carte. Toutefois, selon la manière dont votre service de carte et les données qui lui sont associées sont utilisés dans les applications, vous pouvez envisager d'ajuster la durée pendant laquelle le navigateur utilisera une réponse figurant dans son cache. Pour cela, il convient d'ajouter une propriété nommée cacheControlMaxAge dans le fichier JSON (JavaScript Object Notation) du service.
Utilisation de la propriété cacheControlMaxAge
Les réponses des services de carte ArcGIS for Server incluent un en-tête ETag (balise d'entité) et Cache-Control. La valeur de l'en-tête ETag identifie de façon unique la réponse. L'en-tête Cache-Control possède une valeur d'âge maximal qui informe le navigateur de la durée maximale pendant laquelle il peut réutiliser une réponse à partir du cache du navigateur. Cette valeur est contrôlée par la propriété cacheControlMaxAge.
Lorsqu'une demande est répétée et que l'âge maximal du cache n'a pas encore expiré, le navigateur utilise la réponse mise en cache sans envoyer la demande au serveur. Si l'âge maximal a expiré, le navigateur doit envoyer la demande au serveur et définir un en-tête IF-NONE-MATCH avec une valeur ETag associée correspondant à la réponse présente dans le cache. ArcGIS for Server évalue la demande et utilise la valeur ETag pour déterminer si la réponse a changé. Si la réponse du serveur diffère de la copie stockée dans le navigateur, le serveur envoie une réponse entièrement nouvelle au navigateur. Si la réponse est identique à la copie du navigateur, le serveur avertit le navigateur de continuer à utiliser la réponse présente dans son cache.
Définition de la valeur de la propriété cacheControlMaxAge
En tant qu'administrateur ArcGIS for Server, vous pouvez définir la propriété cacheControlMaxAge afin de spécifier la durée pendant laquelle un navigateur est autorisé à utiliser une réponse mise en cache. Le fait de réduire les éventualités où ArcGIS for Server doit envoyer une réponse complète permet d'améliorer l'efficacité du cache de votre navigateur, de favoriser l'optimisation de vos applications et d'économiser la bande passante de votre réseau.
Pour les services de carte mis en cache qui n'autorisent pas les clients à mettre les tuiles dans le cache local, la valeur par défaut est 0. Cela signifie que le navigateur renverra toujours une demande et qu'ArcGIS for Server traitera cette demande et enverra une réponse complète au navigateur si le contenu a changé. Cette valeur fonctionne correctement pour la plupart des applications.
Pour les services de carte mis en cache qui autorisent les clients à mettre les tuiles dans le cache local, la valeur par défaut est de 86 400 secondes (1 jour). Cela signifie que si une demande est répétée dans un délai d'un jour, le navigateur utilisera la réponse présente dans son cache.
Pour les services de carte mis en cache dans lesquels la carte ou les données ne changent pas fréquemment, il est recommandé d'augmenter la valeur par défaut à 30 jours (2 592 000 secondes) ou plus pour réduire au maximum le trafic réseau.
Pour ajouter la propriété cacheControlMaxAge à votre service et spécifier sa valeur par défaut, procédez comme suit :
- Dans un navigateur Web, ouvrez le répertoire d'administrateur d'ArcGIS for Server et connectez-vous avec un utilisateur doté des privilèges d'administrateur. L'URL est au format suivant : http://gisserver.domain.com:6080/arcgis/admin.
- Cliquez sur services et sélectionnez le service de carte à modifier dans la liste Services. Si votre service n'apparaît pas dans cette liste, il est peut-être dans un répertoire sous le dossier racine.
- Dans la page Service - <nom du service> (<type de service>), faites défiler l'affichage vers le bas et cliquez sur modifier.
- Dans la boîte de dialogue Propriétés du service, recherchez la section "properties" (propriétés) du fichier JSON du service.
- Ajoutez la propriété cacheControlMaxAge dans cette section et spécifiez sa valeur (en secondes). Par exemple :
"properties": { "cacheControlMaxAge": "2592000",
- Cliquez sur Enregistrer les mises à jour.
- Dans la page Service - <nom du service> (<type de service>), vérifiez que la propriété cacheControlMaxAge et la valeur que vous lui avez attribuée figurent dans la section Propriétés.
Mise en cache locale des couches dans ArcMap, ArcGIS Explorer et ArcGlobe
ArcMap, ArcGIS Explorer et ArcGlobe conservent tous des caches locaux des tuiles auxquelles vous avez accédé. Lorsque vous revenez sur ces zones en effectuant un zoom et un déplacement, l'application utilise le cache local et n'a pas à récupérer à nouveau les tuiles du serveur.
Vous pouvez choisir d'enregistrer le cache local sur le disque pour des sessions futures ou d'utiliser le cache local pour la session courante uniquement.
Vous pouvez également choisir de ne pas mettre en cache localement les tuiles. Bien que cela vous fasse perdre les avantages liés à la mise en cache locale, vous pouvez ainsi être certain de toujours obtenir la tuile la plus récente du serveur.
Il est possible que l'administrateur de serveur ait désactivé la mise en cache locale de la couche, ce qui vous permet également de toujours récupérer la tuile la plus récente. Dans ce cas, les autres options d'enregistrement du cache localement ne sont pas disponibles.
Si l'administrateur de serveur met à jour une zone du cache de serveur que vous avez déjà affichée, vous devez effacer votre cache local pour voir les changements. ArcMap, ArcGIS Explorer et ArcGlobe ne peuvent pas détecter si un cache a été mis à jour. Si vous êtes administrateur de serveur, vous devez avertir vos utilisateurs que des données actualisées sont disponibles afin qu'ils sachent qu'ils doivent effacer leur cache.
Superposition de caches
Lorsque vous concevez des caches de carte qui seront superposés à d'autres caches de carte, vous devez prendre en compte certains facteurs importants en fonction de l'application que vous utiliserez pour afficher les caches.
Superposition de caches de carte dans des applications Web
Pour les applications Web, telles que celles qui sont intégrées aux API ArcGIS pour JavaScript, Flex et Silverlight, le système de coordonnées et la taille des tuiles doivent correspondre lorsque vous superposez des caches. Il est également recommandé de faire correspondre autant d'échelles que possible.
La méthode la plus simple pour parvenir à ce résultat est de faire correspondre les structures de tuilage pour les deux caches, puis de créer uniquement les tuiles aux échelles appropriées à chaque cache. De cette façon, vous vous assurez que vous avez fait correspondre le système de coordonnées et la taille des tuiles et que le logiciel reconnaît que les deux caches ont des échelles en commun.
Superposition de caches de carte dans ArcMap
Vous pouvez superposer n'importe quel nombre de caches de carte dans ArcMap. Les caches n'ont pas besoin d'avoir les mêmes structures de tuilage ou projections. Toutefois, en raison du rééchantillonnage et de la reprojection effectués par ArcMap, l'utilisation de structures de tuilage et de projections équivalentes peut contribuer à l'amélioration des performances et de la qualité esthétique de votre carte.
Forcer un affichage dynamique
Il se peut que vous souhaitiez obliger le service à ignorer le cache et à effectuer un affichage dynamique, même si des tuiles sont disponibles à certains niveaux. Supposons, par exemple, que vous développiez une application Web avec les API WebArcGIS. Vous possédez une carte mise en cache à partir des niveaux de zoom de 0 à 15, mais qui doit être affichée dynamiquement à partir des niveaux 16 à 19. Cela peut être le cas si vous souhaitez afficher des données temps réel à grande échelle ou si la carte couvre une surface trop vaste pour être mise en cache à grande échelle.
La solution consiste alors à activer les couches dynamiques sur le serveur et à préciser dans vos demandes de carte, à des échelles comprises entre 16 et 19, que vous souhaitez utiliser les couches dynamiques. Dans le cas contraire, le service renverra une carte créée à partir des tuiles disponibles, laquelle sera vide dans les zones dépourvues de tuiles.