Guide de migration MapServer

Last Updated:2015-02-12

MapServer 6.4 to 7.0 Migration

  • The predefined field names for the union and cluster layers have been changed. Colons in the field names have been replaced with underscores to avoid producing invalid GetFeatureInfo results. The field names in the mapfiles should be modified according to this change.
  • Layer FILTERs must use MapServer expression syntax only. Drivers will attempt to translate from MapServer syntax to native syntax (e.g. SQL). Native expressions can still be set either using: 1) sub-selects in the DATA statement or 2) using the new NATIVE_FILTER processing key.
# OGR Layer Before
LAYER
  ...
  FILTER 'where id=234'
END

# OGR Layer After
LAYER
  ...
  PROCESSING 'NATIVE_FILTER=id=234'
END
  • MapServer attrribute queries (e.g. mode=item[n]query) must be specified using MapServer expression syntax (qstring and qitem (opt)). For RDBMS backends you no longer send SQL snippets, rather the underlying driver will attempt to translate the expression to native systax (e.g. SQL). If translation fails (or the driver doesn’t support translation) then MapServer will evaluate the expression instead.
  • Layer opacity is now deprecated a result of RFC 113 - Layer Compositing. The mapfile parser and MapScript getter/setter functions will continue to function but unpredicable results will occur if used in conjunction with COMPOSITE blocks. For more information see http://www.mapserver.org/development/rfc/ms-rfc-113.html.
# Before
LAYER
  ...
  OPACITY 70
END

# After
LAYER
  ...
  COMPOSITE
    OPACITY 70
  END
