Agréger des valeurs dans les entités associées

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.
    Les paramètres de requête sont facultatifs dans ce workflow. Reportez-vous à la rubrique Définir des paramètres dans une couche de requête pour savoir comment ajouter des paramètres de plage et des filtres à l'aide des paramètres discrets.

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é de 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_id qui permet d’établir un lien avec la classe d’entités des stations, un champ rainfall_cm qui stocke les précipitations quotidiennes en centimètres et un champ collection_date qui stocke la date des précipitations. 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.

Calculer les résultats agrégés dynamiquement avec des paramètres de couches de requête

Cette approche est la plus souple des deux et garantit que les résultats les plus récents sont toujours affichés. Vous utilisez les fonctionnalités de jointure et les fonctions d'agrégation SQL de la base de données. Dans ArcGIS Pro, vous devez créer une couche de requête.

Cette approche présente néanmoins des inconvénients. En voici quelques exemples :

  • Une charge supplémentaire sur la base de données, car les résultats agrégés sont calculés chaque fois que vous accédez à la carte, utilisez le curseur temporel ou ouvrez la table attributaire.
  • 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.

  1. Sous l'onglet Carte du groupe Couche, ouvrez le menu Ajouter des données et cliquez sur Couche de requête.
  2. 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
  3. Cliquez sur Suivant pour suivre les instructions restantes dans la boîte de dialogue Nouvelle couche de requête et ajouter la couche de requête à la carte actuelle.
  4. 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. Cette tâche étant complexe, il est 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.

  1. Cliquez avec le bouton droit sur la couche dans la fenêtre Contenu et sélectionnez Propriétés Propriétés.
  2. Sous l'onglet Source, dans la ligne Requête de la table, cliquez sur Modifier la couche de requête Mettre à jour les métadonnées. La requête s'affiche dans la zone de texte Requête.
    Astuce :

    Pour faciliter la lecture du texte de la requête, vous pouvez l'agrandir en appuyant sur la touche Ctrl tout en faisant défiler vers l'avant la molette de la souris.

  3. 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
  4. Les paramètres apparaissent en gras dans la requête SQL et une icône Mettre à jour les métadonnées s'affiche en regard. Cliquez sur l'icône pour définir les propriétés du paramètre comme suit :
    • Champ ou expression : collection_date
    • Type de données : date
    • Valeurs par défaut : activées
    • Plage de valeurs par défaut : 6/1/2016 sur 6/30/2016
  5. Cliquez sur Done (Terminé).
  6. 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.

Astuce :

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.

  1. Ajoutez un nouveau champ d’entier à la classe d’entités month pour représenter le mois.
  2. 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
  3. 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_id et month.
  4. 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.
  5. 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.

  1. 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
  2. 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.

    Sélectionnez la couche d'entités dans la fenêtre Contenu. Sous l'onglet Couche d'entités, sous l'onglet Données, dans le groupe Relation, cliquez sur Jointures et sur Ajouter une jointure.

  3. 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.
  4. 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.
Astuce :

Vous pouvez utiliser le planificateur Windows afin de planifier une tâche s'exécutant à intervalle régulier pour précalculer les résultats.

Rubriques connexes