banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GeoDataDays 2025

#1 Wed 16 July 2025 22:17

JP
Juste Inscrit !
Date d'inscription: 16 Jul 2025
Messages: 4

QGIS: Calcul d elts selectionnes dans fenetre temporelle glissante

Bonjour.
J'ai une couche de points représentant des événements. Chacun possède une date et heure de début et de fin (dans des colonnes séparées). Ces événements subissent plusieurs traitements dans un modèle.
Je suis bloqué sur l'étape d'une calculatrice de champ avec laquelle je souhaite faire ceci: je veux ajouter une colonne à ma table de points (qui est l'output de l'étape précédente du modèle) dans laquelle je mets le nombre d'événements compris dans une fenêtre temporelle "élargie" autour des date/heure de début/fin de l'événement traité (typiquement 1 minute avant le début et 1 minute après la fin de l'événement. En fait c'est comme un calcul du nombre d'événements temporels "voisins".
Il faudrait que pour chaque point, le compte des candidats contenus dans cette fenêtre temporelle variable se fasse sur l'ensemble de la table. Pour le moment, le seul compte que j'obtiens concerne l'ensemble des événements de la table (avec l'expression "aggregate, 'count'")
Je suis en cours de prise en main de Qgis et j'avoue que je patine. Quelle est le meilleur moyen d'y parvenir ?
Merci de votre aide et suggestions.

Hors ligne

 

#2 Thu 17 July 2025 14:44

bbk9
Participant occasionnel
Date d'inscription: 7 Jan 2022
Messages: 32

Re: QGIS: Calcul d elts selectionnes dans fenetre temporelle glissante

Bonjour,

je ne sais pas faire ça dans QGIS mais la question m’a intéressé et j’ai trouvé une solution avec R (en espérant que vous soyez un peu familier de ce langage). J’ai adapté la solution proposée ici à votre question, et ça sembre marcher. Dans ce cas vous pourriez modifier vos données à l’aide de R avant de les charger dans qgis.

Voici le code modifié pour coller à votre cas :

Code:

library(dplyr)
library(lubridate)
library(purrr)

datateste <- data.frame(
  id = 1:10,
  machine_id = c("A", "B", "C", "A", "A", "B", "C", "B", "A", "D"),
  start_time = c("01/12/2021  00:00:00", "01/12/2021  04:15:10", "01/12/2021  04:45:04", "01/12/2021  00:05:07", "01/12/2021  00:35:00", "01/12/2021  04:00:00", "01/12/2021  04:07:00", "01/12/2021  04:44:34", "01/12/2021  00:15:00", "02/12/2021  00:15:00"),
  end_time = c("01/12/2021  00:10:10", "01/12/2021  04:45:03", "01/12/2021  05:30:53", "01/12/2021  00:30:02", "01/12/2021  00:39:00", "01/12/2021  04:12:45", "01/12/2021  04:34:00", "01/12/2021  05:06:34", "01/12/2021  00:35:00", "02/12/2021  00:35:00")
)

datateste %>%
  mutate(
    run_interval = interval(dmy_hms(start_time) - minutes(1), dmy_hms(end_time) + minutes(1)),
    total_simultanes = imap_int(
      run_interval,
      ~ sum(
        int_overlaps(.x, run_interval)
      ) - 1L
    )
  ) %>%
  select(-run_interval)

Dernière modification par bbk9 (Thu 17 July 2025 14:47)

Hors ligne

 

#3 Fri 18 July 2025 12:00

JP
Juste Inscrit !
Date d'inscription: 16 Jul 2025
Messages: 4

Re: QGIS: Calcul d elts selectionnes dans fenetre temporelle glissante

Bonjour.
Merci pour cette piste. Je ne connais malheureusement pas R, mais je vais voir ce que l'approche suggère et s'il y a des outils/fonctions QGIS pour s'en approcher.

Hors ligne

 

#4 Fri 18 July 2025 15:32

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 4115

Re: QGIS: Calcul d elts selectionnes dans fenetre temporelle glissante

Bonjour,

