[Cartoweb-users] Changing selected layers in code

Oliver Christen oliver.christen at camptocamp.com
Mon Feb 4 06:06:09 EST 2008


Hi

the layers's initial state (selected, frozen, ..) are used in ClientLayers.php function createSession.

        if (!is_null($initialMapState->layers)) {
            foreach ($initialMapState->layers as $initialLayerState) {
                $this->layersData[$initialLayerState->id] = $initialLayerState;
            }
        }

check if the some initialMapState have been set and if so, set the layersData array with the values.

replacing/modifying the existing initialMapState process seems a bit tricky so I would suggest to insert a new piece of code just after the $initialMapState handling but this time you would simply get the values you want for your dynamicaly selected layers.

            foreach ($dynamicInitialMapStates as $dynamicInitialMapState) {
                $this->layersData[$dynamicInitialMapState->id] = $dynamicInitialMapState;
            }

you simply have to be sure to have the correct content in your $dynamicInitialMapState variable

dynamicInitialMapState should be a array of InitialMapState object
InitialMapState->id
InitialMapState->location
InitialMapState->layers where layers is a LayerState object
LayerState->id
LayerState->hidden
LayerState->frozen
LayerState->selected
LayerState->unfolded

$dynamicInitialMapStates should be generated by you. You can do it directly in the (extended) layers plugin or in another plugin (in which case you have to use $this->cartoclient->getPluginManager()->getPlugin('your_plugin_name')->dynamicInitialMapStates to access it)

regards
Oliver
  ----- Original Message ----- 
  From: Alessandro Muzzetta 
  To: cartoweb-users at lists.maptools.org 
  Sent: Wednesday, January 23, 2008 1:25 AM
  Subject: [Cartoweb-users] Changing selected layers in code


  Hello,

  is it possible to change the layers that are activated by default directly in code instead of having to change the layers.ini file?

  I have several dozen layers of which only two will be active at any given time.  Deciding which two layers will be displayed is going to be decided by an algorithm written in php, not by the user.  At every page refresh, the algorithm, based on several parameters, will set just two layers to selected. 
  Is there a way to do this within Cartoweb in php?

  The only ugly solution I have thought of so far is to overwrite the layers.ini file with a new one and having the pertinent layers marked as selected.  However, aside being ugly, this runs into problems with caching. 

  Any help would be appreciated.

  Thanks

  -- 
  Alessandro Muzzetta
  IES Solutions Srl
  Catania Office
  Via Vulcano 10 - I-95030 Gravina di Catania, Italy
  Email: a.muzzetta at i4es.it
  Phone/Fax: +39 095211640
  Skype: alex-tecnia 


------------------------------------------------------------------------------


  _______________________________________________
  Cartoweb-users mailing list
  Cartoweb-users at lists.maptools.org
  http://lists.maptools.org/mailman/listinfo/cartoweb-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.maptools.org/pipermail/cartoweb-users/attachments/20080204/98394500/attachment.html


More information about the Cartoweb-users mailing list