Erreurs

drawEPP(): EPPL7 support is not available

Erreur affichée quand on n’utilise pas des données EPPL7

C’est une erreur qui peut être source de confusion pour les utilisateurs qui ne cherchent même pas à voir des couches EPPL7 (EPPL7 est un format raster). L’erreur complète affichée pourrait apparaître comme ceci :

msDrawRaster(): Unrecognized or unsupported image format ...

drawEPP(): EPPL7 support is not available.

Explication

Quand MapServer essaye de dessiner une couche, il va tenter d’utiliser tous les pilotes qu’il connaît, et le pilote EPPL7 est le dernier pilote qui sera essayé. Cela signifie que si une couche n’arrive pas à être dessinée pour n’importe quelle raison, vous verrez ce message d’erreur.

Il y a d’autres cas possibles où cette erreur peut apparaître cependant, en voici quelques-unes :

  • le serveur retourne une erreur de type ServiceException (que MapServer ne détecte pas encore et l’interprète en renvoyant un message d’erreur raisonnable) ou il retourne une image dans un format non reconnu ... Par exemple, il retourne une image GIF et MapServer n’a pas été compilé pour supporter les images GIF.

  • Les serveur WMS peuvent souvent indiquer plusieurs formats d’image mais ne pas les respecter dans la requête getmap.

loadLayer(): Unknown identifier. Maximum number of classes reached

Erreur affichée quand on tente de dessiner une couche avec un grand nombre de classes.

Cette erreur indique que MapServer a atteint ses limites pour le nombre maximum de classes pour la couche. Ce maximum peut être modifié dans les sources de MapServer et peut être ensuite re-compilé. map.h contient les valeurs par défaut, et en dessous voici les valeurs par défaut pour MapServer 4.10 et 4.8 :

#define MS_MAXCLASSES 250
#define MS_MAXSTYLES 5
#define MS_MAXLAYERS 200

Note

Cette limitation a été corrigée dans MapServer 5.0 et ne devrait plus être un problème.

loadMapInternal(): Given map extent is invalid

Quand vous chargez votre mapfile ou l’une de vos couches, MapServer se plaint d’une étendue invalide.

A partir de MapServer 4.6, MapServer devient plus strict sur les étendues des LAYER et de MAP. Si le minx iest plus grand que le maxx, ou que miny est plus grand que maxy, cette erreur sera générée. Vérifiez votre EXTENT de MAP, celui des LAYER, ou le paramètre wms_extent pour s’assurer que ce n’est pas le cas. MapServer prend toujours les étendues sous la forme de:

EXTENT minx miny maxx maxy

Comment obtenir les valeurs de l’EXTENT d’un fichier?

La manière la plus simple d’avoir l’EXTENT d’un fichier vecteur est d’utiliser la commande ogrinfo , qui fait partie de la bibliothèque GDAL/OGR (pour les fichiers raster vous devriez utiliser la commande gdalinfo). Les utilisateurs Windows peuvent télécharger le logiciel FWTools qui inclut tous les utilitaires en ligne de commande de GDAL et OGR. MS4W inclut aussi des utilitaires (dans ms4w/tools/gdal-ogr-utils/). Les utilisateurs Linux users auront probablement déjà la bibliothèque GDAL, si ce n’est pas le cas, vous pouvez aussi utiliser le logiciel FWTools.

Par exemple, voici les résultats de la commande ogrinfo qur un shapefile (Notez la ligne “Extent”):

$ ogrinfo province.shp province -summary
  INFO: Open of `province.shp'
  using driver `ESRI Shapefile' successful.

  Layer name: province
  Geometry: Polygon
  Feature Count: 1071
  Extent: (-2340603.750000, -719746.062500) - (3009430.500000, 3836605.250000)
  Layer SRS WKT:
  (unknown)
  AREA: Real (16.0)
  PERIMETER: Real (16.0)
  PROVINCE_: Real (16.0)
  PROVINCE_I: Real (16.0)
  STATUS: String (64.0)
  NAME: String (64.0)
  NAME_E: String (64.0)
  NAME_F: String (64.0)
  REG_CODE: Real (16.0)
  POLY_FEATU: Real (16.0)
  ISLAND: String (64.0)
  ISLAND_E: String (64.0)
  ISLAND_F: String (64.0)
  YYY: Real (16.0)
  SIZE: Real (16.0)
  ANGLE: Real (16.0)

Ogrinfo donne l’étendue du fichier sous la forme (minx, miny),(maxx, maxy), par conséquent l’EXTENT dans le mapfile devrait être:

