4.7.2. Questions fréquemment posées



 Table des matières

4.7.2.1. Lorsque j'utilise une EXPRESSION dans ma map, la condition ne retourne jamais vrai, même si elle devrait.
4.7.2.2. Le FILTER que j'utilise pour mon fichier vecteur ne fonctionne pas pour ma table PostGIS contenant les mêmes données.
4.7.2.3. Ma couche PostGIS se dessine plus doucement que mon fichier vecteur, est-ce normal?
4.7.2.4. Mes couches PostGIS s'affichent correctement, mais les requêtes sont vraiment lentes. Que se passe-t-il ?

4.7.2.1. Lorsque j'utilise une EXPRESSION dans ma map, la condition ne retourne jamais vrai, même si elle devrait.

Contrairement aux fichiers vecteurs (shapefile), les noms de champs PostGIS doivent être référencés dans EXPRESSIONS en utilisant des lettres en minuscule.

EXPRESSION ([nombre_de_voies] >= 6)
haut de la page | table des matières

4.7.2.2. Le FILTER que j'utilise pour mon fichier vecteur ne fonctionne pas pour ma table PostGIS contenant les mêmes données.

Contrairement aux fichiers vecteurs (shapefile), les filtres pour les couches PostGIS utilisent la syntaxe SQL (ils sont concaténés à l'état SQL que le connecteur PostGIS génère pour afficher les couches dans Mapserver).

FILTER "type = 'autoroute' and nombre_de_voies >= 4"
haut de la page | table des matières

4.7.2.3. Ma couche PostGIS se dessine plus doucement que mon fichier vecteur, est-ce normal?

En général, les couches PostGIS sont 10 % plus lentes que les couches équivalentes en fichier vecteurs, ceci est due au temps qui incombe à la connection au serveur de base de données, les transformations et la transmission des données entre la base et Mapserver.

Si vous avez des problèmes de performance d'affichage, cela est généralement lié au fait que vous n'avez pas créé les indexes spatiaux pour vos tables.

postgis# CREATE INDEX geotable_gix ON geotable USING GIST ( geocolumn );
postgis# SELECT update_geometry_stats(); -- Pour PGSQL < 8.0
postgis# VACUUM ANALYZE; -- Pour PGSQL >= 8.0
haut de la page | table des matières

4.7.2.4. Mes couches PostGIS s'affichent correctement, mais les requêtes sont vraiment lentes. Que se passe-t-il ?

Pour que les requêtes soient rapides, vous devez avoir une clef unique pour vos tables spatiales et un index sur cette clef unique.
Vous pouvez spécifier quelle clef unique doit être utilisée par Mapserver, en utilisant la clause : USING UNIQUE dans votre ligne DATA :
DATA "the_geom FROM geotable USING UNIQUE gid"
Si votre table n'a pas de colonne explicitement unique, vous pouvez "faire semblant" de rendre une colonne unique en utilisant la colonne PostgreSQL "oid" comme colonne unique. "oid" est la colonne unique par défaut si vous n'en déclarez pas une, donc pour améliorer le temps d'exécution de vos requêtes vous devez créer des indexes sur les valeurs oid de vos tables spatiales.
postgis# CREATE INDEX geotable_oid_idx ON geotable (oid);

haut de la page | table des matières