[Cartoweb-users] Problem creating new layers

Oliver Christen oliver.christen at camptocamp.com
Wed Jul 23 04:14:49 EDT 2008


just commenting my example: 
it works fine with mapoverlay when doing it correctly >_<

$layer->connectionType = MS_POSTGIS;
$layer->type = MS_LAYER_LINE;



  ----- Original Message ----- 
  From: Oliver Christen 
  To: Nicolás Eugenio Ozimiça 
  Cc: cartoweb-users at lists.maptools.org 
  Sent: Wednesday, July 23, 2008 9:50 AM
  Subject: Re: [Cartoweb-users] Problem creating new layers


  Hi

  after the map modification, you could try $msMapObj->save('/tmp/exportmap.map'); and see if the modifications you have done are correctly outputed and look ok.

  Even if the layer doesnt appear in the layer tree, it should be displayed on map.

  I noticed the layer type may not be set correctly by mapoverlay, try doing it with mapscript (see below)

  I just had a try with inserting a non-existing postgis layer into a mapfile using mapoverlay ( and a bit of mapscript because some properties are not supported by mapoverlay) and my layer was displayed correctly on map.

  I copy that exemple here, maybe it helps:

  $color = new ColorOverlay();
  $color->red = 255;
  $color->green = 0;
  $color->blue = 0;
          
  $style = new StyleOverlay();
  $style->action = BasicOverlay::ACTION_INSERT;
  $style->color = $color;
  $style->size = 5;
  $style->symbol = "circle";

  $class = new ClassOverlay();
  $class->action = BasicOverlay::ACTION_INSERT;
  $class->name = 'foobar';
  $class->styles = array($style);

  $layer = new LayerOverlay();
  $layer->name = "routing";
  //$layer->connectiontype = "postgis";
  $layer->connection = "user=xxx password=yyy host=localhost dbname=zzz";
  $layer->data = "the_geom FROM (SELECT id, the_geom FROM public.result WHERE id = '" . $requ->id . "') AS foo USING UNIQUE id USING SRID=21781";

  $layer->classes = array($class);
  //$layer->type = "LINE";
  $layer->action = BasicOverlay::ACTION_INSERT;

  $mapOverlay = $this->serverContext->getPluginManager()->mapOverlay;
  $mapOverlay->updateMap($layer);

  $msMapObj = $this->getServerContext()->getMapObj();
  $msLayer = $msMapObj->getLayerByName('routing');
  $msLayer->set('connectiontype', MS_POSTGIS);
  $msLayer->set('type', MS_LAYER_LINE);

  if (!$msLayer)
  throw new CartoserverException("Routing results layer " .
      "$routingResultsLayer not found");
  $msLayer->set('status', MS_ON);

  $msMapObj->save('/tmp/exportmap.map');
    ----- Original Message ----- 
    From: Nicolás Eugenio Ozimiça 
    To: Oliver Christen 
    Cc: cartoweb-users at lists.maptools.org 
    Sent: Wednesday, July 23, 2008 12:57 AM
    Subject: Re: [Cartoweb-users] Problem creating new layers


    I've tried what you told me Oliver, but with no success.

    With the lines you gave:
    $msLayer = $this->serverContext->getMapObj()->getLayer($result->layers[0]->index);
    $msLayer->set('status', MS_ON);

    I also included these other lines:
    $msLayer->set('type', MS_LAYER_RASTER);
    $msLayer->setProcessing("BANDS=1,2,3");

    because the layer I try to create is a raster image.

    The only solution I see is having a set of empty layers in the mapfile (and also in the layers.ini), hidden from the menu layer tree, that when a user specifies a raster to be shown, is "put" in the first empty layer available. But this is something here we don't like very much.

    I'm using ajax, but I made a test without it, and no result either...

    Has someone else had trouble tring to create a raster layer with MapOverlay?



    On Fri, Jul 18, 2008 at 2:42 AM, Oliver Christen <oliver.christen at camptocamp.com> wrote:

      By the way, inserting a layer via mapOverlay only create a new layer on the map image, it will not create a new entry in the menu layer tree.
      Layers in the layer tree can only be selected/unselected if they already exist in your layers.ini, as far as I know.

      You could eventualy use the same mecanism as the ogcLayerLoader and trigger layer insertion via the use of the userLayers variable. See ClientOgcLayerLoader, the parts around $userLayer = new UserLayer();

      I have never do that myself but I presume it should be possible.

      regards
      Oliver
        ----- Original Message ----- 
        From: Nicolás Eugenio Ozimiça 
        To: Oliver Christen 
        Cc: cartoweb-users at lists.maptools.org 
        Sent: Thursday, July 17, 2008 4:42 PM
        Subject: Re: [Cartoweb-users] Problem creating new layers


        You're right! 

        Here is the code that tries to make visible a new layer (simulacionesGrupo):

            public function filterPostRequest(FilterRequestModifier $request) {
                $layerList = $request->getValue('layers');
                $layerList[] = 'simulacionesGrupo';
                $request->setValue('layers', $layerList); 
                $this->tempinfo = implode('--', $layerList);
            } 

        it is in the Client part of a plugin that implements FilterProvider.

        To create the layer:

            function initializeRequest($requ) {
                if ($requ) {
                    $pluginManager = $this->serverContext->getPluginManager();

                    if (empty($pluginManager->mapOverlay))
                        throw new CartoserverException("mapOverlay plugin not loaded, ");

                    $mapOverlay = $pluginManager->mapOverlay;
                    $layer = new LayerOverlay();
                    $layer->name = "simulacionesGrupo";
                    $layer->action = BasicOverlay::ACTION_INSERT;
                    $layer->data = "raster/ozono.99.tif";
                    $result = $mapOverlay->updateMap($layer);
                }
            }

        it is in the Server part of the same plugin that extends ClientResponderAdapter.

        Anyway, if the "simulacionesGrupo" layer is defined in the mapfile, and the line with ACTION_INSERT is not used in the last piece of code, and the next line is commented in 'layers.ini':
        ; mapInfo.initialMapStates.default.layers.simulacionesGrupo.selected = true

        it doesn't show up in the main map.




        On Thu, Jul 17, 2008 at 10:25 AM, Oliver Christen <oliver.christen at camptocamp.com> wrote:

          Hi

          without looking at your code, I cant really know what may or may not happens.

          regards
          Oliver
            ----- Original Message ----- 
            From: Nicolás Eugenio Ozimiça 
            To: cartoweb-users at lists.maptools.org 
            Sent: Thursday, July 17, 2008 4:16 PM
            Subject: [Cartoweb-users] Problem creating new layers


            Hi all!

            I'm using the 'mapOverlay' plugin in order to modify the layers of my project. It has worked well to modify existing layers, but when I try to insert a new one, it simply does nothing.

            Perhaps it is related to another problem I'm facing: I can only hide a layer with "FilterProvider". If I try to make visible a layer that is not set as visible by default in the "layers.ini" file, nothing happens...

            I hope someone could help!
            Thanks in advance!

            -- 
            Nicolás Eugenio Ozimiça
            Universidad de Chile 


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


            _______________________________________________
            Cartoweb-users mailing list
            Cartoweb-users at lists.maptools.org
            http://lists.maptools.org/mailman/listinfo/cartoweb-users




        -- 
        Nicolás Eugenio Ozimiça
        Universidad de Chile 



    -- 
    Nicolás Eugenio Ozimiça
    Universidad de Chile 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.maptools.org/pipermail/cartoweb-users/attachments/20080723/db02357d/attachment.html


More information about the Cartoweb-users mailing list