[Mapbender-commits] r10060 - trunk/mapbender/http/php

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Thu Feb 21 07:31:45 PST 2019


Author: armin11
Date: 2019-02-21 07:31:44 -0800 (Thu, 21 Feb 2019)
New Revision: 10060

Modified:
   trunk/mapbender/http/php/mod_inspireDownloadFeed.php
Log:
Allow multiple featuretypes for one inspire atom feed - each featuretype is has one dataset feed entry

Modified: trunk/mapbender/http/php/mod_inspireDownloadFeed.php
===================================================================
--- trunk/mapbender/http/php/mod_inspireDownloadFeed.php	2019-02-20 19:19:32 UTC (rev 10059)
+++ trunk/mapbender/http/php/mod_inspireDownloadFeed.php	2019-02-21 15:31:44 UTC (rev 10060)
@@ -55,6 +55,7 @@
 	
 $furtherLink = array();
 
+$featuretypeId = false;
 //pull the needed things from tables datalink, md_metadata, layer, wms
  
 //parse request parameter
@@ -255,6 +256,7 @@
 	}
 }
 
+
 if ($generateFrom == "wfs") {
 	//check if wfsId is set too
 	if (isset($_REQUEST['WFSID']) & $_REQUEST['WFSID'] != "") {
@@ -271,6 +273,17 @@
 		echo 'Mandatory request parameter <b>WFSID</b> must be set if download service should be generated by using a Web Feature Service!'; 
 		die(); 	
 	}
+	//check if featuretypeid is set too
+	if (isset($_REQUEST['featuretypeid']) && $_REQUEST['featuretypeid'] != "") {
+		$testMatch = $_REQUEST["featuretypeid"];
+		$pattern = '/^[\d]*$/';		
+ 		if (!preg_match($pattern,$testMatch)){ 
+			echo 'FEATURETYPEID must be an integer!<br/>'; 
+			die(); 		
+ 		}
+		$featuretypeId = $testMatch;
+		$testMatch = NULL;
+        }
 }
 
 //Initialize XML document
@@ -279,7 +292,6 @@
 $feedDoc->preserveWhiteSpace = false;
 $feedDoc->formatOutput = true;
 