EXTENT -2340603.750000 -719746.062500 3009430.500000 3836605.250000

Note

L’EXTENT dans le mapfile doit être dans la même unité la PROJECTION du niveau MAP.

msGetLabelSize(): Requested font not found

Erreur affichée quand on tente d’afficher une police spécifique

Ce message vous dit que Mapserver ne peut pas trouver la police spécifiée

Make sure that the font is properly referenced in the FONTSET lookup file.

Voir aussi

FONTSET

msLoadFontset(): Error opening fontset

Erreur quand on tente d’afficher une étiquette

Ce message indique que MapServer ne peut pas trouver le FONTSET spécifié dans le Mapfile.

The FONTSET path is relative to the mapfile location.

Voir aussi

FONTSET

msLoadMap(): Failed to open map file

Erreur affichée quand on essaye d’affiche une image de carte

Le message vous dit que MapServer ne peut pas trouver le fichier .map ou a des problèmes avec le fichier .map. Vérifiez que vous avez spécifié le chemin correct vers le mapfile. Les utilisateurs Linux/Unix devraient s’assurer que l’utilisateur web a les droits d’accès au chemin du mapfile également. Vérifier le fichier .map en utilisant shp2img pour être sûr que la syntaxe est correcte.

Le message d’erreur indique où MapServer pense que le mapfile est :

[MapServer Error]: msLoadMap(): (D:/ms4w/apps/blah/blah.map)
Failed to open map file D:/ms4w/apps/blah/blah.map

msProcessProjection(): no options found in ‘init’ file

Erreur affichée quand on tente d’utiliser une projection donnée.

Le message vous dit que la projection que vous essayez d’utiliser n’est pas dans le fichier epsg. Ouvrez votre fichier epsg dans un éditeur de texte et recherchez votre projection pour vous assurez qu’elle existe.

Sous Windows, l’emplacement par défaut du fichier epsg est c:\proj\nad. Les utilisateurs de MS4W trouveront le fichier epsg dans \ms4w\proj\nad.

msProcessProjection(): No such file or directory

Erreur affichée quand on essaye de faire référence à un fichier epsg.

Le message vous dit que MapServer ne peut pas trouver le fichier epsg.

Sous Windows, l’emplacement par défaut du fichier epsg est c:\proj\nad. Les utilisateurs de MS4W trouveront le fichier epsg dans \ms4w\proj\nad.

Les utilisateurs Linux/Unix devraient faire attention à spécifier le chemin correct quand vous vous référez au fichier epsg, comme les fichiers sont sensibles à la casse sous Linux/Unix. “init=epsg:4326” fait référence au nom de fichier epsg, et par conséquent “init=EPSG:4326” ne fonctionnera pas parce que Mapserver cherche un nom de fichier EPSG en majuscules.

Paramétrer l’emplacement du fichier epsg

Il y a quelques options disponibles si vous avez besoin de définir l’emplacement du fichier epsg:

  1. Utiliser une variable système (“variable d’environnement” sous windows) appelée “PROJ_LIB” et la faire pointer vers votre répertoire epsg.

  2. Utiliser le paramètre de CONFIG pour forcer l’emplacement du fichier epsg. Ce paramètre est spécifié au niveau MAP

    Voir aussi

    Mapfile

    MAP
        ...
        CONFIG "PROJ_LIB" "C:/somedir/proj/nad/"
        ...
    END
    
  3. Définir une variable d’environnement par l’intermédiaire du serveur web. Apache a une directive SetEnv qui peut définir des variables d’environnement. Ajouter quelque chose ressemblant à ce qui suit dans votre fichier httpd.conf Apache:

    SetEnv PROJ_LIB C:/somedir/proj/nad/
    

msProcessProjection(): Projection library error.major axis or radius = 0 not given

Erreur affichée quand tente de spécifier les paramètres de projection.

Depuis MapServer 4.0, il est obligatoire de spécifier l’ellipsoïde pour la projection. Omettre le paramètre ellipsoïde dans les versions récentes de MapServer causera cette erreur.

Exemples valides

4.0 et plus récente:

PROJECTION
  "proj=latlong"
  "ellps=WGS84"
END

avant Mapserver 4.0

PROJECTION
  "proj=latlong"
END

msQueryByPoint: search returned no results

Pourquoi j’obtiens le message “msQueryByPoint(): Search returned no results. No matching record(s) found” quand j’interroge un objet dont je sais qu’il existe?

L’interrogation d’une objet nécessite un objet TEMPLATE dans l’objet CLASS pour la définition de votre LAYER. La valeur pointe vers un fragment html qui utilise la syntaxe de template MapServer.

