/** * 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); } } }
/** * 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); } }