function postgisquery($NewPointArray, $layer, $fields, $pg_query_type, $function, $buffer, $where = 0) { global $HTTP_FORM_VARS; global $whereClause; $RubberHeight = $HTTP_FORM_VARS["RubberHeight"]; $RubberWidth = $HTTP_FORM_VARS["RubberWidth"]; $map_x = $HTTP_FORM_VARS["map_x"]; $map_y = $HTTP_FORM_VARS["map_y"]; $__bufferStr1 = ""; $__bufferStr2 = ""; global $postGisQuerySubstitute; // check if a sunstitute layer is set in conf $subLayer = $this->substituteQueryLayer($layer); // check if specific fields are set in conf $fields = $this->substituteQueryFields($layer, $fields); $the_geom = $this->getGeometryColumns($layer, "f_geometry_column"); $primeryKey = $this->getPrimeryKey($layer); if ($pg_query_type == "rectangle" && ($RubberWidth != NaN && $RubberWidth != 0 && $RubberHeight != NaN && $RubberHeight != 0)) { $x1 = $map_x; $x2 = $map_x - $RubberWidth; $y1 = $map_y; $y2 = $map_y - $RubberHeight; if ($x1 < $x2) { $minx = $x1; $maxx = $x2; } else { $minx = $x2; $maxx = $x1; } if ($y1 < $y2) { $maxy = $y1; $miny = $y2; } else { $maxy = $y2; $miny = $y1; } $geominx = $this->control->pixtogeoX($minx); $geominy = $this->control->pixtogeoY($miny); $geomaxx = $this->control->pixtogeoX($maxx); $geomaxy = $this->control->pixtogeoY($maxy); $NewPointArray = $geominx . " " . $geominy; $NewPointArray = $NewPointArray . "," . $geomaxx . " " . $geominy; $NewPointArray = $NewPointArray . "," . $geomaxx . " " . $geomaxy; $NewPointArray = $NewPointArray . "," . $geominx . " " . $geomaxy; $NewPointArray = $NewPointArray . "," . $geominx . " " . $geominy; } if ($pg_query_type == "rectangle" && ($RubberWidth == 0 && $RubberHeight == 0)) { $pg_query_type = "point"; $NewPointArray = $this->control->pixtogeoX($map_x) . " " . $this->control->pixtogeoY($map_y); } $geometryColumn = $this->getGeometryColumns($layer, f_geometry_column); $r = 0; $g = 255; $b = 0; if ($pg_query_type == "rectangle") { $pg_query_type = "polygon"; } switch ($pg_query_type) { case "point": $__wkt = "POINT({$NewPointArray})"; break; case "line": $__wkt = "LINESTRING({$NewPointArray})"; break; case "polygon": $NewPointArrayExplode = explode(",", $NewPointArray); $NewPointArray = $NewPointArray . "," . $NewPointArrayExplode[0]; $__wkt = "POLYGON(({$NewPointArray}))"; break; } $__geofactory = new geometryfactory(); if (!$this->control->proj) { $__srid = -1; } else { $__srid = "EPSG:" . $this->control->proj; } $__geoObj = $__geofactory->createGeometry($__wkt, $__srid); if ($buffer) { $__bufferStr1 = "buffer("; $__bufferStr2 = $buffer . "),"; } if ($where) { $whereStr = " AND " . $where; } else { $whereStr = ""; } if (!$this->control->proj) { $query = "select ST_AsText({$the_geom}) as geometry,{$primeryKey['attname']} as gid," . $fields . " from " . $subLayer . " where " . "ST_GeometryFromText('" . $__geoObj->getWKT() . "',-1) && {$the_geom}" . " and " . "ST_" . ucfirst($function) . "(ST_GeometryFromText('" . $__geoObj->getWKT() . "'," . "-1" . "),{$the_geom})" . $whereStr; } else { $query = "select ST_AsText(ST_Transform({$the_geom}," . $this->control->proj . ")) as geometry,{$primeryKey['attname']} as gid," . $fields . " from " . $subLayer . " where " . "ST_Transform(" . $__bufferStr1 . "ST_GeometryFromText('" . $__geoObj->getWKT() . "'," . $this->control->proj . ")," . $__bufferStr2 . $this->getGeometryColumns($layer, srid) . ") && {$the_geom}" . " and " . "ST_" . ucfirst($function) . "(ST_Transform(" . $__bufferStr1 . "ST_GeometryFromText('" . $__geoObj->getWKT() . "'," . $this->control->proj . ")," . $__bufferStr2 . $this->getGeometryColumns($layer, srid) . "),{$the_geom})" . $whereStr; //echo $query; } global $depth; $this->wfsFilter .= "("; $this->wfsFilter .= $__geofactory->writeTag("open", null, "Filter", Null, True, True); //$depth++; $this->wfsFilter .= $__geofactory->writeTag("open", null, "{$function}", Null, True, True); //$depth++; $this->wfsFilter .= $__geofactory->writeTag("open", null, "PropertyName", Null, True, False); $this->wfsFilter .= $subLayer; $this->wfsFilter .= $__geofactory->writeTag("close", null, "PropertyName", Null, False, True); $this->wfsFilter .= $__geoObj->getGML(); //$depth--; $this->wfsFilter .= $__geofactory->writeTag("close", null, $function, Null, True, True); //$depth--; $this->wfsFilter .= $__geofactory->writeTag("close", null, "Filter", Null, True, False); $this->wfsFilter .= ")\n"; //$this->wfsFilter=urlencode($this->wfsFilter); $this->sfsql = $query; // Render the query extent $this->control->renderGeometry($this->control->convertpointarray_geo($__geoObj->getVertices(), $units), $__geoObj->getGeomType(), 2, $r, $g, $b); $query .= $whereClause; $result = $this->execQuery($query); //echo "<!-- hello ".$query."-->"; return $result; }