Exemplo n.º 1
0
 /**
  * SEARCH VIA ATTRIBUTES
  */
 function q_execAttributeQuery()
 {
     // Definition of search parameters with external methods
     if (isset($_REQUEST['externalSearchDefinition'])) {
         $this->qLayerName = $_REQUEST['layerName'];
         $this->qSearchLayerType = $_REQUEST['layerType'];
         $fldName = $_REQUEST['fldName'];
         $this->qStr = $_REQUEST['qStr'];
         pm_logDebug(3, $_REQUEST, "Parameters for REQUEST array \nfile: query.php->q_execAttributeQuery \n");
         // Default using search.xml definitions
     } else {
         $searchitem = $_REQUEST['searchitem'];
         foreach ($_REQUEST as $key => $val) {
             if ($key != "findlist" && $key != "searchitem") {
                 $searchArray[$key] = urldecode($val);
                 //utf8_encode($val);
             }
         }
         $search = new XML_search($this->map, $_SESSION['PM_SEARCH_CONFIGFILE']);
         $searchParams = $search->getSearchParameters($this->map, $searchitem, $searchArray);
         $this->qLayerName = $searchParams['layerName'];
         $this->qSearchLayerType = $searchParams['layerType'];
         $fldName = $searchParams['firstFld'];
         $this->qStr = $searchParams['qStr'];
         pm_logDebug(2, $searchArray, "Parameters for searchArray \nfile: query.php->q_execAttributeQuery \n");
         pm_logDebug(2, $searchParams, "Parameters for searchParams \nfile: query.php->q_execAttributeQuery");
     }
     // Return layer type
     $this->qLayer = $this->map->getLayerByName($this->qLayerName);
     //$this->qSearchLayerType = $this->qLayer->connectiontype;
     // Get group and glayer objects
     $GroupGlayer = PMCommon::returnGroupGlayer($this->qLayerName);
     $this->grp = $GroupGlayer[0];
     $this->glayer = $GroupGlayer[1];
     $this->XYLayerProperties = $this->glayer->getXYLayerProperties();
     $this->layerEncoding = $this->glayer->getLayerEncoding();
     if ($this->qSearchLayerType == "shape" || $this->qSearchLayerType == "ms" || $this->qSearchLayerType == "oracle") {
         if ($layFilter = $this->qLayer->getFilterString()) {
             $mapLayerFilterItem = $this->qLayer->filteritem;
             if ($layFilter[0] == '/') {
                 $operator = '=~';
             } else {
                 $operator = '=';
             }
             $this->qStr = "(\"[{$mapLayerFilterItem}]\" {$operator} {$layFilter} AND ({$this->qStr}) )";
             pm_logDebug(3, $this->qStr, "query string including FILTER -- query.php->q_execAttributeQuery");
         }
         if ($this->qSearchLayerType == "oracle") {
             @$this->qLayer->queryByAttributes(null, $this->qStr, MS_MULTIPLE);
         } else {
             @$this->qLayer->queryByAttributes($fldName, $this->qStr, MS_MULTIPLE);
         }
     }
 }
