#1 Fri 28 October 2011 12:10
- Jean-Marie64
- Participant actif
- Lieu: Pau
- Date d'inscription: 6 Nov 2007
- Messages: 131
[mapserver] Filtre sur les coordonnées d'un point
Bonjour
faisant suite au sujet "BBOX transmise dans l'URL englobant maxExtent"
j'ai pensé à une solution qui serait de transmettre dans la requête à mapserver
les limites de maxextent et de faire un filtre sur les coordonnées par rapport à ces limites
je spécifie par exemple le filtre de la façon suivante :
FILTER "x(coord)>'%XMIN%' and x(coord)<'%XMAX%' and ..."
j'ai commencé par faire un test avec des constantes :
FILTER "x(coord)>'-100000.0' and x(coord)<'10000000.0'"
mais plus aucune donnée ne m'est retournée (rien ne s'affiche)
quelque soit apparemment les valeurs spécifiées
est-c'qu'il y aurait une erreur dans la syntaxe ?
merci pour votre éclairage
Jean-Marie
Hors ligne
#2 Mon 21 November 2011 21:19
Re: [mapserver] Filtre sur les coordonnées d'un point
Bonsoir,
Je suppose que la source de données est PostGIS et que le champ géométrique s'appelle "coord" ?
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 22 November 2011 10:01
- Jean-Marie64
- Participant actif
- Lieu: Pau
- Date d'inscription: 6 Nov 2007
- Messages: 131
Re: [mapserver] Filtre sur les coordonnées d'un point
Bonjour
effectivement ;
mon layer de données est décrit de la façon suivante :
Code:
layer name "DONNEES" group "DONNEES" type point status on connectiontype postgis connection "host=%HOST% dbname=....." data "coord from table using unique num" FILTER ... end
le problème est que dans postgis les coordonnées sont en degrés
or les valeurs de maxExtent sont dans une projection (par exemple EPSG:27572)
le filtre doit donc se faire sur la base de cette projection
Jean-Marie
Hors ligne
#4 Tue 22 November 2011 10:28
Re: [mapserver] Filtre sur les coordonnées d'un point
Bonjour,
Alors il faut aussi utiliser x(st_transform(coord,27572)).
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
#5 Fri 25 November 2011 15:14
- Jean-Marie64
- Participant actif
- Lieu: Pau
- Date d'inscription: 6 Nov 2007
- Messages: 131
Re: [mapserver] Filtre sur les coordonnées d'un point
Bonjour
effectivement je peux faire la chose suivante :
Code:
connectiontype postgis .. data "coord from table using unique num" FILTER "date >= '%BEGINDATE%' and date < '%ENDDATE%' and st_transform(coord,27572) && st_setsrid('BOX(%LONMIN% %LATMIN%,%LONMAX% %LATMAX%)'::box2d,27572) "
constatant que st_transform(coord,27572) augmente de manière non négligeable le temps d'exécution de la requête WMS,
je suis finalement resté en degré, ce qui est plus rapide, soit :
Code:
FILTER "date >= '%BEGINDATE%' and date < '%ENDDATE%' and rectangle(%LONMIN%,%LATMIN%,%LONMAX%,%LATMAX%,coord)"
alternative :
Code:
data "coord from (select date,coord,num from table where date between '%BEGINDATE%' and '%ENDDATE%' and rectangle(%LONMIN%,%LATMIN%,%LONMAX%,%LATMAX%,coord)) as new_table using unique num"
je n'ai pas vu de différence en temps d'exécution entre mettre la condition dans FILTER ou dans data
Jean-Marie
Hors ligne