En règle générale, les entités sont symbolisées sur une carte en fonction de leurs valeurs attributaires. Les villes symbolisées par population ou les routes symbolisées par classifications routières en sont des exemples. Il est en revanche parfois nécessaire de symboliser les entités par valeurs agrégées calculées. Les valeurs minimales, maximales, moyennes et totales sont des exemples de valeurs calculées. Ces valeurs sont calculées à partir des attributs d’un ensemble agrégé de valeurs.
Scénarios des données temporelles
La symbolisation des données avec des valeurs agrégées est utile dans deux scénarios principaux.
Données de station avec une série chronologique
Il s'agit de données de quantité évolutive dont l'emplacement est fixe au fil du temps. Les entités sont observées, collectées ou prévues à ces emplacements au fil du temps à intervalles réguliers ou irréguliers. La température, les précipitations, le niveau d'eau, la salinité et le débit sont par exemple mesurés dans des stations météorologiques ou dans des stations de surveillance le long des cours d'eau.
Vous pouvez symboliser les entités de stations météorologiques en fonction des précipitations totales de juillet ou en fonction de la température annuelle la plus élevée ou la plus basse. Pour visualiser les données de cette manière, modélisez-les de façon à stocker les emplacements constants dans une classe d'entités et les données observées dans une table associée, avec une attribution date-heure.
Données rares avec horodatages
Il s'agit des entités qui représentent des événements se produisant à un moment unique. La localisation des tornades, les adresses de clients, les patients admis à l'hôpital et les lieux de crimes en sont des exemples.
Vous pouvez afficher la perte totale liée aux tornades, ou le total des achats, ou encore le nombre total de patients agrégés en entités surfaciques, telles que des provinces, des secteurs ou d'autres limites administratives. Pour visualiser les données de cette manière, modélisez-les de façon à stocker les emplacements dans une classe d'entités avec une attribution date-heure.
Préparer les données pour l'affichage agrégé
Pour afficher des entités avec des résultats agrégés, tenez compte des points suivants :
- Type d'agrégation : déterminez si vous voulez afficher les valeurs totales, minimales, maximales, moyennes ou d'autres mesures.
- Entités d'affichage : déterminez quelles entités affichent les résultats agrégés. Il peut s'agir des entités avec les observations mesurées ou d'autres entités. Vous pouvez par exemple afficher les précipitations annuelles totales à chaque station météorologique ou afficher les précipitations annuelles totales (mesurées à chaque entité ponctuelle de station météorologique) en fonction des limites de comté ou de bassin versant.
- Paramètres de requête :
- Heure : déterminez la durée et l'intervalle temporel en fonction desquels afficher les résultats agrégés. Utilisez le curseur temporel pour les définir dynamiquement. Par exemple, pour les résultats agrégés quotidiens, définissez à la fois la durée et l'intervalle temporel sur le curseur temporel sur un jour.
- Plage : vous pouvez agréger les résultats pour un sous-ensemble d'entités uniquement. Par exemple, pour agréger les mesures de salinité entre 0 et 50 mètres et entre 50 et 75 mètres, utilisez un paramètre de plage et le curseur de plage.
- Filtres de requête : pour afficher les modèles des données de criminalité en agrégeant le type de crime dans chaque circonscription électorale, établissez un filtre de requête à l'aide d'un paramètre discret.
Exemple de résultats agrégés
Prenons une classe d’entités nommée weather_stations qui stocke les emplacements des stations météorologiques. Chaque entité station est identifiée de manière unique par la valeur stockée dans le champ station_id. Ce champ permet de lier les stations aux observations associées dans une table nommée observed_rainfall. Cette table contient les enregistrements des précipitations observées collectées au fil du temps au même emplacement. Elle comprend un champ station_idqui permet d’établir un lien avec la classe d’entités des stations, un champ rainfall_cmqui stocke les précipitations quotidiennes en centimètres et un champ collection_datequi stocke la date des précipitations.
Calculer les résultats agrégés dynamiquement avec des paramètres de couches de requête
L'objectif consiste à calculer les précipitations totales pour une période donnée (par exemple, un mois, un an ou n'importe quelle durée) à chaque station, et à symboliser les stations selon les précipitations totales calculées pour cette durée. Deux approches permettent d'accomplir cette tâche.
La première approche consiste à calculer les résultats agrégés dynamiquement, à l’aide des méthodes simples ou avancées ci-dessous, en définissant les paramètres de la couche de requête. La deuxième approche consiste à précalculer les résultats en utilisant des outils de géotraitement ou des fonctions de base de données.
Exécuter l’outil de géotraitement Créer une couche de requête d’agrégation
L’outil Créer une couche de requête d’agrégationpeut être utilisé afin de créer une couche de requête et définir les paramètres de requête pour afficher vos résultats. Cette approche est la plus souple des deux et garantit l’affichage des résultats les plus récents. Cet outil utilise les fonctions d’agrégation SQL de la base de données et les fonctionnalités de jointure pour synthétiser, agréger, et filtrer les informations.
L’outil Créer une couche de requête d’agrégation vous permet d’activer les données temporelles sur la couche de requête pour voir de manière dynamique différents intervalles de temps sans qu’il soit nécessaire de prédéfinir et de calculer un résultat pour chaque plage temporelle souhaitée.
- La carte étant ouverte, dans l’onglet Analysis (Analyse), dans le groupe Geoprocessing (Géotraitement), cliquez sur Tools (Outils).
- Dans la fenêtre Geoprocessing (Géotraitement), sur l’onglet Toolboxes (Boîtes à outils), cliquez sur Data Management tools (Outils de gestion des données) > Layers and Table Views (Couches et vues tabulaires) > Make Aggregation Query Layer (Créer une couche de requête d’agrégation). Cliquez sur l’outil pour l’ouvrir.
- Suivez le scénario d’exemple pour définir les propriétés de l’outil, comme suit :
- Sur l’onglet Parameters (Paramètres), définissez le paramètre Target Feature Class (Classe d’entités cible) sur la classe d’entités weather_stations.
- Définissez observed_rainfall comme paramètre de la Summary Table (Table de synthèse).
- Définissez les champs de jointure cibles et associés sur station_id, et saisissez un nom de couche en sortie.
- Sélectionnez SUM comme type d’agrégat du champ de synthèse. Sous Field Name(s) [Nom(s) de champs], sélectionnez rainfall_cm.
- Sous Parameter Definitions (Définitions des paramètres), sélectionnez Plage comme type de paramètre, et saisissez un nom, par exemple, timeWindow. Ce paramètre active les données temporelles sur la couche de requête.
- Définissez le paramètre Field or Expression (Champ ou expression) sur le champ collection_date.
- Définissez le paramètre Data Type (Type de données), sur Date.
- Révisez et définissez tout autre paramètre selon les besoins. Certains paramètres sont définis automatiquement en fonction des choix ci-dessus.
- Exécutez l'outil. La couche de requête temporelle est ajoutée à la carte et à la fenêtre Contents (Contenu).
- Ouvrez la table attributaire de la couche de requête. Un champ supplémentaire nommé SUM_rainfall_cm affiche les précipitations totales à l’aide de tous les enregistrements.
Vous pouvez activer le curseur temporel et accéder à n’importe quel intervalle temporel. Lorsque vous naviguez, les valeurs sont recalculées en fonction de l’intervalle temporel actuel de la carte. Vous pouvez également utiliser des attributs pour symboliser et étiqueter les entités ponctuelles des stations météorologiques. Pour en savoir plus sur cet outil, reportez-vous à la rubrique Créer une couche de requête d’agrégation.
Créer une couche de requête manuellement
Dans certains cas, il peut être nécessaire de créer la couche de requête manuellement si la requête utilise des mots-clés ou des paramètres avancés. Voici quelques exemples :
- Paramètres discrets prédéfinis, tels que view_scale et view_extent
- Requêtes SQL comportant plusieurs jointures ou une jointure externe
Cette approche présente des inconvénients. En voici quelques exemples :
- Une charge supplémentaire peut peser sur la base de données, les résultats agrégés étant calculés chaque fois que vous accédez à la carte, utilisez le curseur temporel ou ouvrez la table attributaire. Cette charge supplémentaire est négligeable pour les jeux de données peu volumineux ou lorsque la fenêtre temporelle renvoie des sous-ensembles relativement petits, y compris avec des jeux de données volumineux.
- Avec cette approche, les données doivent être stockées dans une base de données d’entreprise. Cette approche ne peut pas être utilisée avec des géodatabases fichier ou des fichiers de formes.
Si vos données sont mises à jour fréquemment, placez-les dans une base de données d'entreprise et acceptez la charge supplémentaire sur la base de données. Veillez à ce que les pratiques recommandées en matière de maintenance de base de données soient suivies, comme pour la création d’index.
Pour créer une couche de requête manuellement, procédez comme suit :
- Dans l’onglet Map (Carte), dans le groupe Layer (Couche), ouvrez le menu Add Data (Ajouter des données) et cliquez sur Query Layer (Couche de requête) .
- Dans la zone Requête, construisez une requête SQL pour renvoyer le résultat agrégé.
Sélectionnez les précipitations totales pour chaque station à partir de la table observed_rainfall.
SELECT station_id, SUM(rainfall_cm) AS total_rainfall FROM observed_rainfall GROUP BY station_id
Joignez les résultats à la classe d’entités weather_stations. Cette opération renvoie les précipitations totales à l’aide de tous les enregistrements de la table observed_rainfall.
SELECT w.*, r.total_rainfall FROM weather_stations AS w INNER JOIN (SELECT station_id, SUM(rainfall_cm) AS total_rainfall FROM observed_rainfall GROUP BY station_id) AS r ON w.station_id = r. station_id
Définissez la durée dans la clause WHERE pour calculer les résultats agrégés entre le 1er juin 2016 et le 30 juin 2016.
SELECT w.*, r.total_rainfall FROM weather_stations AS w INNER JOIN (SELECT station_id, SUM(rainfall_cm) AS total_rainfall FROM observed_rainfall WHERE collection_date >= '6/1/2016' AND collection_date <= '6/30/2016' GROUP BY station_id) AS r ON w.station_id = r.station_id
- Cliquez sur Next (Suivant) pour exécuter les instructions restantes dans la boîte de dialogue New Query Layer (Nouvelle couche de requête) et ajouter la couche de requête à la carte actuelle.
- Symbolisez la couche de façon à afficher les stations météorologiques avec les précipitations totales à chaque emplacement pour juin 2016. Vous pouvez par exemple redimensionner les entités en fonction des précipitations totales à l’aide des symboles gradués ou proportionnels ou utiliser des variations de couleur pour chaque station, à l’aide des symboles de couleur gradués ou non classés.
Si vous souhaitez modifier la durée, par exemple, pour générer la même visualisation mais du 1er août au 15 août, vous devez ouvrir la source de la couche de requête et modifier la clause WHERE. Il est toutefois préférable d’utiliser le curseur temporel pour appliquer ce changement. Pour modifier la clause WHERE à l’aide du curseur temporel, vous devez utiliser les paramètres de l’instruction SQL.
Pour modifier la durée, procédez comme suit :
- Cliquez avec le bouton droit sur la couche dans la fenêtre Contenu et sélectionnez Propriétés .
- Sous l’onglet Source, dans la ligne Query (Requête) de la table, cliquez sur Edit Query (Modifier la requête) . La requête s'affiche dans la zone de texte Requête.
Conseil :
Pour faciliter la lecture du texte de la requête, vous pouvez l’agrandir en appuyant sur la touche Ctrl et en tournant la molette de la souris vers l’avant.
- Remplacez WHERE collection_date >= '6/1/2016' AND collection_date <= '6/30/2016' par un paramètre de plage. Les paramètres de plage sont déclarés avec le préfixe ::r:.
La clause WHERE est remplacée par un paramètre de plage nommé TimeVar.
SELECT w.*, r.total_rainfall FROM weather_stations AS w INNER JOIN (SELECT station_id, SUM(rainfall_cm) AS total_rainfall FROM observed_rainfall WHERE ::r:TimeVar GROUP BY station_id) AS r ON w.station_id = r.station_id
- Les paramètres apparaissent en gras dans la requête SQL et un bouton Edit (Modifier) s’affiche en regard. Cliquez sur le bouton pour définir les propriétés du paramètre comme suit :
- Pour Field or Expression (Champ ou expression), sélectionnez collection_date.
- Pour Type de données, choisissez Date.
- Sélectionnez Default values (Valeurs par défaut).
- Définissez la plage de valeurs par défaut du 6/1/2016 au 6/30/2016.
- Cliquez sur Done (Terminé).
- Dans la boîte de dialogue Modifier la couche de requête, cliquez sur Valider pour vérifier qu'aucune erreur n'est présente.
La couche est désormais temporelle, car le paramètre de plage fait référence à un champ date-heure. Les couches temporelles peuvent être contrôlées avec le curseur temporel. Vous pouvez par exemple choisir une durée à l'aide du curseur temporel afin que les stations météorologiques s'affichent avec les précipitations totales calculées dynamiquement pour cette durée.
- Pour le total mensuel, définissez Période actuelle et Intervalle sur un mois.
- Pour une moyenne de roulement, définissez Période actuelle sur un mois et Intervalle sur un jour. Dans ce cas, chaque fois que vous cliquez sur un intervalle dans le curseur temporel, il passe au jour suivant et affiche les résultats pour un mois à partir de ce jour.
Conseil :
Dans la table attributaire, sous l'onglet Afficher, activez les filtres Heure et Etendue pour afficher uniquement les entités qui sont visibles sur la carte. Sinon, les résultats sont calculés pour toutes les entités et à partir de la table entière, ce qui risque de prendre du temps si la table comporte de nombreux enregistrements.
Précalculer les résultats
Cette approche est idéale si vous utilisez des données mises à jour peu fréquemment et qu'une durée prédéfinie est acceptable. Dans ce cas, précalculez les résultats agrégés pour diminuer la charge sur la base de données chaque fois que la carte est actualisée, qu'une table attributaire est ouverte ou que la couche est interrogée.
Les inconvénients de cette approche sont notamment :
- Vous devez réaliser ces étapes à chaque mise à jour des données.
- Cette approche manque de souplesse. Pour visualiser les entités avec des résultats hebdomadaires et annuels, par exemple, vous avez besoin de deux tables distinctes : une pour stocker les résultats agrégés sur une semaine et l'autre pour stocker les résultats annuels.
- Vous ne pouvez pas recourir au curseur temporel avec cette approche.
Vous pouvez précalculer les résultats agrégés de deux manières.
Utiliser le géotraitement
L'exemple suivant explique comment précalculer les précipitations moyennes mensuelles pour chaque station météorologique à l'aide des outils de géotraitement.
- Ajoutez un nouveau champ d’entier à la classe d’entités nommé monthpour représenter le mois.
- Utilisez l’outil Calculer un champ pour mettre à jour les enregistrements.
Définissez le paramètre Expression sur month = getMonth(!DateTime!).
Saisissez le texte suivant dans le paramètre Bloc de code. Dans cet exemple, v est la valeur de l’attribut datetime.
from datetime import datetime def getMonth(v): d = datetime.strptime(v, "%m/%d/%Y") return d.month
- Utilisez l’outil Résumés statistiques pour créer une table avec des résultats récapitulatifs. Dans cet exemple, le résumé correspond aux précipitations totales mensuelles pour chaque station. Saisissez les paramètres suivants :
- Champ statistique : choisissez le champ à récapituler. Dans cet exemple, il s'agit du champ des précipitations.
- Type de statistique : choisissez SOMME pour calculer les précipitations totales.
- Case Field (Champ de récapitulation) : optez pour les champs station_idet month.
- Utilisez l’outil Champ de jointure ou l’outil Ajouter une jointure pour joindre des enregistrements de la table de synthèse à la couche d’entités.
- Affichez la couche sur la carte avec un ensemble de définition pour présenter les résultats d'un mois donné. Pour afficher les résultats du mois de mai uniquement, utilisez par exemple un ensemble de définition où Month = 5.
Utiliser les fonctions de base de données
Si vos données sont stockées dans une base de données d'entreprise, vous pouvez utiliser une requête SQL pour précalculer les résultats agrégés ou récapitulatifs et les enregistrer dans une table distincte.
- Exécutez la requête SQL suivante dans un client de base de données. Elle calcule la moyenne mensuelle pour chaque station météorologique. La requête suppose qu'un champ stocke des entiers pour représenter un mois.
SELECT station_id, month, SUM(rainfall_cm) AS total_rainfall INTO avg_monthly_rainfall FROM observed_rainfall GROUP BY station_id, month
- Si la base de données est une géodatabase, inscrivez la table dans la géodatabase pour optimiser les performances et joignez la table à la couche d'entités.
Cliquez sur la couche d’entités dans la fenêtre Contents (Contenu). Dans l’ensemble d’onglets Feature Layer (Couche d’entités), cliquez sur l’onglet Data (Données). Dans le groupe Relationship (Relation), cliquez sur Joins (Jointures) et sur Add Join (Ajouter une jointure) .
- S'il ne s'agit pas d'une géodatabase, vous devez choisir une des stratégies suivantes :
- Créez une vue dans la base de données qui joint la table contenant les géométries à la table de synthèse qui vient d'être créée.
- Créez une couche de requête et définissez la jointure dans la source de la couche de requête.
- Affichez la couche sur la carte avec un ensemble de définition pour présenter les résultats d'un mois donné. Pour afficher les résultats du mois de mai uniquement, utilisez par exemple un ensemble de définition où Month = 5.
Conseil :
Vous pouvez utiliser le planificateur Windows afin de planifier une tâche s'exécutant à intervalle régulier pour précalculer les résultats.
Vous avez un commentaire à formuler concernant cette rubrique ?