END
  • Handling of non UTF-8 encoded datasources has changed with RFC103. Mapfiles now must be saved in UTF-8 encoding, and requests returned by MapServer will always be UTF-8 encoded. Various “xxx_encoding” metadata entries used to hack around non UTF-8 encoded datasources are now obsolete, and have been replaced by a LAYER-level ENCODING keyword.

  • Native ESRI SDE layers are no longer supported (see https://github.com/mapserver/mapserver/pull/5068). OGR remains an alternative for those that really need it although the OGR/SDE driver suffers from the same issues that prompted the removal from MapServer.

  • GD graphics library support was removed (http://www.mapserver.org/development/rfc/ms-rfc-99.html) and had been optional since 6.2.

  • RFC 98 - Label/Text Rendering Overhaul (http://www.mapserver.org/development/rfc/ms-rfc-98.html) may result in subtle label/character placement changes. Support for negative MAXLENGTH that implied forced linebreaks is not supported anymore, workaround implies pre-processing such labels to include linebreaks or wrap characters.

  • ExternalGraphics added through SLD must now validate against the “sld_external_graphic” entry of the MAP->WEB->VALIDATION block

MAP
 WEB
  VALIDATION
   "sld_external_graphic" "^/path/to/symbols/.*png"
  END
 END
END

Migration de MapServer 6.2 à 6.4

  • La métadonnée de couche “ows_extent” n’est plus utilisée du tout pour obtenir les informations de géoréférencement pour les données raster non référencées. Merci d’utiliser la clé de couche “extent” à la place.

LAYER
  ...
  EXTENT -180 90 180 90
END
  • Les motifs de validation ne peuvent pas être spécifiés dans les blocs de métadonnées (c’est à dire en utilisant les entrées xxx_validation_pattern et default_xxx metadata), utilisez les blocs de VALIDATION. Voir #4596 #4604 #4608 ou Substitution à la volée

  • Le processus de compilation a changé après le passage à cmake. Les instructions de compilation sont incluses dans le fichier INSTALL.CMAKE dans le répertoire source. Vous devrez avoir cmake installé sur votre système. les utilisateurs de mapscript (sauf en version PHP) devront aussi avoir swig installé.

  • Le paramètre de pagination WFS startIndex est changé pour commencer à 0 plutôt qu’à 1 (0 est le premier objet). Voir #4180 pour les références externes .

  • Les balises de substitution de “Template” étaient sensibles à la casse et sont maintenant insensibles à la casse.

MapServer 6.0 to 6.2 Migration

Cette section documente les changements qui doit être fait aux applications MapServer quand on migre de la version 6.0.x (ou plus ancienne) vers la 6.2 (c’est à dire les incompatibilités avec la version antérieure), aussi bien que des informations sur certaines des nouvelles fonctionnalités.

Changement du système de compilation

Si vous compiler MapServer depuis les sources, alors ce qui suit est susceptible de vous intéresser :

  • Utilisation de libtool : en version 6.2, les scripts Unix/Linux de compilation et les Makefilesont été convertis pour utiliser libtool. Un des impact de ce changement est quel fichier ‘mapserv’ dans l’arbre des sources principal est un script d’encapsulation basé sur libtool et pas le binaire véritablement. Pour utiliser ‘mapserv’ vous devez utiliser ‘make install’ et ensuite pointé vers le binaire installé. Plus d’informations sont disponibles dans le document sur la compilation sous Unix à l’adresse http://mapserver.org/fr/installation/unix.html#installation

  • L’option de configure –with-php a été changée pour pointer directement vers le script php-config à la place du répertoire où les en-têtes PHP sont situés.

Changements CGI

  • Changer MIN/MAXSCALE ou MIN/MAXSCALEDENOM par une URL n’est plus supporté maintenant.

  • La syntaxe pour changer un LABEL avec des commandes CGI a changé avec la capacité à supporter des étiquettes multiples. La syntaxe précédente ...&map.layer[0].class[0]=label+color+255+0+0+end&... est remplacée avec ...&map.layer[0].class[0].label[0]=color+255+0+0&... Notez que les modifications d’étiquette cgi sont/étaient cassées en 6.2.0 et corrigées en 6.2.1

Changements du rendu

  • STYLE->GAP interpretation Starting in 6.2, STYLE->GAP specifies the gap between the symbols using the centre to centre distance. In earlier versions of MapServer, GAP was used as the approximate distance between the symbol boundaries. See ticket #3867 for more information.

    Pour avoir le même effet avec la version 6.2 qu’avec celle 6.0, STYLE->GAP doit être augmenté avec la taille du symbole.

  • Removal of one pixel gap between symbols In earlier versions of MapServer, an extra gap of one pixel was added between the symbols (in addition to the gap specified in STYLE->GAP). This has been discontinued in 6.2. See ticket #3868 for more information.

    Pour avoir le même effet avec la version 6.2 qu’avec celle 6.0, STYLE->GAP doit être augmenté avec un pixel.

  • STYLE->INITIALGAP introduit. Le support pour un stylage plus puissant des lignes a été fourni avec l’introduction de STYLE->INITIALGAP. Voir le ticket #3879 et la documentation pour plus d’informations.

  • SYMBOL->ANCHORPOINT introduit. Un point d’attache de symbole a été introduit pour faciliter le positionnement précis de symboles. Voir le ticket #4066 et la documentation pour plus d’informations.

  • Changement dans le calcul de la taille des symboles vecteur. En version 6.2, les coordonnés des symboles vecteur sont décalés pour se débarrasser des valeurs de coordonnées négatives x et y. Voir le ticket #4116 pour plus d’informations.

    Afin d’obtenir l’effet de décalage qui pourrait être obtenu en utilisant des valeurs de coordonnées négatives, SYMBOL->ANCHORPOINT devrait être utilisé à la place.

Migration de MapServer 5.6 à 6.0

Cette section documente les changements qui doivent obligatoirement être effectués dans les applications MapServer lors d’une migration d’une version 5.6.x (ou plus ancienne) vers une version 6.0 (c’est à dire pour les incompatibilités avec les versions antérieures), ainsi que des informations sur certaines des nouvelles fonctionnalités.

Changements du Mapfile - “Parsage” d’expression

Les fonctionnalités de la version 6.0 sont un remaniement extensif des capacités de parsage des expressions. Tandis que cela ajoute des fonctionnalités, cela introduit aussi quelques régressions:

Expressions logiques

  • une expression régulière (ou regex) est maintenant délimitée comme une chaîne (c’est à dire ‘^a’ plutôt que /^a/)

  • l’opérateur de regex est ~ pour des comparaisons sensibles à la casse et ~* pour celles insensibles à la casse

  • l’opérateur de comparaison de chaîne insensibles à la casse est =*

Les expressions de chaînes des CLASS sont de vraies expressions en version 6.0. Cela permet un formatage plus agréable des données numériques mais signifie aussi que les opérateurs de chaînes doivent être utilisés pour concaténer les valeurs d’attributs et les chaînes littérales.

  • Ancien/mauvais: TEXT ([aire] acres)

  • Nouveau (option 1)/bonne: TEXT (‘[aire]’ + ‘ acres’)

  • Nouveau (option 2)/bonne: TEXT ‘[aire] acres’

Du côté des aspects positifs, vous pouvez maintenant contrôler le nombre des décimales, des arrondis et même ajouter des virgules à la valeur pour les annotations.

See http://mapserver.org/development/rfc/ms-rfc-64.html and https://github.com/mapserver/mapserver/issues/3736 for more information.

Changements du Mapfile - styles d’étiquette

Comme le besoin d’un contrôle du dessin des étiquettes de plus en plus important augmentait, il devenait apparent que nous ne pouvions pas étendre sans fin les labelObj. En version 6.0, nous avons introduit l’idéed’un style d’étiquettes, qui est un styleObj dans un labelObj. Les styles peuvent être utilisés pour ajouter des marqueurs ou des éléments avec rectangles englobants à une sorte de couche d’étiquettes similaires aux couches d’annotation. Le gros bénéfice est que c’est effectué en une seule passe. Ainsi, vous pouvez dessiner des travaux de voirie complexes et des enseignes tous en même temps. Plutôt sympa, hein? De plus, vous pouvez attacher des attributs à n’importe lequel des attributs de styleObj qui le supporte.

Par conséquence, les paramètres BACKGROUNDCOLOR, BACKGROUNDSHADOWCOLOR, BACKGROUNDSHADOWSIZE ne sont plus. Pour dessiner une “boîte” d’ étiquette en version 6.0, vous devrez faire:

LABEL
  ...
  STYLE # a shadow
    GEOMTRANSFORM 'labelpoly'
    COLOR 222 222 222
    OFFSET 2 2
  END
  STYLE # bbox
    GEOMTRANSFORM 'labelpoly'
    COLOR 255 255 255
    OUTLINECOLOR 0 0 0
  END
END

Plus verbeux mais bien plus flexible sur le long terme.

Changements du Mapfile - étiquette MAXOVERLAPANGLE

MS RFC 60: Labeling enhancement: ability to skip ANGLE FOLLOW labels with too much character overlap introduit un nouveau mot-clé MAXOVERLAPANGLE pour filtrer les étiquettes FOLLOW dans ANGLE où les caractères se superposent. Cette nouvelle option est activée par défaut en version 6.0 avec une valeur par défaut pour MAXOVERLAPANGLE à 22.5 degrés.

Due à la MS RFC 60: Labeling enhancement: ability to skip ANGLE FOLLOW labels with too much character overlap, il est possible de définir MAXOVERLAPANGLE à 0 pour revenir au comportement par défaut antérieur à la version 6.0 qui était d’utiliser une valeur en dur maxoverlapangle = 0.4*MS_PI (40% de 180 degrés = 72 degrés).

Changements du coeur - refonte du fonctionnement du rendu

Les backends pour le rendu de MapServer ont été refactorisés dans la version 6 pour permettre de supporter toutes les fonctionnalités quelque soit les pilotes pour le rendu (GD,AGG,PDF,SVG, etc...).

  • Le support PDF s’effectue via la bibliothèque cairo. La dépendance basée sur la bibliothèque non-libre pdflib a été supprimée.

  • Le support SVG s’effectue via la bibliothèque cairo. Le pilote MapServer natif a été supprimé.

  • Le support AGG est compilé par défaut (pas de dépendances externes) et c’est le moteur de rendu par défaut pour les sorties png et jpeg.

  • Le support GD est limité aux modes d’images PC256, c’est à dire png ou gif. C’est la bibliothèque de rendu par défaut pour la sortie gif.

  • Le support de SWF (flash) a été abandonné.

  • Les fichiers d’en-têtes pour libpng, libjpeg et giflib sont maintenant requis pour compiler MapServer. Installez les paquets -devel de ces bibliothèques.

  • Tous les symboles sont pivotés dans le sens inverse des aiguilles d’une montre en suivant le paramètre ANGLE. Les versions précédentes pivotaient les symboles vecteur dans le sens des aiguilles d’une montre.

  • Polygon fills with vector symbols will not cleanly join at tile boundaries. For hatching type symbology, use the HATCH symbol instead of a diagonal vector symbol.
  • Some inconsistencies between renderers have been ironed out. People relying on precise symbol placement should check those, as there may have been some subtle changes in symbol sizes and widths, or spacing between symbols on lines.
  • Style blocks with no associated symbol on point layers will produce no output, as opposed to a single pixel in previous versions. Use an ellipse symbol instead.

Changements du Mapfile - stylage des lignes

All line styling must now be specified in class STYLEs in the layer definition.

Les paramètres/mots-clés suivants ont été déplacés de SYMBOL vers STYLE:

PATTERN POSITION GAP LINECAP LINEJOIN LINEJOINMAXSIZE

Le paramètre/mot-clé STYLE de SYMBOL a été renommé en PATTERN en version 5.

Le TYPE de SYMBOL cartoline a été supprimé.

LINECAP triangle is not supported by AGG or Cairo, and is no longer available. The triangle line end effect can be achieved using GEOMTRANSFORM start and end with a (filled) vector triangle symbol and ANGLE AUTO. This will only work for the line ends, and not for dashes.

Changements CGI

Runtime subsitution now requires a validation pattern be present before the substitution will take place (this had been optional). This can be done via a layer metadata tag as before or within layer or web VALIDATION blocks. See ticket #3522 for more information.

All of the query map related modes (e.g. NQUERYMAP, ITEMQUERYMAP, etc...) have been removed in favor of using the “qformat” parameter. That parameter takes an output format name or mime/type as a value and uses that to process a set of query results. For example:

...&mode=nquerymap&... deviendra ...&mode=nquery&qformat=png24&...

OGC Web Services

Tous les Services Web OGC sont maintenant désactivés par défaut. Si vous voulez les activer comme c’était le cas dans MapServer 5.6 et les versions plus anciennes, ajoutez les métadonnées suivantes dans la section MAP::WEB:

"ows_enable_request"   "*"

Voir aussi: http://mapserver.org/development/rfc/ms-rfc-67.html

Changements du Mapfile - métadonnée WCS

To avoid confusion only “wcs_*” and “ows_*” prefixed metadata entries are evaluated in OGC WCS services. Previous versions used “wms_*” prefixed entries as fallback which is dropped in version 6.0 in favor of forcing explicit decisions.

Changements du Mapfile - requêtes OGC - suppression du paramètre DUMP

Le paramètre DUMP dans LAYER a été retiré. pour activer le retour de géométries dans les requêtes getfeatureinfo WMS - GML (INFO_FORMAT=application/vnd.ogc.gml), le paramètre METADATA dans LAYER est utilisé à la place:

METADATA
  gml_geometries "geom"
  gml_geom_type "polygon"
  ...
END

Changements du Mapfile - capacité à échapper les guillemets simples/doubles

Vous pouvez maintenant échapper les guillemets simples et doubles dans les chaînes et les expressions logiques. Exemples:

NAME "RO\"AD" # double quote inside a a double quote delimited string
NAME 'RO\'AD' # single quote inside a a single quote delimited string
FILTER ('[CTY_NAME]' = 'Ita\'sca') # logical expression that contains a single quote

NOTE: Le caractère d’échappement (antislash) ne fonctionnera que si le caractère suivant est ”, ‘ ou .

For Windows users: if you have a path string delimited by single/double quotes that ends with , you will have to escape the last backslash.

SHAPEPATH "C:\ms4w\shapefiles\"
# should be modified to...
SHAPEPATH "C:\ms4w\shapefiles\\"

Changements MapScript PHP

  • PHP 5.2.0 ou plus récent est requis.

  • PHP/MapScript utilise maintenant des exceptions pour le rapport d’erreur. Toutes les erreurs sont capturables.

  • Les propriétés des objets peuvent être définies comme les autres objets php, c’est à dire myObj->myProperty = 10;

    NOTE: Les méthodes set/setProperty sont toujours disponibles.

  • Tous les constructeurs d’objets lancent une exception en cas d’échec

  • Les objects peuvent être créés avec l’opérateur php “new” c’est dire $myShape = ms_newShapeObj(MS_SHAPE_LINE); // ou $myShape = new shapeObj(MS_SHAPE_LINE);

    NOTE: “ms_newSymbolObj()” and “new symbolObj” are different:
    • ms_newSymbolObj() retourne l’id du symbole nouveau/existant.

    • new symbolObj() returns the symbolObj. You don’t need to

      l’obtenir avec getSymbolObjectById().

  • Cloneable objects should be cloned with the PHP clone keyword. There is no more clone methods.

  • Les propriétés de Class qui ont été supprimées

    • mapObj: imagetype, imagequality, interlace, scale, transparent
    • classObj: maxscale, minscale
    • layerObj: labelsizeitem, labelangleitem, labelmaxscale, labelminscale,
      maxscale, minscale, symbolscale, transparency
    • legendObj: interlace, transparent
    • scalebarObj: interlace, transparent
    • symbolObj: gap, stylelength
    • webObj: minscale, maxscale
  • Les méthode de Class qui ont été supprimées

    • projectionObj: free
    • lineObj: free
    • pointObj: free
    • rectObj: free
    • shapeObj: free, union_geos
    • symbolObj: free, getstylearray
    • imageObj: free
    • outputFormatObj: getformatoption, setformatoption
    • shapefileObj: free
    • layerObj: getFilter, getShape
  • referenceMapObj a de nouvelles propriétés: marker, markername, markersize, maxboxsize, minboxsize

  • shapeFileObj is automatically closed/writed on destroy. (At the end of the script or with an explicit unset())

  • la méthode layerObj->clearProcessing() maintenant retourne void.

  • mapObj->queryByIndex(): default behavior for the addToQuery parameter was not ok, now it is.

  • Méthodes qui retournent maintenant MS_SUCCESS/MS_FAILURE:

    • symbolObj: setPoints, setPattern
    • scalebarObj: setImageColor
    • outputFormatObj: validate
    • layerObj: setProcessing, addFeature, draw
    • mapObj: moveLayerUp, moveLayerDown, zoomRectangle, zoomScale, setProjection,
      setWKTProjection, setLayersDrawingOrder
  • Méthodes qui retournent maintenant NULL en cas d’échec:

    • classObj: clone
    • styleObj: clone
    • layerObj: nextShape, getExtent
    • mapObj: clone, draw, drawQuery getLayerByName, getProjection,
  • Méthodes qui maintenant retournent un tableau vide

    • symbolObj: getPatternArray
    • layerObj: getItems, getProcessing, getGridIntersectionCoordinates
    • mapObj: getLayersIndexByGroup, getAllGroupNames, getLayersDrawingOrder, getAllLayerNames

MapScript (toutes versions)

The layer query result handing has been re-worked (again) to address some issues introduced in the 5.4/5.6 versions. Gone are resultsGetShape and getFeature methods. You should now use a refactored getShape method to access layer shapes. That method takes a resultObj and returns a shapeObj. Typical use would be (in Perl):

$layer->queryByRect($map, $map->{extent}); # layer is still open

for($i=0; $i<$layer->getNumResults(); $i++) {
  $shape = $layer->getShape($layer->getResult($i));
  print "$i: ". $shape->getValue(1) ."\n";
}

$layer->close();

A resultObj encapsulates the data used to manage a result set.

To access shapes independently of a query use the new resultObj class:

$layer->open(); $shape = $layer->getShape(new mapscript::resultObj(1)); $layer->close();

Voir http://mapserver.org/development/rfc/ms-rfc-65.html pour plus d’informations.

OUTPUTFORMAT

The OUTPUTFORMAT parameter validation when reading from the mapfile will now trigger an error on some problems that in the past were silently fixed up. For instance using RGBA IMAGEMODE with JPEG format now triggers an error instead of switching to IMAGEMODE RGB silently.

The default outputformats names, drivers and mimetypes have been significantly reorganized:

  • png : AGG/PNG (image/png)
  • jpeg : AGG/JPEG (image/jpeg)
  • gif : GD/GIF (image/gif)
  • png8 : AGG/PNG8 (comme AGG/PNG, mais avec 256 couleurs quantization appliquée) (image/png; mode=8bit)

  • png24 : AGG/PNG (pour la compatibilité descendante) (image/png; mode=24bit)

  • pdf : CAIRO/PDF (application/x-pdf)
  • svg : CAIRO/SVG (image/svg+xml)
  • GTiff : GDAL/GTiff (image/tiff)
  • kml : KML (application/vnd.google-earth.kml++xml)
  • kmz : KMZ (application/vnd.google-earth.kmz)

Rasters

  • Le support pour faire le rendu des rasters sans GDAL a été enlevé. Maintenant les couches RASTER (ou couches WMS) nécessitent que MapServer soit compiler avec le support de la bibliothèque GDAL.

  • Le changement ci-dessus signifie aussi qu’il n’y a plus de support pour les couches raster EPPL.

Fonctionnalités dépréciées

  • Support for Flash/SWF output has been removed as part of the rendering overhaul because it was no longer compatible with the new architecture. Support for Flash/SWF could be reintroduced but would require a non trivial amount of work (i.e. would require funding).
  • Support for “CONNECTIONTYPE MyGIS” has been dropped since it was no longer being maintained and there are better ways to use MySQL data sources theses days, going through OGR for instance.

Migration de MapServer 5.4 à 5.6

This section documents the changes that must be made to MapServer applications when migrating from version 5.4.x (or earlier versions) to 5.6 (i.e. backwards incompatibilities), as well as information on some of the new features.

Orientation de l’axe WFS 1.1

The axis order in previous versions of the WFS specifications was to always use easting (x or lon ) and northing (y or lat). WFS 1.1 specifies that, depending on the particular SRS, the x axis may or may not be oriented West-to-East, and the y axis may or may not be oriented South-to-North. The WFS portrayal operation shall account for axis order. This affects some of the EPSG codes that were commonly used such as ESPG:4326. The current implementation makes sure that coordinates returned to the server for the GetFeature request reflect the inverse axis orders for EPSG codes between 4000 and 5000.

Changement du type mime pour les sorties de l’imagemap

RFC 36 added support for templated outptformats, but this new feature was not available for WMS GetFeatureInfo output (see ticket #3024). In MapServer 5.6 this has been resolved by implementing lookup of output formats for query templates by mime-type. However this caused a conflict for the text/html mime-type between the actual text/html query templates and the preconfigured imagemap outputformat which also used the text/html mime-type.

In order to resolve this conflict, the mime-type of the imagemap outputformat has been changed to “text/html; driver=imagemap”. This is unlikely to cause much side-effects to existing applications, but the change is documented here just in case.

Migration de MapServer 5.2 à 5.4

This section documents the changes that must be made to MapServer applications when migrating from version 5.2. (or earlier versions) to 5.4 (i.e. backwards incompatibilities), as well as information on some of the new features.

Nouveaux prérequis pour les mapfiles, les “symbolsets” et les templates

Due to some potential security vulnerabilities that were uncovered in previous versions of MapServer, RFC-56 introduced a number of changes to tighten access control on mapfiles and templates and limit the risk of leaking arbitrary file contents. These changes were introduced in version 5.4.0, and were also backported to v5.2.2 and 4.10.4.

Les nouveaux prérequis sont comme suivants:

  • The MAP and SYMBOLSET keywords must be added to any mapfile and symbolset that did not contain them already.
  • All MapServer templates must be updated to contain the “MapServer Template” magic string on the first line. This string can be embedded in a comment depending on the template formet and the whole line will be skipped in the output generation. e.g.
    • En HTML: <!– Template MapServer –>

    • En JavaScript: // Template MapServer

Voir aussi: http://mapserver.org/development/rfc/ms-rfc-56.html

Migration de MapServer 4.10 à 5.0

This section documents the changes that must be made to MapServer applications when migrating from version 4.10.x (or earlier versions) to 5.x (i.e. backwards incompatibilities), as well as information on some of the new features.

Changements du Mapfile

Attribute Bindings: In an effort to stem the tide of keyword overload and add functionality MapServer 5.0 supports a new method of binding feature attributes to STYLE and LABEL properties. In the past keywords like ANGLEITEM or LABELSIZEITEM were used, now you denote the attribute in the context of the property being bound. For example, to bind an attribute to a label size you’d do:

LABEL
  ...
  SIZE [mySizeItem]
END

The []’s denote a binding (as with logical expressions). The following keywords are no longer supported and their presence will throw an error:

  • Layer: LABELANGLEITEM, LABELSIZEITEM
  • Style: ANGLEITEM, SIZEITEM

The following properties can accept bindings:

  • Style: angle, color, outlinecolor, size, symbol
  • Label: angle, color, outlinecolor, size, font, priority

Les couleurs peuvent être donnés comme une valeur hexadécimale (par exemple #FFFFFF) ou un triplet RVB (par exemple 255 255 255).

Layer Transparency: The values for the TRANSPARENCY parameter have always been backwards and in an effort to resolve that the parameter has been renamed OPACITY. TRANSPARENCY is still recognized by the mapfile parser but is deprecated and should be avoided.

Scale Parameters: MapServer’s handling of scale has long been a source for confusion. The values use in a layer MINSCALE are really the denominators from a representative fraction (e.g. 1:24000). To help clarify this all scale parameters are now end with DENOM. So MINSCALE => MINSCALEDENOM, SYMBOLSCALE => SYMBOLSCALEDENOM, and so on. The mapfile parser still recognizes the older keywords but they are deprecated and should be avoided.

Changements des fichiers de symboles

Symbol Style: STYLEs are used within a symbol definition to store dash patterns for line symbolization. However, there is potential confusion with the style object that is used within class definitions. To resolve that confusion the symbol STYLE parameter has been renamed PATTERN. The symbol file parser will still recognize the STYLE keyword but it is deprecated and should be avoided.

Changements de stylage/symbologie

Prior to MapsServer 5.0, if a pixmap symbol was used in style on a Line Layer, the symbol was used as a brush to draw the line. In MapServer 5.0, it is possible to draw the pixmap symbol along the line (Note that this was available using a true type symbol). To achieve this, the user needs to use the parameter GAP with it’s pixmap symbol definition in the symbol file. The GAP represents the distance between the symbols. If the GAP is not given, the pixmap symbol will be used as a brush.

Changements du rendu AGG

see the AGG rendering specifics for the changes relating to the addition of the Antigrain Geometry rendering engine.

Changements de configuration des URL

Previous versions of the MapServer CGI program allowed certain parameters to be changed via a URL using a cumbersome syntax such as map_layer_0_class_0_color=255+0+0 which changes the color in one classObj. Not only was this cumbersome for users but also from a code maintenance perspective since we had to maintain separate loaders for URL-based config and file-based config. RFC-31 attempts to streamline both by migrating to a single object loading function that can be used with strings (either in MapScript or via URL) or with files.

So, in the past you have to change parameters one-at-a-time. Now you can pass chunks of mapfiles (with security restrictions) to the CGI interface. The map_object notation is still necessary to identify which object you want to modify but you can change multiple properties at one time. Note that you can use either a ‘_’ or a ‘.’ to separate identifiers.

Exemple 1, changement de l’objet scalebar :

...&map.scalebar=UNITS+MILES+COLOR+121+121+121+SIZE+300+2&...

Exemple 2, changement du style de présentation :

...&map.layer[lakes].class[0].style[0]=SYMBOL+crosshatch+COLOR+151+51+151+SIZE+15&...

Exemple 3, création d’un nouvel objet

...&map_layer[3]=FEATURE+POINTS+500000+1000000+END+TEXT+'A+test+point'+END&...

La variable identifie un objet unique (par son nom ou son index dans le cas de layerObj et de classObj). La valeur est un extrait d’un mapfile. Vous ne pouvez pas créer de nouveaux objets autres que les entités embarquées à ce niveau.

Validation patterns for mapserv attribute queries

Attribute queries (qstring) done via the mapserv CGI could theoretically be used for SQL injection.

No exploit has been reported, but in order to mitigate the risk, a new validation pattern mechanism has been added in 5.0.

In the case of qstring attribute queries, the qstring_validation_pattern layer-level metadata is required for qstring queries to work. The metadata value is a regular expression that the qstring value must match otherwise mapserv produces a fatal error. A fatal error is also produced if qstring is used but qstring_validation_pattern is not provided.

Note that similar validation pattern mechanism has been available for %variable% substitutions since version 4.10, but in this case it is optional. The pattern for %myvar% is provided via a metadata called myvar_validation_pattern.

Changements SWIG MapScript (Python, Perl, CSharp, Java)

Layer Transparency: The layerObj transparency parameter is now called opacity. Scripts setting that value in code must be updated.

Symbol Style: the symbolObj style parameter is now called pattern. MapScript does not allow direct modification of that parameter. In Swig-based languages the symbolObj method setStyle is now called setPattern. In PHP/MapScript, the methods setStyle and getStyle are now called setPattern and getPattern.

A new msGetVersionInt() function returning the current MapServer version in integer format has been added to facilitate version checks in the future. Given version x.y.z, it returns (x*0x10000 + y*0x100 + z). For instance, for v5.0.0 it will return 0x050000 (note the hexadecimal notation).

Changements PHP/MapScript

Layer Transparency: The layerObj transparency parameter is now called opacity. The old “transparency” name is deprecated and will be removed in a future release. Scripts getting/setting that value in code must be updated.

All occurrences of scale, minscale, maxscale, etc... parameters have been deprecated and renamed with a “denom” suffix (e.g. minscale becomes minscaledenom, etc.). The deprecated parameters will be removed in a future release. Scripts getting/setting them must be updated.

SymbolObj style has been renamed pattern. The old “stylelength” parameter and setStyle() and getStyleArray() methods have been deprecated and “patternlength”, setPattern() and getPatternArray() should be used instead. They will be removed in a future release.

layer.getShape(int tileindex, int shapeindex)) has been deprecated and renamed to layer.getFeature(int shapeindex [, int tileindex = -1]) to match the SWIG MapScript equivalent. Note that the order of the arguments is reversed since tileindex is optional in getFeature().

class.getExpression() and layer.getFilter() have been deprecated and renamed to class.getExpressionString() and layer.getFilterString() to match what we have in SWIG MapScript. The String suffix in the function name also more clearly indicates that the return value is not an object but a string representation of it.

A new ms_GetVersionInt() function returning the current MapServer version in integer format has been added to facilitate version checks in the future. Given version x.y.z, it returns (x*0x10000 + y*0x100 + z). For instance, for v5.0.0 it will return 0x050000 (note the hexadecimal notation).

Web Map Service (WMS) OGC

Required Parameters for GetMap and GetFeatureInfo: previously, MapServer did not check for the following parameters when responding to an OGC:WMS GetMap or GetFeatureInfo request:

  • SRS
  • FORMAT
  • WIDTH
  • HEIGHT
  • STYLES ou SLD / SLD_BODY

  • BBOX

That is, a GetMap request would process without error if these were not passed by the WMS client.

A compliant OGC:WMS 1.1.0 and 1.1.1 REQUIRES these parameters. This may affect OGC:WMS client requests who were not passing these values. Ticket 1088 fully documents this issue. In addition to WMS compliance, this was also decided that by adding this constraint, if an OGC client request (as described earlier) breaks something, people should fix their client anyway since if they change WMS vendor, they will have problems as well.

Web Feature Service (WFS) OGC

Sensor Observation Service (SOS) OGC

  • The format of MAP/LAYER/METADATA/sos_describesensor_url has been changed such that users now must format the value per:

“sos_describesensor_url” “http://example.org/sml/%procedure%.xml

This change has been made to clarify and unify the meaning of procedure within SOS Server’s context of a DescribeSensor request.
  • Metadata associated with an observedProperty element’s swe:component value have been changed to support a URN scheme, instead of the previous “sos_componenturl” metadata. The “sos_componenturl” metadata is no longer supported. Instead, “sos_observedproperty_authority” and “sos_observedproperty_version” should be used to format the swe:component value.

Changements de la compilation

Le fichier principal inclus de MapServer a été renommé de “map.h” en “mapserver.h”.

Un nouveau script mapserver-config a été créé avec les options suivantes:

Usage: mapserver-config [OPTIONS]
Options:
 [--libs]
 [--dep-libs]
 [--cflags]
 [--defines]
 [--includes]
 [--version]

Les bibliothèques avec liens statiques et partagées pour MapSserver ont été renommées respectivement en libmapserver.x.y.so et libmapserver.a.

The –enable-coverage configure option has been renamed to –enable-gcov since the former name led users to think it might be related to enabling support for WCS or Arc/Info coverages:

--enable-gcov           Enable source code coverage testing using gcov

Fonctionnalités allant vers une dépréciation

Quelques fonctionnalités présentes dans MapServer sont susceptibles d’être supprimées dans un prochaine version. Des fonctionnalités sont susceptibles de passer en dépréciation parce que:

  • elles ont été remplacées par une solution supérieure ou plus adaptée

  • elles ont cessées d’être maintenues

Users of these features should be prepared for these upcoming changes and start adapting their mapfiles in consequence. If you have strong and motivated objections as to the removal of one or more of these features please open a discussion in the usual MapServer communication channels.

Cartoline symbols: these were a hack to overcome GD weaknesses, and their functionality is now supported by the AGG renderer. They have become poorly supported in current MapServer versions. Keywords allowing for setting the style of line joins and caps will be moved to the STYLE block.

RGB/RGBA output with GD: support for RGB and RGBA image types will likely not be maintained anymore. PC256 will continue to be supported with GD, while RGB and RGBA will liekly only be supported with AGG