Quellcode durchsuchen

added BBOX validation for wfs data and qgis

Piotr Labudda vor 9 Jahren
Ursprung
Commit
790d631890
2 geänderte Dateien mit 24 neuen und 3 gelöschten Zeilen
  1. 12 1
      SE/se-lib/Api/WfsDataServer.php
  2. 12 2
      SE/se-lib/Api/WfsQgisServer.php

+ 12 - 1
SE/se-lib/Api/WfsDataServer.php

@@ -126,6 +126,17 @@ if($DBG){echo "ogcFilter(" . strlen($ogcFilter) . "): {$ogcFilter}\n";}
 			}
 			if (!empty($onlyCols)) $searchParams['cols'] = $onlyCols;
 		}
+		{// BBOX
+			// 54.26931096743426,18.48242909824306,54.26738118403914,18.478738378639246
+			$bbox = V::get('BBOX', '', $_GET);
+			if (!empty($bbox)) {
+				if (preg_match("/^\d+(.\d+)?,\d+(.\d+)?,\d+(.\d+)?,\d+(.\d+)?$/", $bbox, $matches)) {
+					$searchParams['f_the_geom'] = "BBOX:{$bbox}";
+				} else {
+					// throw new Exception("Error Processing Request", 1);// ?
+				}
+			}
+		}
 if($DBG){echo 'getItems:';print_r($searchParams);echo "\n";}
 		$items = $acl->getItems($searchParams);
 
@@ -160,7 +171,7 @@ if($DBG){echo 'item['.$itemKey.'] ('.$geomFld.')isEmpty('.empty($item->{$geomFld
 				$featureNode->setAttribute('fid', "{$type}.{$itemKey}");
 					foreach ($fldList as $fldName) {
 						$featureFldNode = $dom->createElementNS($wfsNsUri, "{$wfsNs}:{$fldName}");
-						if ($acl->isGeomField($fldName)) {
+						if ($geomFld != null && $geomFld == $fldName) {
 							$geomNode = $this->_typeConverter->createGmlFromWkt($item->{$fldName}, $dom);
 							if (!$geomNode) continue;
 							$featureFldNode->appendChild($geomNode);

+ 12 - 2
SE/se-lib/Api/WfsQgisServer.php

@@ -80,8 +80,18 @@ class Api_WfsQgisServer extends Api_WfsServerBase {
 		$searchParams['limit'] = $maxFeatures;
 		$searchParams['order_by'] = $acl->getPrimaryKeyField();
 		$searchParams['order_dir'] = 'DESC';
-		$bbox = V::get('BBOX', '', $_GET);
-		if (!empty($bbox)) $searchParams['f_the_geom'] = "BBOX:{$bbox}";
+		{// BBOX
+			// 54.26931096743426,18.48242909824306,54.26738118403914,18.478738378639246
+			$bbox = V::get('BBOX', '', $_GET);
+			if (!empty($bbox)) {
+				if (preg_match("/^\d+(.\d+)?,\d+(.\d+)?,\d+(.\d+)?,\d+(.\d+)?$/", $bbox, $matches)) {
+					$searchParams['f_the_geom'] = "BBOX:{$bbox}";
+				} else {
+					// throw new Exception("Error Processing Request", 1);// ?
+					$this->DBG("Error BBOX wrong format", __LINE__, __FUNCTION__, __CLASS__);
+				}
+			}
+		}
 		//if ($geomFld) $searchParams["f_{$geomFld}"] = 'IS NOT NULL';
 		//if ($geomFld) $searchParams["f_{$geomFld}"] = 'GeometryType=' . strtoupper($dbGeomType);
 		$geomType = strtoupper($dbGeomType);