Couche union

Author:Tamas Szekeres
Contact:szekerest at gmail.com
Author:Jeff McKenna
Contact:jmckenna at gatewaygeomatics.com
Last Updated:

11/04/2011

Description

Depuis la version 6.0, MapServer a la capacité d’afficher les entités de multiples couches (appelées ‘couches source’) dans une couche mapfile seule. Cette fonctionnalité a été ajoutée via la MS RFC 68: Support for combining features from multiple layers.

Prérequis

C’est une option native de MapServer qui n’utilise aucun bibliothèque externe pour ce fonctionnement.

Configuration du mapfile

  • Le paramètre CONNECTIONTYPE doit être défini à UNION.

  • Le paramètre CONNECTION doit contenir un liste (séparée par un virgule) de noms de source de couches.

  • Tous les couches source et la couche union doivent être du même TYPE (par exemple, ils sont tous de TYPE POINT ou de TYPE POLYGON, etc.)

Note

Vous souhaiterez peut être désactiver la visibilité (changer leur STATUS) des couches source pour éviter d’afficher les entités deux fois.

Par exemple

LAYER
  NAME "union-layer"
  TYPE POINT
  STATUS DEFAULT
  CONNECTIONTYPE UNION
  CONNECTION "layer1,layer2,layer3" # reference to the source layers
  PROCESSING "ITEMS=itemname1,itemname2,itemname3"
  ...
END
LAYER
  NAME "layer1"
  TYPE POINT
  STATUS OFF
  CONNECTIONTYPE OGR
  CONNECTION ...
  ...
END
LAYER
  NAME "layer2"
  TYPE POINT
  STATUS OFF
  CONNECTIONTYPE OGR
  CONNECTION ...
  ...
END
LAYER
  NAME "layer3"
  TYPE POINT
  STATUS OFF
  CONNECTIONTYPE OGR
  CONNECTION ...
  ...
END

Attributs des entités

Dans la définition de LAYER, vous pouvez faire référence à n’importe quel attribut supporté par chacune des couches source. En plus des attributs des couches source, la couche union fournit les attributs supplémentaires suivants:

  1. Combine_SourceLayerName - The name of the source layer the feature belongs to
  2. Combine_SourceLayerGroup - The group of the source layer the feature belongs to

During the selection / feature query operations only the ‘Combine_SourceLayerName’ and ‘Combine_SourceLayerGroup’ attributes are provided by default. The set of the provided attributes can manually be overridden (and further attributes can be exposed) by using the ITEMS processing option (refer to the example above).

Classes et styles

Nous pouvons définir la symbologie et l’étiquetage pour les couches union de le même manière que pour n’importe quelle autre couche en spécifiant les classes et les styles. En plus l’option STYLEITEM AUTO est aussi supportée par la couche union, qui fournit l’affichage des entités comme indiqué par les couches source. Les couches source pourront aussi utiliser la configuration STYLEITEM AUTO si la source de données indiquée fournit cet élément.

Projections

Pour la vitesse, il est recommandé de toujours utiliser la même projection pour la couche union et les couches source. Cependant MapServer reprojettera les couches source vers la la couche union si c’est demandé. (pour plus d’informations sur les projections dans MapServer, se référer à PROJECTION)

Options de traitements supportées

The following processing options can be used with the union layers:

UNION_STATUS_CHECK (TRUE or FALSE)
Controls whether the status of the source layes should be checked and the invisible layers (STATUS=OFF) should be skipped. Default value is FALSE.
UNION_SCALE_CHECK (TRUE or FALSE)
Controls whether the scale range of the source layes should be checked and the invisible layers (falling outside of the scale range and zoom range) should be skipped. Default value is TRUE.
UNION_SRCLAYER_CLOSE_CONNECTION
Override the connection pool setting of the source layers. By introducing this setting we alter the current behaviour which is equivalent to:
UNION_SRCLAYER_CLOSE_CONNECTION=ALWAYS

Exemples

Exemple de mapfile

L’exemple suivant contient 3 couches source dans différents formats, et une couche (jaune) dans une projection différente. La couche union utilise le paramètre STYLEITEM “AUTO” pour dessiner les styles pour les couches source. (dans ce cas MapServer reprojettera les entités jaunes, en EPSG:4326, pour la couche union, qui est en code EPSG:3978).

../_images/union.png
MAP
...
PROJECTION
  "init=epsg:3978"
END
...
LAYER
  NAME 'unioned'
  TYPE POLYGON
  STATUS DEFAULT
  CONNECTIONTYPE UNION
  CONNECTION "red,green,yellow"
  STYLEITEM "AUTO"
  # Define an empty class that will be filled at runtime from the color and
  # styles read from each source layer.
  CLASS
  END
  PROJECTION
    "init=epsg:3978"
  END
END

LAYER
  NAME 'red'
  TYPE POLYGON
  STATUS OFF
  DATA 'nb.shp'
  CLASS
     NAME 'red'
     STYLE
       OUTLINECOLOR 0 0 0
       COLOR 255 85 0
     END
  END
END

LAYER
  NAME 'green'
  TYPE POLYGON
  STATUS OFF
  CONNECTIONTYPE OGR
  CONNECTION 'ns.mif'
  CLASS
     NAME 'green'
     STYLE
       OUTLINECOLOR 0 0 0
       COLOR 90 218 71
     END
  END
END

LAYER
  NAME 'yellow'
  TYPE POLYGON
  STATUS OFF
  CONNECTIONTYPE OGR
  CONNECTION 'pei.gml'
  CLASS
     NAME 'yellow'
     STYLE
       OUTLINECOLOR 0 0 0
       COLOR 255 255 0
     END
  END
  PROJECTION
    "init=epsg:4326"
  END
END

END # Map

Exemple PHP MapScript

<?php

// open map
$oMap = ms_newMapObj( "D:/ms4w/apps/osm/map/osm.map" );

// create union layer
$oLayer = ms_newLayerObj($oMap);
$oLayer->set("name", "unioned");
$oLayer->set("type", MS_LAYER_POLYGON);
$oLayer->set("status", MS_ON);
$oLayer->setConnectionType(MS_UNION);
$oLayer->set("connection", "red,green,yellow");
$oLayer->set("styleitem", "AUTO");
$oLayer->setProjection("init=epsg:3978");
// create empty class
$oClass = ms_newClassObj($oLayer);
...

?>