Vous pourriez facilement vous contenter de la section 1 du présent manuel afin de générer des imagemaps. Cependant, si vous utilisez des MULTIPOLYGON
, vous devriez rencontrer le problème décrit ici.
En effet dans notre exemple, lors du chargement de la page de consultation avec Firefox 2.0, nous avons eu, dans la console de débogage, le message suivant :
L'attribut « coords » de la balise <area shape="poly"> ne contient pas la dernière coordonnée « y » (le format correct est u00ab x1,y1,x2,y2 … »).Après consultation de l'imagemap générée à l'étape précédente nous avons effectivement constaté qu'il y avait certaines des balises
area
qui contenaient un point pour le moins étrange ayant trois coordonnées...
En effet, si vous essayez de générer une imagemap à partir d'une couche PostGIS qui contient des MULTIPOLYGON
avec une version 4.10.1 de Mapserver, vous rencontrerez alors ce type problème pour tout les MULTIPOLYGON
qui contiennent plus d'une composante (c'est-à-dire plus d'un POLYGON
). Vous pouvez obtenir cette information en utilisant la fonction NumGeometries
(décrite ici) ou encore avec Summary
(décrite ici).
Il est facile de récupérer l'ensemble des lignes contenant une balise area
de type polygon
ayant un "point" à trois composantes à l'aide de la commande suivante :
# grep "[1-9]*,[1-9]*,[1-9]*" /chemin/vers/votre/imagemap.xmlPour résoudre ce problème je me suis contenté d'éditer le fichier
maptemplate.c
pour y modifier les lignes 1144 et 1148 pour qu'elles contiennent, repectivement :
pointFormatLength = strlen("xh") + strlen("xf") + strlen("yh") + strlen("yf") + strlen("cs") + 10 + 2;et
snprintf(pointFormat2, pointFormatLength, "%s%%.%dlf%s%s%%.%dlf%s ", xh, precision, xf, yh, precision, yf);Une fois ceci fait, il vous faut bien entendu recompiler Mapserver afin que les modifications apportées soient prises en compte. Une fois le nouveau binaire
mapserv
créé et copié dans le répertoire cgi-bin
de votre serveur web, il vous suffit de relancer la commande pour récupérer l'imagemap générée. Lors de vos modifications, vous pouvez utiliser un autre nom que mapserv
pour le programme cgi, par exemple mapserv<version>
afin de garantir que les applications utilisant l'ancienne version (mapserv
) continuent de fonctionner sans problème. Ainsi si vous faisiez une erreur, l'ensemble de vos applciations ne serait pas touché.
En effet, les modifications décrites ici sont appliquées à la fonction processCoords
qui est responsable du remplacement de shpxy
dans les modèles par les coordonnées correspondantes, ce qui peut avoir des incidences suivant l'utilisation qui est faite de la variable shpxy
. De plus, cette modification n'a été apportée que pour modifier le comportement de Mapserver lors de la génération d'imagemap pour des géométries de type MULTIPOLYGON
qui posaient problème. Nous ne nous sommes pas encore penchés sur l'ensemble des incidences que cette modification pouvait avoir sur le comportement général de Mapserver.
Vous pouvez vérifier que l'imagemap ainsi générée est correcte avec la même commande que précédemment, qui ne devrait rien renvoyer si tout s'est bien passé.
Posted in version imprimable | Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | 3146 lectures
Posté par rédacteurs le 19 Avril, 2007 - 13:09.