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 Tue 14 June 2011 17:00

Jean-Marie64
Participant actif
Lieu: Pau
Date d'inscription: 6 Nov 2007
Messages: 131

[Mapserver] conversion d'un champ date de type timestamp en entier

Bonjour

dans mon mapfile je me connecte à une base de données Postgresql et je veux pouvoir
effectuer une opération arithmétique sur le champ date de type timestamp ;

je donne l'exemple ci-dessous où j'assigne à des point une couleur spécifique si :
%NOW% - [date] <= 3 minutes :

Code:

CONNECTIONTYPE POSTGIS
CONNECTION 'host=localhost dbname=DB'
....
  class
    name "now - 3min"
    EXPRESSION (%NOW% - [date] <= 180)
    style
      width 1
      color 255 0 0
    end
  end

comme [date] est de type timestamp  donc dans le format "yyyy-mm-dd hh:mm:ss"
je ne peut pas effectuer la différence %NOW% - [date]

comment puis-je m'y prendre pour me ramener à un entier (ex nombre de secondes depuis le 01/01/1970)
pour pouvoir effectuer l'opération ?

merci bien

Jean-Marie

Hors ligne

 

#2 Tue 14 June 2011 17:17

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9973
Site web

Re: [Mapserver] conversion d'un champ date de type timestamp en entier

Bonjour,

Il devrait y avoir deux possibilités :
* soit dans la requête SQL dans le champ DATA tu récupères le champ "date" en le transformant avec une fonction postgresql
* espérer que la nouveauté sur les expressions apportent une fonction sur les champs date : voir http://www.portailsig.org/content/sorti … ersion-600

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#3 Tue 14 June 2011 18:09

Jean-Marie64
Participant actif
Lieu: Pau
Date d'inscription: 6 Nov 2007
Messages: 131

Re: [Mapserver] conversion d'un champ date de type timestamp en entier

Bonjour

il y a effectivement la fonction sql 'extract(epoch from mon_timestamp)' qui me permet de travailler sur des entiers en secondes ;

exemple de requête :

Code:

select  extract(epoch from date), x(coord), y(coord) from table 
where extract(epoch from date) > 1308030000 and extract(epoch from date) < 1308045518;

je pense que je peux alors écrire dans le mapfile quelque chose comme :

Code:

DATA "extract(epoch from date) from %DBTABLE%"

comment puis-je alors prendre en compte ces entiers dans la définition de ma classe ?

merci d'avance

JM

Hors ligne

 

#4 Wed 15 June 2011 12:27

Jean-Marie64
Participant actif
Lieu: Pau
Date d'inscription: 6 Nov 2007
Messages: 131

Re: [Mapserver] conversion d'un champ date de type timestamp en entier

apparemment je pensais introduire la fonction de la façon suivante (qui fonctionne bien en ligne de commande sql) :

Code:

  data "coord from (select date,coord,num[b],extract(epoch from date[/b]) as bangdate from table) as new_table using unique num"

le problème est qu'en rajoutant l'expression :

Code:

extract(epoch from date) as bangdate

je ne récupère plus aucune données

alors qu'en enlevant la fonction soit :

Code:

  data "coord from (select date,coord,num from table) as new_table using unique num"

je reçois bien mes données

en quoi l'introduction de la fonction, de cette manière, peut poser problème ?

merci d'avance

JM

Hors ligne

 

#5 Wed 15 June 2011 17:29

Jean-Marie64
Participant actif
Lieu: Pau
Date d'inscription: 6 Nov 2007
Messages: 131

Re: [Mapserver] conversion d'un champ date de type timestamp en entier

reBonjour

mon problème demeure ;
comment est-il possible de récupérer le champ date transformé ?

merci bien

Jean-Marie

Hors ligne

 

#6 Thu 16 June 2011 11:47

Jean-Marie64
Participant actif
Lieu: Pau
Date d'inscription: 6 Nov 2007
Messages: 131

Re: [Mapserver] conversion d'un champ date de type timestamp en entier

pour ceux que çà intéresse j'ai finalement contourné le problème
en passant en paramètre les dates me permettant, dans le mapfile,
de définir des intervalles de temps et d'affecter une couleur spécifique à chacun
des points dont la date est dans cet intervalle :

dans ce qui suit [date] est le champ date dans la table de la BD ;
CLASSDATEi est une date au format YYYY-MM-DD HH!MM:SS
passée en paramètre avec OpenLayers

  class
    name "classdate1"
    EXPRESSION ("[date]">"%CLASSDATE1%")
    style
      symbol "Point"
      size 6
      color 255 0 0
    end
  end

  class
    name "classdate2"
    EXPRESSION ("[date]">"%CLASSDATE2%")
    style
      symbol "Point"
      size 6
      color 255 255 0
    end
  end
...

Hors ligne

 

Pied de page des forums

Copyright Association GeoRezo