-
 /*function addToQuery($paramName,$queryString,$string,$queryList) {
 	//test if string was part of query before, if so, don't extent the query
 	//TODO: the strings come from json and so they are urlencoded! maybe we have to decode them to find the commata
@@ -781,7 +793,7 @@
 // - 
 
 function generateFeed($feedDoc, $recordId, $generateFrom) {
-	global $admin, $type, $imageResolution, $maxImageSize, $maxFeatureCount, $mapbenderMetadata, $indexMapbenderMetadata, $layerId, $wfsId, $mapbenderPath, $mapbenderServerUrl, $epsgId, $alterAxisOrder, $departmentMetadata, $userMetadata, $hasPermission, $m, $crs, $crsUpper,$countRessource, $numberOfTiles, $furtherLink;
+	global $admin, $type, $imageResolution, $maxImageSize, $maxFeatureCount, $mapbenderMetadata, $indexMapbenderMetadata, $layerId, $wfsId, $featuretypeId, $mapbenderPath, $mapbenderServerUrl, $epsgId, $alterAxisOrder, $departmentMetadata, $userMetadata, $hasPermission, $m, $crs, $crsUpper,$countRessource, $numberOfTiles, $furtherLink;
 	//caching feeds in apc cache
 	//check age of information to allow caching of atom feeds
 	/*$e = new mb_exception("mod_inspireDownloadFeed.php: wms_timestamp: ".date("Y-m-d H:i:s",$mapbenderMetadata[$m]->wms_timestamp));
@@ -981,6 +993,12 @@
 			break;
 			case "wfs":
 				$selfReference .= "&wfsid=".$mapbenderMetadata[$m]->wfs_id;
+				if ($featuretypeId !== false) {
+//$e = new mb_exception("ft_id: ".$featuretypeId);
+					$selfReference .= "&featuretypeid=".$featuretypeId;
+				} else {
+					$selfReference .= "&featuretypeid=".$mapbenderMetadata[$m]->featuretype_id;
+				}
 			break;
 		}
 	}
@@ -1026,7 +1044,13 @@
 		$feedLink = $feedDoc->createElement("link");
 		if ($admin->getWFSOWSstring($mapbenderMetadata[$m]->wfs_id) == false) {
 			//$wfsGetCapabilitiesUrl = $mapbenderMetadata[$m]->wfs_getcapabilities;
-			$wfsGetCapabilitiesUrl = $mapbenderPath."php/wfs.php?INSPIRE=1&FEATURETYPE_ID=".$mapbenderMetadata[$m]->featuretype_id;
+			if (count($mapbenderMetadata) == 1) {
+//$e = new mb_exception(count($mapbenderMetadata));
+				$wfsGetCapabilitiesUrl = $mapbenderPath."php/wfs.php?INSPIRE=1&FEATURETYPE_ID=".$mapbenderMetadata[$m]->featuretype_id;
+			} else {
+				//TODO - set url to wfs proxy - wfs.php has to be adopted to allow more than one featuretype as parameter!
+				$wfsGetCapabilitiesUrl = $mapbenderMetadata[$m]->wfs_getcapabilities;
+			}
 		} else {
 			$wfsGetCapabilitiesUrl = $mapbenderServerUrl."/registry/wfs/".$mapbenderMetadata[$m]->wfs_id."?INSPIRE=1";
 		}
@@ -1073,7 +1097,7 @@
 	$feedAuthor = $feedDoc->createElement("author");
 	$feedAuthorName = $feedDoc->createElement("name");
 	$feedAuthorEmail = $feedDoc->createElement("email");
-	//check for department, 1. group, 2. from metadat, 3. dummy
+	//check for department, 1. group, 2. from metadata, 3. dummy
 	if ($departmentMetadata["mb_group_title"] == "" || empty($departmentMetadata["mb_group_title"])) {
 		if ($mapbenderMetadata[$m]->ressource_responsible_party == "" || empty($mapbenderMetadata[$m]->ressource_responsible_party)) {
 			$feedAuthorName->appendChild($feedDoc->createTextNode("No responsible department found!"));
@@ -1202,8 +1226,12 @@
 			$featureTypeName = array();
 			$featureTypeBbox = array();
 			$featureTypeBboxWGS84 = array();
+			$featuretypeIndex = false;
 			//For each featuretype which was found! Maybe more than one!
 			for ($i = 0; $i < $countRessource; $i++) {
+//$e = new mb_exception($featuretypeId);
+				if ($featuretypeId !== false && $mapbenderMetadata[$i]->featuretype_id == $featuretypeId) {
+				$featuretypeIndex = $i;
 				//overwrite feature count with information from database
 				$maxFeatureCount = (integer)$mapbenderMetadata[$i]->wfs_max_features;
 				
@@ -1222,8 +1250,8 @@
 				//**************************************************************************************
 				$e = new mb_notice("Epsg id of featuretype ".$mapbenderMetadata[$i]->featuretype_name." : ".$epsgId);
 				if (!($mapbenderMetadata[$i]->wfs_version) || $mapbenderMetadata[$i]->wfs_version == '') {
-				return "<error>Version of WFS : ".$mapbenderMetadata[$i]->wfs_version." is not supported to generate inspire download services for predefined datasets!</error>";
-			}
+					return "<error>Version of WFS : ".$mapbenderMetadata[$i]->wfs_version." is not supported to generate inspire download services for predefined datasets!</error>";
+				}
 				//check if count is possible - in wfs 1.0.0 it is not possible!
 				if ($mapbenderMetadata[$i]->wfs_version !== '1.0.0') {
 					//define request to get number of hits per featuretype
@@ -1468,7 +1496,8 @@
 				}
 				//$numberOfTiles = count($bboxWfs[$mapbenderMetadata[$i]->featuretype_name]);
 				//$e = new mb_exception("Number of tiles for wfs predefined download service: ".$numberOfTiles);
-			}
+			} //end for if filter - if some featuretypeid was given via get parameter
+			} //end for each featuretype
 			
 		} else { //type SERVICE was set - generate one entry for each coupled resource - they are distinguished by names, titles, ids, bbox, type of download! 
 			$numberOfEntries = count($mapbenderMetadata);
@@ -1493,7 +1522,7 @@
 					$ressourceServiceFeedEntryTitle = $ressourceTitle." - generiert aus WMS Capabilities dataURL Element";
 				break;
 				case "wfs":
-					$ressourceServiceFeedEntryTitle = $ressourceTitle." - generiert über WFS GetFeature Aufrufe";
+					$ressourceServiceFeedEntryTitle = $ressourceTitle." - Objektart: ".$mapbenderMetadata[$i]->featuretype_title." (".$mapbenderMetadata[$i]->featuretype_name.") - generiert über WFS GetFeature Aufrufe";
 				break;
 				case "metadata":
 					$ressourceServiceFeedEntryTitle = $ressourceTitle." - generiert über Downloadlinks aus Metadatensatz";
@@ -1512,7 +1541,11 @@
 					$resourceFormat = $mapbenderMetadata[$i]->format;
 				break;
 				case "wfs":
-					$ressourceDataFeedEntryTitle = $ressourceTitle." - generiert über WFS GetFeature Aufrufe";
+					if ($featuretypeIndex !== false) {
+						$ressourceDataFeedEntryTitle = $ressourceTitle." - Objektart: ".$mapbenderMetadata[$featuretypeIndex]->featuretype_title." (".$mapbenderMetadata[$featuretypeIndex]->featuretype_name.") - generiert über WFS GetFeature Aufrufe";
+					} else {
+						$ressourceDataFeedEntryTitle = $ressourceTitle." - Objektart: ".$mapbenderMetadata[$i]->featuretype_title." (".$mapbenderMetadata[$i]->featuretype_name.") - generiert über WFS GetFeature Aufrufe";
+					}
 					//$resourceFormat = "application/gml+xml";
 					//first format from wfs server
 					$resourceFormat = $mapbenderMetadata[$i]->output_formats[0];
@@ -1546,6 +1579,12 @@
 			break;
 			case "wfs":
 				$datasetFeedLink .= "&wfsid=".$mapbenderMetadata[$i]->wfs_id;
+				if ($featuretypeId !== false) {
+//$e = new mb_exception("ft_id: ".$featuretypeId);
+					$datasetFeedLink .= "&featuretypeid=".$featuretypeId;
+				} else {
+					$datasetFeedLink .= "&featuretypeid=".$mapbenderMetadata[$i]->featuretype_id;
+				}
 			break;
 			case "metadata":
 				//$datasetFeedLink .= "&wfsid=".$mapbenderMetadata[$i]->wfs_id;



More information about the Mapbender_commits mailing list