Fragment de Mapfile exemple

LAYER
  NAME "Parcel9"
  TYPE POLYGON
  STATUS OFF
  DATA "Parcels/area09_parcels"
  CLASS
    STYLE
      OUTLINECOLOR 128 128 128
      COLOR 153 205 255
    END
    TEMPLATE "templates/Parcels/area09_parcels.html"
  END

  HEADER "templates/Parcels/area09_parcels_header.html"
  FOOTER "templates/Parcels/area09_parcels_footer.html"

END

Template exemple:

<tr>
  <td>[lrn]</td>
  <td>[PIN]</td>
</tr>

Le [lrn] est un mot-clé spécial qui indique le numéro de la ligne résultante qui commence à 1. [PIN] est le nom de l’attribut de l’objet.

msReturnPage(): Web application error. Malformed template name

This error may occur if you try to access a template file with a file extension that is not recognized by MapServer. Valid file extensions for templates are:

.gml
.html
.htm
.js
.kml
.svg
.tmpl
.wml
.xml

This error may also occur when you are attempting to use a URL template for a query. The issue is that URL templates are only allowed for query modes that return only one result (e.g. query or itemquery)

Vous pouvez seulement utiliser un template URL pour une interrogation en mode=query ou mode=itemquery. si vous essayez avec mode=nquery ou mode=itemnquery, vous obtiendrez cette erreur:

Content-type: text/html msReturnPage(): Web application error. Malformed template name

msSaveImageGD(): Unable to access file

Erreur affichée quand on tente d’afficher une image de carte.

Cette erreur est affichée si Mapserver ne peut pas afficher l’image de carte. Il y a différentes choses à vérifier:

  • Les paramètres IMAGEPATH et IMAGEURL dans le mapfile sont valides

  • En mode CGI, n’importe quelles variables IMAGEPATH et IMAGEURL définies dans les pages d’initialisation sont valides

  • Les utilisateurs Linux/Unix devraient vérifier que l’utilisateur web a les droits d’écriture sur IMAGEPATH

msWMSLoadGetMapParams(): WMS server error. Image Size out of range, WIDTH and HEIGHT must be between 1 and 2048 pixels

Erreur qui retourne/affiche quand un utilisateur a interrogé un image de carte (via WMS) qui dépasse la largeur ou la hauteur que le service autorise

Pour augmenter la largeur et la hauteur maximum de la carte pour le service, utilisez le paramètre MAXSIZE de l’objet MAP. Produire des images de carte plus grandes nécessite plus de puissance de traitements et plus de mémoire, ainsi faites attention.

Unable to load dll (MapScript)

Une des dll dont mapscript.dll dépend n’a pas pu être chargée.

Vous pouvez avoir ce problème sous Windows et dans la plupart des cas, il peut dû à une bibliothèque partagée manquante ou impossible à charger. Le message d’erreur parle de mapscript.dll mais il manque surement une ou plusieurs dll-s dont libmap.dll dépend. Ainsi en premier, vous devriez vérifier les dépendances de votre libmap.dll dans votre répertoire d’application. Vous pouvez utiliser le logiciel Visual Studio Dependency Walker pour accomplir cette tâche. Vous pouvez aussi utiliser un outil de monitoring de fichiers (comme filemon fourni par SysInternal) pour détecter les dll-s qui ne peuvent pas être chargées. Je propose de stocker toutes les dll-s requises par votre application dans votre répertoire d’application. Si vous pouvez lancer les applications exemples exemples mapscript correctement, votre compilation devrait être correcte et toutes vos dlls seraient disponibles.

Information spécifique à C#

Vous allez peut être trouver que l’interface mapscript C# se comporte différemment pour le bureau et pour des application ASP.NET. Malgré le fait que vous puissiez lancer correctement l’exemple drawmap, vous rencontrerez peut-être le problème de chargement de dlls avec les applications ASP.NET. Quand vous créez un projet ASP.NET, votre répertoire d’application sera ‘Inetpubwwwroot[YourApp]bin’ par défaut. Le processus hôte de l’application sera aspnet_wp.exe ou w3wp.exe en fonction de votre système. L’application tournera dans un context de sécurité différent de l’utilisateur interactif (sous le contexte de l’utilisateur ASPNET par défaut). Quand vous placez les dll-s en dehors de votre répertoire d’application, vous devriez prendre en compte que la variable d’environnement PATH environment puisse différer entre l’utilisateur interactif et ASPNET et/ou que nous n’ayiez pas assez de droits pour accéder à une dll en dehors de votre répertoire d’application.