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

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

function add_layer_definition_to_map($layerDefinition,

  $layerName, $layerLegendLabel, $mgSessionId,

  $resourceService, &$map)

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

// Returns the layer.

{

    include('../Common.php');

    // Validate the XML.

    $domDocument = new DOMDocument;

    $domDocument->loadXML($layerDefinition);

    if (! $domDocument->schemaValidate(

       "$schemaDirectory\LayerDefinition-1.0.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);

}

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