le seul compte que j'obtiens concerne l'ensemble des événements de la table (avec l'expression "aggregate, 'count'")


Vous êtes sur la bonne piste. Il faut rajouter à votre expression les conditions à prendre en compte, et cela se fait via l'argument filter. Pour l'expression à écrire, ce serait du style (non testé):

Code:

filter:="champ" BETWEEN champ_debut - to_interval('1minute') AND champ_fin + to_interval('1 minute')

Hors ligne

 

#5 Fri 18 July 2025 15:40

bbk9
Participant occasionnel
Date d'inscription: 7 Jan 2022
Messages: 32

Re: QGIS: Calcul d elts selectionnes dans fenetre temporelle glissante

Salut!

j’ai trouvé une solution sans sortir de QGIS smile

dans cet exemple on suppose que ta couche a une colonne id, une colonne debut au format timestamp (ex: 2025-07-18 15:30:00) et une colonne fin au même format.

À l’aide du gestionnaire de base de données de QGIS (menu Base de données > DB manager) on va pouvoir faire des requêtes en SQL dans les données que tu as chargé dans qgis (.shp, geopackage, bdd...). Ta couche apparaît dans Couches virtuelles > Couches du projet > nom_de_ta_couche (dans mon exemple : mypoints)

En cliquant sur le bouton blanc avec une clé (Fenêtre sql au survol) on a accès à un requêteur sql dans lequel tu peux coller ça :

Code:

-- remplacer mypoints par le nom de ta couche, idem debut, fin et id 

with intervale as (
select id, 
           strftime('%Y-%m-%dT%H:%M:%f', datetime( debut, '-1 minute')) as debut_moins_une, 
           strftime('%Y-%m-%dT%H:%M:%f', datetime( fin, '+1 minute'))     as  fin_plus_une
from mypoints 
)
select mp.*, -- étoile va rappatrier toutes les colonnes d’origine de ta couche
           count(mp.id) -1 as "nb evenements simultanes", 
           group_concat(intervale.id) as "evenements simultanes"
from mypoints as mp, intervale
where (mp.debut between debut_moins_une and fin_plus_une) 
or (mp.fin between debut_moins_une and fin_plus_une)
group by mp.id order by mp.id;

une fois le tableau de données produit tu peux l’ajouter à ton projet en cliquant sur "charger en tant que nouvelle couche"


J’espère que ça va fonctionner, n’hésite pas à demander des précisions, voire même à partager un extrait de tes données si c’est possible, pour une solution plus personnalisée

Dernière modification par bbk9 (Fri 18 July 2025 16:10)

Hors ligne

 

#6 Sun 20 July 2025 14:34

JP
Juste Inscrit !
Date d'inscription: 16 Jul 2025
Messages: 4

Re: QGIS: Calcul d elts selectionnes dans fenetre temporelle glissante

Merci pour vos réponses.

@SANTANNA : j'avais exploré cette piste sans résultat. En fait, il me remontait systématiquement l'ensemble des élémenst de ma table.

@bbk9 : c'est parfait, les données sont correctement traitées ! merci beaucoup !! je ne connaissais pas encore cette possibilité d'intégrer le SQL et je la mets de côté pour plus tard.

Hors ligne

 

#7 Sun 20 July 2025 19:33

bbk9
Participant occasionnel
Date d'inscription: 7 Jan 2022
Messages: 32

Re: QGIS: Calcul d elts selectionnes dans fenetre temporelle glissante

Super! Content que ça fonctionne et que tu aies découvert les fonctionnalités SQLite de Qgis que je trouve super pour la gestion des données smile

Hors ligne

 

#8 Mon 21 July 2025 12:46

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 4115

Re: QGIS: Calcul d elts selectionnes dans fenetre temporelle glissante

Bonjour,

@SANTANNA : j'avais exploré cette piste sans résultat. En fait, il me remontait systématiquement l'ensemble des élémenst de ma table.


Avec l'option filter dans la requête? Et une sous-expression correcte? En toute logique, ce devrait fonctionner, donc permettez que j'ai un doute.
Mais bon, tant mieux si vous avez trouvé une solution qui vous convient.

Hors ligne

 

#9 Mon 21 July 2025 18:50

JP
Juste Inscrit !
Date d'inscription: 16 Jul 2025
Messages: 4

Re: QGIS: Calcul d elts selectionnes dans fenetre temporelle glissante

Bonjour,

Il est probable que le problème était au niveau de l'expression qui demande probablement une syntaxe bien particulière étant donné les références en input (qui est l'ouput de l'étape précédente) et celles de la requête de recherche (pour chaque élément je cherche et compte les éléments de la table entière qui remplissent les conditions de date-heure).
Si le même résultat est atteignable en expression, ça va m'intéresser car avec la requête SQL, je sors de mon modèle pour faire les calculs au lieu de rester au sein du même workflow.
J'ai bien essayé d'intégrer la requête SQL avec un "Execute SQL" dans le modeler mais j'ai encore des soucis de syntaxe (message d'erreur à l'exécution sur le code SQL inséré dans l'outil).
Pour le moment, j'arrive à progresser mais j'aimerais pouvoir optimiser tout ça quand ce sera possible.

Hors ligne

 

Pied de page des forums

Copyright Association GeoRezo