Exemplo n.º 2
0
Arquivo: map.php Projeto: sukma279/GIS
 /**
  * FOR ZOOM TO SELECTED.
  * Adds a new layer to the map for highlighting feature
  */
 private function pmap_addResultLayer($reslayer, $shpindexes)
 {
     if (isset($_SESSION["resulttilelayers"])) {
         $resulttilelayers = $_SESSION["resulttilelayers"];
         $resulttilelayer = $resulttilelayers[$reslayer];
     } else {
         $resulttilelayers = null;
         $resulttilelayer = null;
     }
     $qLayer = $this->map->getLayerByName($reslayer);
     $qlayType = $qLayer->type;
     $layNum = count($this->map->getAllLayerNames());
     // Test if layer has the same projection as map
     $mapProjStr = $this->map->getProjection();
     $qLayerProjStr = $qLayer->getProjection();
     $changeLayProj = false;
     if ($mapProjStr && $qLayerProjStr && $mapProjStr != $qLayerProjStr) {
         $changeLayProj = true;
         if ($_SESSION['MS_VERSION'] < 6) {
             $mapProjObj = ms_newprojectionobj($mapProjStr);
             $qLayerProjObj = ms_newprojectionobj($qLayerProjStr);
         } else {
             $mapProjObj = new projectionObj($mapProjStr);
             $qLayerProjObj = new projectionObj($qLayerProjStr);
         }
     }
     // New result layer
     if ($_SESSION['PM_TPL_MAP_FILE']) {
         // load from template map file
         $hlDynLayer = 0;
         $hlMap = ms_newMapObj($_SESSION['PM_TPL_MAP_FILE']);
         $hlMapLayer = $hlMap->getLayerByName("highlight_{$qlayType}");
         $hlMapLayer->set("name", "pmapper_reslayer");
         $newResLayer = ms_newLayerObj($this->map, $hlMapLayer);
     } else {
         // create dynamically
         $hlDynLayer = 1;
         $newResLayer = ms_newLayerObj($this->map);
         $newResLayer->set("name", "pmapper_reslayer");
         if ($qlayType == 0) {
             $newResLayer->set("type", 0);
             // Point for point layer
         } elseif ($qlayType == 1 || $qlayType == 2) {
             $newResLayer->set("type", 1);
             // Line for line && polygon layers
         }
         //##$newResLayer->set("type", $qlayType);  // Take always same layer type as layer itself
     }
     // Add selected shape to new layer
     //# when layer is an event theme
     if ($qLayer->getMetaData("XYLAYER_PROPERTIES") != "") {
         foreach ($shpindexes as $cStr) {
             $cList = preg_split('/@/', $cStr);
             $xcoord = $cList[0];
             $ycoord = $cList[1];
             $resLine = ms_newLineObj();
             // needed to use a line because only a line can be added to a shapeObj
             $resLine->addXY($xcoord, $ycoord);
             $resShape = ms_newShapeObj(1);
             $resShape->add($resLine);
             $newResLayer->addFeature($resShape);
         }
         //# specific for PG layers  <==== required for MS >= 5.6 !!!
     } elseif ($qLayer->connectiontype == 6) {
         $newResLayer->set("connection", $qLayer->connection);
         if (method_exists($newResLayer, "setConnectionType")) {
             $newResLayer->setConnectionType($qLayer->connectiontype);
         } else {
             $newResLayer->set("connectiontype", $qLayer->connectiontype);
         }
         $data = $qLayer->data;
         // use layers with complex queries that are too long to select results
         // cause maxscaledenom is not used...
         if ($qLayer->getMetaData("PM_RESULT_DATASUBSTITION") != "") {
             $data = $qLayer->getMetaData("PM_RESULT_DATASUBSTITION");
         }
         $newResLayer->set("data", $data);
         if ($qLayerProjStr) {
             $newResLayer->setProjection($qLayerProjStr);
         }
         $glList = PMCommon::returnGroupGlayer($reslayer);
         $glayer = $glList[1];
         $layerDbProperties = $glayer->getLayerDbProperties();
         $uniqueField = $layerDbProperties['unique_field'];
         $indexesStr = implode(",", $shpindexes);
         $idFilter = "({$uniqueField} IN ({$indexesStr}))";
         $newResLayer->setFilter($idFilter);
         //# 'normal' layers
     } else {
         // Add selected shape to new layer
         // Modified by Thomas RAFFIN (SIRAP)
         // use layers with complex queries that are too long to select results
         // cause maxscaledenom is not used...
         $olddata = false;
         if ($qLayer->getMetaData("PM_RESULT_DATASUBSTITION") != "") {
             $olddata = $qLayer->data;
             $qLayer->set("data", $qLayer->getMetaData("PM_RESULT_DATASUBSTITION"));
         }
         $qLayer->open();
         foreach ($shpindexes as $resShpIdx) {
             if (preg_match("/@/", $resShpIdx)) {
                 $idxList = explode("@", $resShpIdx);
                 $resTileShpIdx = $idxList[0];
                 $resShpIdx = $idxList[1];
             } else {
                 $resTileShpIdx = $resulttilelayer[$resShpIdx];
             }
             $resShape = PMCommon::resultGetShape($this->msVersion, $qLayer, null, $resShpIdx, $resTileShpIdx);
             // changed for compatibility with PG layers and MS >= 5.6
             // Change projection to map projection if necessary
             if ($changeLayProj) {
                 // If error appears here for Postgis layers, then DATA is not defined properly as:
                 // "the_geom from (select the_geom, oid, xyz from layer) AS new USING UNIQUE oid USING SRID=4258"
                 if ($resShape) {
                     $resShape->project($qLayerProjObj, $mapProjObj);
                 }
             }
             if ($resShape) {
                 $newResLayer->addFeature($resShape);
             }
         }
         $qLayer->close();
         // Modified by Thomas RAFFIN (SIRAP)
         // use layers with complex queries that are too long to select results
         // cause maxscaledenom is not used...
         // reset data tag
         if ($olddata) {
             $qLayer->set("data", $olddata);
         }
     }
     $newResLayer->set("status", MS_ON);
     $newResLayerIdx = $newResLayer->index;
     if ($hlDynLayer) {
         // SELECTION COLOR
         $iniClrStr = trim($_SESSION["highlightColor"]);
         $iniClrList = preg_split('/[\\s,]+/', $iniClrStr);
         $iniClr0 = $iniClrList[0];
         $iniClr1 = $iniClrList[1];
         $iniClr2 = $iniClrList[2];
         // CREATE NEW CLASS
         $resClass = ms_newClassObj($newResLayer);
         $clStyle = ms_newStyleObj($resClass);
         $clStyle->color->setRGB($iniClr0, $iniClr1, $iniClr2);
         $clStyle->set("symbolname", "circle");
         $symSize = $qlayType < 1 ? 10 : 5;
         $clStyle->set("size", $symSize);
     }
     // Move layer to top (is it working???)
     while ($newResLayerIdx < $layNum - 1) {
         $this->map->moveLayerUp($newResLayerIdx);
     }
 }