I bugged Armin a lot and he has always been very helpful.  I'd be happy to 
help out with some contributions.

Here is a good way to do the hilighting so that you don't have to add all of 
the lines to each shapes.  It scales better and works much much faster.  It 
works best with POSTGIS layers, but thats mostly what I deal with.  My users 
rarely ever query shape file based layers.

I based this off of a VERY modified 1.0.8 p.mapper.  In incphp/map.php 
replace pmap_checkResultLayers function and the the highlighting function 
that follows it with this.  On the older p.mapper versions you should be 
able to just drop it in.

All it does is create a dynamic layer by cloning the one that will be 
highlighted.  Then it writes it over the one being queried.  This works well 
if you need to have a big query limit set or you have lots of features in a 
layer.

    /*
     * CHECK IF THERE ARE RESULTLAYERS TO ADD
     ********************************************************/
    function pmap_checkResultLayers()
    {
      if (isset($_GET["resultlayer"]))
      {
        $resultlayerStr = $_GET["resultlayer"];

        if ($resultlayerStr == "remove")
        {
          session_unregister("resultlayers");
        }
        else
        {
          $resultlayer = explode(" ", $resultlayerStr);
          $reslayname = $resultlayer[0];
          $shpindexes = explode("|", $resultlayer[1]);
          $resultlayers[$reslayname] = $shpindexes;
          $_SESSION["hilayer"] = $reslayname;
          $_SESSION["resultlayers"] = $resultlayers;
          $this->pmap_addhiLayer($reslayname, $shpindexes);
        }
      }
      elseif (isset($_SESSION["resultlayers"]))
      {
        $resultlayers = $_SESSION["resultlayers"];

        foreach ($resultlayers as $reslayer => $shpindexes)
        {
          $this->pmap_addhiLayer($reslayer, $shpindexes);
        }
      }
    }
    /*
     * FOR ZOOM TO SELECTED.
     * Adds a new layer to the map for highlighting feature
     *****************************************************************/
    function pmap_addhiLayer($layerIn, $shpindexes)
    {

      if(!$layerIn)
        $layerIn = $_SESSION['activegroup'];

      $reslayers = $_SESSION['resultlayers'];

      if(!$reslayers)
      {
        $objects = $shpindexes;
      }
      else
      {
        $objects = $reslayers[$layerIn];
      }

      $clone = $this->map->getLayerByName($layerIn);

      $newResLayer = ms_newLayerObj($this->map);
      $newResLayer->set('type',$clone->type);
      $newResLayer->set('name','target');
      $newResLayer->set('data',$clone->data);
      $newResLayer->set('connection',$clone->connection);
      $newResLayer->set('connectiontype',$clone->connectiontype);

      $newResLayer->set('classitem','oid');
      $newResLayer->set('status',MS_ON);

      $limit = sizeof($objects);

      for($ii = 0;$ii < $limit;$ii++)
      {
        if($objects[$ii] != '')
        {
        if($ii == $limit - 1)
            $filterstring .= $objects[$ii];
        else
            $filterstring .= $objects[$ii].'|';
        }
      }

      if($limit > 0 || $_SESSION['queryresults'] || $filterstring != '')
      {
        $hiClass = ms_newClassObj($newResLayer);
        $hiClass->set('status',MS_ON);
        $hiClass->setExpression('/'.$filterstring.'/');

        // SELECTION COLOR
        $iniClrStr = trim($_SESSION["highlightColor"]);
        $iniClrList = preg_split('/[\s,]+/', $iniClrStr);
        $iniClr0 = $iniClrList[0];
        $iniClr1 = $iniClrList[1];
        $iniClr2 = $iniClrList[2];

        $hiStyle = ms_newStyleObj($hiClass);
        $hiStyle->set('symbolname','circle');
        $hiStyle->outlinecolor->setRGB($iniClr0,$iniClr1,$iniClr2);
        if($_SESSION["marker"] != 'outline')
        $hiStyle->color->setRGB($iniClr0,$iniClr1,$iniClr2);

        //increase the width of the line as we move out
        if($_SESSION['geo_scale'] > 80000)
           $symSize = 12;
        else
        {
           $symSize = ($qlayType < 1 ? 5 : 3);
        }

        $hiStyle->set('size',5);

        $this->hiliteLayer = $newResLayer;
      }
    }



--
Things are only difficult while you don't understand them.



Reply via email to