2. Problème avec les géométries de type MULTIPOLYGON

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.xml
Pour 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 | 3055 lectures

Posté par rédacteurs le 19 Avril, 2007 - 13:09.

djay | 24 Avril, 2007 - 20:54

Vous pouvez consulter le bug sur le système Trac d'OSGeo mis en place pour le projet Mapserver (c'était si simple de dire le Bugzilla de Mapserver Laughing out loud ) concernant ce problème.

Accéder aux archives

« Mai 2024  
Lun Mar Mer Jeu Ven Sam Dim
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Ouverture de session

Qui est en ligne

Il y a actuellement 1 utilisateur et 46 invités en ligne.
Locations of visitors to this page
Drupal Top Sites - Ultimate Drupal Exposure