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

Pour sa 21ème année, l’association GeoRezo a toujours besoin de vous !

10€ = 1 mois de frais bancaires ; 15€ = 12 mois de nom de domaine ; 30€ = 1 semaine de location des serveurs …

Faire un don 

Retrouver nos membres bienfaiteurs

#1 Mon 08 March 2010 18:02

jflegendre
Juste Inscrit !
Lieu: Québec
Date d'inscription: 8 Mar 2010
Messages: 4

Création de layer "dynamique" WFS basé sur plusieurs tables PostGIS

Bonjour à tous

J'ai une question concernant la création d'un service WFS « dynamique » qui permettrait de se baser sur plus d'une table PostGIS. J'explique mon problème:

J'ai une grille de 25km x 25km (shp) que j'ai inséré dans ma base de données PostGIS sous le nom suivant: RADAR_FORECAST_GRID. Les champs de cette table sont : GID, THE_GEOM, NAME.

À l'aide de Geoserver, j'ai créé un layer avec cette table que j'exploite en WFS à l'aide de OpenLayer.

Jusqu'ici, tout fonctionne bien. Maintenant mon problème:

Je veux associer des valeurs dynamiques à chacune des cellules de la grille. Le but étant de montrer à l'utilisateur le déplacement de la pluie prévue dans le temps (à l'aide de couleurs associées aux différentes intensités de pluie qui seront appliquées sur chacune des cellules). Nous prévoyons stocker dans la base de données 2 heures de prévisions que les utilisateurs pourront faire « rejouer » à leur guise.

Donc pour y arriver, je prévois me créer une table nommée: RADAR_FORECAST_VALUES qui comprendra 3 champs, soient: DATE, VALUE et ID. Dans cette table, un lien relationnel existe avec la table RADAR_FORECAST_GRID sur l’attribut ID qui pointe vers GID de la table RADAR_FORECAST_GRID. Ainsi en BD j’aurais les tables suivantes :

Code:

RADAR_FORECAST_GRID (table GIS)
    |
    |---- RADAR_FORECAST_VALUES (table normal)

J'aimerais me créer un service WFS "dynamique" qui serait composé sur la table RADAR_FORECAST_GRID et qui aurait comme attribut VALUE provenant de la table  RADAR_FORECAST_VALUES correspondant à une date donnée. D’où le terme « dynamique ». Le SELECT sous-jacent serait quelque chose comme:

Code:

SELECT grid.the_geom, grid.name, grid.gid, val.value  FROM RADAR_FORECAST_GRID grid, RADAR_FORECAST_VALUES val WHERE val.date = 'UNE DATE' AND  grid.gid = val.id

Les solutions que j'entrevoie pour l'instant sont:
- Table temporaire dans PostgreSQL pour générer la table souhaitée. Mais est-il possible de créer une telle table basée sur une requête pour une date donnée ? Je me questionne aussi sur la rapidité d’une telle solution.
- Créer un plugin dans Geoserver qui répondrait à mon besoin spécifique ? Donc qui créerait un WFS basé sur une requête plus « complexe » impliquant une date précise.
- Utiliser les OGC FILTER. Mais peut-on composer des équivalents de SELECT sur plusieurs tables ? J'en doute ?

Bref, qu'elle est la solution la plus approprié dans ce cas précis ? Existe-t-il des « best practices » ? Avez-vous déjà eu ce besoin et si oui comment l’avez-vous abordé ?

Merci de vos réponses et bonne journée!

JFL

Hors ligne

 

#2 Tue 09 March 2010 09:59

oponcelet
Participant occasionnel
Date d'inscription: 23 Jan 2006
Messages: 10

Re: Création de layer "dynamique" WFS basé sur plusieurs tables PostGIS

Bonjour,

Il me semble que le plus simple serait d'utiliser une vue dans PostgreSQL (requête stockée) rendue dynamique en fondant la sélection sur la date et l'heure courantes pour pouvoir ressortir automatiquement 2 heures de prévisions, quelque chose comme...

Code:

BETWEEN now() AND select now()+ INTERVAL '2 HOURS'

Pour pouvoir afficher une vue en WFS, il faut une ligne correspondante au champ the_geom de la vue créée dans la table geometry_columns de PostGIS.

Pour avoir les 3 couches de données correspondant à t, t+1 et t+2, il y a 3 possibilités : soit créér 3 vues différentes, soit appeler dans le mapfile (ou ce qui en tient lieu dans Geoserver que je ne connais pas) la même vue mais avec 3 filtres différents, soit utiliser un système de requêtage en aval pour distinguer les 3 informations (par exemple avec OpenLayers).

Ensuite pour faire "jouer" les différentes couches, une simple fonction de rechargement paramétré en javascript (visant OpenLayers) avec un setTimeOut devrait faire l'affaire...

Bonne journée !

Hors ligne

 

Pied de page des forums

Powered by FluxBB