Exemplo n.º 1
0
 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;
 }