Adding Layers To A Map

The preceding examples have created or modified the XML for layer definitions in memory. To add those layers to a map:

1. Save the layer definition to a resource stored in the session repository.
2. Add that resource to the map.

This function adds takes a layer’s XML, creates a resource in the session repository from it, and adds that layer resource to a map.

    <?php

    require_once('../common/common.php');

    ///////////////////////////////////////////////////////////

    function add_layer_definition_to_map($layerDefinition,

      $layerName, $layerLegendLabel, $mgSessionId,

      $resourceService, &$map)

    // Adds the layer definition (XML) to the
    map.

    // Returns the layer.

    {

        // Validate the XML.

        $domDocument = new DOMDocument;

        $domDocument->loadXML($layerDefinition);

        if (! $domDocument->schemaValidate(

           "$schemaDirectory\LayerDefinition-1.1.0.xsd") )

        {

            echo "ERROR: The new XML document
    is invalid.

              <BR>\n.";

            return NULL;

        }

        // Save the new layer definition to the
    session

        // repository

        $byteSource = new MgByteSource($layerDefinition,

          strlen($layerDefinition));

        $byteSource->SetMimeType(MgMimeType::Xml);

        $resourceID = new MgResourceIdentifier(

           "Session:$mgSessionId//$layerName.LayerDefinition");

        $resourceService->SetResource($resourceID,

          $byteSource->GetReader(), null);

        $newLayer = add_layer_resource_to_map($resourceID,

          $resourceService, $layerName, $layerLegendLabel,

          $map);

        return $newLayer;

    }

This function adds a layer resource to a map.

    function add_layer_resource_to_map($layerResourceID,

      $resourceService, $layerName, $layerLegendLabel, &$map)

    // Adds a layer defition (which can be stored
    either in the

    // Library or a session repository) to the
    map.

    // Returns the layer.

    {

        $newLayer = new MgLayer($layerResourceID,

          $resourceService);

        // Add the new layer to the map's layer
    collection

        $newLayer->SetName($layerName);

        $newLayer->SetVisible(true);

        $newLayer->SetLegendLabel($layerLegendLabel);

        $newLayer->SetDisplayInLegend(true);

        $layerCollection = $map->GetLayers();

        if (! $layerCollection->Contains($layerName) )

        {

            // Insert the new layer at position
    0 so it is at

            // the top of the drawing order

            $layerCollection->Insert(0, $newLayer);

        }

        return $newLayer;

    }

This function adds a layer to a legend’s layer group.

    function add_layer_to_group($layer, $layerGroupName,

      $layerGroupLegendLabel, &$map)

    // Adds a layer to a layer group. If necessary,
    it creates

    // the layer group.

    {

        // Get the layer group

        $layerGroupCollection = $map->GetLayerGroups();

        if ($layerGroupCollection->Contains($layerGroupName))

        {

            $layerGroup =

              $layerGroupCollection->GetItem($layerGroupName);

        }

        else

        {

            // It does not exist, so create it

            $layerGroup = new MgLayerGroup($layerGroupName);

            $layerGroup->SetVisible(true);

            $layerGroup->SetDisplayInLegend(true);

              $layerGroup->SetLegendLabel($layerGroupLegendLabel);

            $layerGroupCollection->Add($layerGroup);

        }

        // Add the layer to the group

        $layer->SetGroup($layerGroup);

    }