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

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Mon Feb 22 05:31:26 PST 2016


Author: armin11
Date: 2016-02-22 05:31:26 -0800 (Mon, 22 Feb 2016)
New Revision: 9403

Modified:
   trunk/mapbender/http/php/mod_inspireDownloadFeed.php
Log:
Some fixes for INSPIRE ATOM Feed generator

Modified: trunk/mapbender/http/php/mod_inspireDownloadFeed.php
===================================================================
--- trunk/mapbender/http/php/mod_inspireDownloadFeed.php	2016-02-19 12:07:23 UTC (rev 9402)
+++ trunk/mapbender/http/php/mod_inspireDownloadFeed.php	2016-02-22 13:31:26 UTC (rev 9403)
@@ -1191,84 +1191,88 @@
 					}
 				}
 				$e = new mb_notice("Epsg id of featuretype ".$mapbenderMetadata[$i]->featuretype_name." : ".$epsgId);
-				if (!($mapbenderMetadata[$i]->wfs_version) || $mapbenderMetadata[$i]->wfs_version == '' || $mapbenderMetadata[$i]->wfs_version == '1.0.0') {
+				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>";
 			}
-				//define request to get number of hits per featuretype
-				//add ? if not given in string
-				$gHLink = $mapbenderMetadata[$i]->wfs_getfeature."SERVICE=WFS&REQUEST=GetFeature&VERSION=";
-				$gHLink .= $mapbenderMetadata[$i]->wfs_version."&typeName=";
-				$gHLink .= $mapbenderMetadata[$i]->featuretype_name."&resultType=hits";
-				$startRequestTime = time();
-				//get auth information from database:
-				$sql = "SELECT wfs_auth_type, wfs_username, wfs_password from wfs WHERE wfs_id = $1 ";
-				$v = array($mapbenderMetadata[$i]->wfs_id);
-				$t = array('i');
-				$res = db_prep_query($sql,$v,$t);
-				$row = db_fetch_assoc($res);
-				$auth['auth_type'] = $row["wfs_auth_type"];
-				$auth['username'] = $row["wfs_username"];
-				$auth['password'] = $row["wfs_password"];
-				if (isset($auth['auth_type']) && $auth['auth_type'] != '' && isset($auth['username']) && $auth['username'] != '' && isset($auth['password']) && $auth['password'] != '') {
-					$hitConnector = new connector($gHLink,$auth);
-				} else {
-					$hitConnector = new connector($gHLink);
-				}
-				$hitXml = $hitConnector->file;
-				$e = new mb_notice($gHLink);
-				$endRequestTime = time();
-				$diffTime = $endRequestTime-$startRequestTime;
-				$e = new mb_notice("Time for counting objects of featuretype ".$mapbenderMetadata[$i]->featuretype_name." : ".$diffTime." seconds!");
-				//parse hits
-				try {
-					$featureTypeHits =  new SimpleXMLElement($hitXml);
-					if ($featureTypeHits == false) {
-						throw new Exception('Cannot parse WFS number of hits request!');
+				//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
+					//add ? if not given in string
+					$gHLink = $mapbenderMetadata[$i]->wfs_getfeature."SERVICE=WFS&REQUEST=GetFeature&VERSION=";
+					$gHLink .= $mapbenderMetadata[$i]->wfs_version."&typeName=";
+					$gHLink .= $mapbenderMetadata[$i]->featuretype_name."&resultType=hits";
+					$startRequestTime = time();
+					//get auth information from database:
+					$sql = "SELECT wfs_auth_type, wfs_username, wfs_password from wfs WHERE wfs_id = $1 ";
+					$v = array($mapbenderMetadata[$i]->wfs_id);
+					$t = array('i');
+					$res = db_prep_query($sql,$v,$t);
+					$row = db_fetch_assoc($res);
+					$auth['auth_type'] = $row["wfs_auth_type"];
+					$auth['username'] = $row["wfs_username"];
+					$auth['password'] = $row["wfs_password"];
+					if (isset($auth['auth_type']) && $auth['auth_type'] != '' && isset($auth['username']) && $auth['username'] != '' && isset($auth['password']) && $auth['password'] != '') {
+						$hitConnector = new connector($gHLink,$auth);
+					} else {
+						$hitConnector = new connector($gHLink);
 					}
-				}
-				catch (Exception $e) {
-    					$e = new mb_exception($e->getMessage());
-				}
-				$hits = $featureTypeHits->xpath('/wfs:FeatureCollection/@numberOfFeatures');
-				$featureHits[$i] = (integer)$hits[0];
-				$e = new mb_notice($featureHits[$i]." hits for featuretype ".$mapbenderMetadata[$i]->featuretype_name);
-				//calculate further bboxes if the # of hits extents some value
-				//minimum number of single tiles:
-				$countTiles = ceil($featureHits[$i]/$maxFeatureCount);
-				//calculate number of rows and columns from x / y ratio
-				if ($epsgId == '4326' && $alterAxisOrder) {
-					//no transformation needed only change order
-					$minx = $mapbenderMetadata[$i]->miny;
-					$miny = $mapbenderMetadata[$i]->minx;
-					$maxx = $mapbenderMetadata[$i]->maxy;
-					$maxy = $mapbenderMetadata[$i]->maxx;
-				} else {
-					//no transformation needed normal order
-					if ($epsgId == '4326') {
-						$minx = $mapbenderMetadata[$i]->minx;
-						$miny = $mapbenderMetadata[$i]->miny;
-						$maxx = $mapbenderMetadata[$i]->maxx;
-						$maxy = $mapbenderMetadata[$i]->maxy;
+					$hitXml = $hitConnector->file;
+					$endRequestTime = time();
+					$diffTime = $endRequestTime-$startRequestTime;
+					$e = new mb_notice("Time for counting objects of featuretype ".$mapbenderMetadata[$i]->featuretype_name." : ".$diffTime." seconds!");
+					//parse hits
+					try {
+						$featureTypeHits =  new SimpleXMLElement($hitXml);
+						if ($featureTypeHits == false) {
+							throw new Exception('Cannot parse WFS number of hits request!');
+						}
+					}
+					catch (Exception $e) {
+    						$e = new mb_exception($e->getMessage());
+					}
+					$hits = $featureTypeHits->xpath('/wfs:FeatureCollection/@numberOfFeatures');
+					$featureHits[$i] = (integer)$hits[0];
+					$e = new mb_notice($featureHits[$i]." hits for featuretype ".$mapbenderMetadata[$i]->featuretype_name);
+					//calculate further bboxes if the # of hits extents some value
+					//minimum number of single tiles:
+					$countTiles = ceil($featureHits[$i]/$maxFeatureCount);
+					//calculate number of rows and columns from x / y ratio
+					if ($epsgId == '4326' && $alterAxisOrder) {
+						//no transformation needed only change order
+						$minx = $mapbenderMetadata[$i]->miny;
+						$miny = $mapbenderMetadata[$i]->minx;
+						$maxx = $mapbenderMetadata[$i]->maxy;
+						$maxy = $mapbenderMetadata[$i]->maxx;
 					} else {
-						//transformation needed and axis order changed
-						if ($alterAxisOrder) {
-							$e = new mb_exception("axis_order_altered");
-							$minxI = $mapbenderMetadata[$i]->miny;
-							$minyI = $mapbenderMetadata[$i]->minx;
-							$maxxI = $mapbenderMetadata[$i]->maxy;
-							$maxyI = $mapbenderMetadata[$i]->maxx;
-							$mapbenderMetadata[$i]->miny = $minyI;
-							$mapbenderMetadata[$i]->minx = $minxI;
-							$mapbenderMetadata[$i]->maxy = $maxyI;
-							$mapbenderMetadata[$i]->maxx = $maxxI;
+						//no transformation needed normal order
+						if ($epsgId == '4326') {
+							$minx = $mapbenderMetadata[$i]->minx;
+							$miny = $mapbenderMetadata[$i]->miny;
+							$maxx = $mapbenderMetadata[$i]->maxx;
+							$maxy = $mapbenderMetadata[$i]->maxy;
+						} else {
+							//transformation needed and axis order changed
+							if ($alterAxisOrder) {
+								$e = new mb_exception("axis_order_altered");
+								$minxI = $mapbenderMetadata[$i]->miny;
+								$minyI = $mapbenderMetadata[$i]->minx;
+								$maxxI = $mapbenderMetadata[$i]->maxy;
+								$maxyI = $mapbenderMetadata[$i]->maxx;
+								$mapbenderMetadata[$i]->miny = $minyI;
+								$mapbenderMetadata[$i]->minx = $minxI;
+								$mapbenderMetadata[$i]->maxy = $maxyI;
+								$mapbenderMetadata[$i]->maxx = $maxxI;
+							}
+							$sqlExtent = "SELECT X(transform(GeometryFromText('POINT(".$mapbenderMetadata[$i]->minx." ".$mapbenderMetadata[$i]->miny.")',4326),".$epsgId.")) as minx, Y(transform(GeometryFromText('POINT(".$mapbenderMetadata[$i]->minx." ".$mapbenderMetadata[$i]->miny.")',4326),".$epsgId.")) as miny, X(transform(GeometryFromText('POINT(".$mapbenderMetadata[$i]->maxx." ".$mapbenderMetadata[$i]->maxy.")',4326),".$epsgId.")) as maxx, Y(transform(GeometryFromText('POINT(".$mapbenderMetadata[$i]->maxx." ".$mapbenderMetadata[$i]->maxy.")',4326),".$epsgId.")) as maxy";
+							$resExtent =  db_query($sqlExtent);
+							$minx = floatval(db_result($resExtent,0,"minx"));
+							$miny = floatval(db_result($resExtent,0,"miny"));
+							$maxx = floatval(db_result($resExtent,0,"maxx"));
+							$maxy = floatval(db_result($resExtent,0,"maxy"));
 						}
-						$sqlExtent = "SELECT X(transform(GeometryFromText('POINT(".$mapbenderMetadata[$i]->minx." ".$mapbenderMetadata[$i]->miny.")',4326),".$epsgId.")) as minx, Y(transform(GeometryFromText('POINT(".$mapbenderMetadata[$i]->minx." ".$mapbenderMetadata[$i]->miny.")',4326),".$epsgId.")) as miny, X(transform(GeometryFromText('POINT(".$mapbenderMetadata[$i]->maxx." ".$mapbenderMetadata[$i]->maxy.")',4326),".$epsgId.")) as maxx, Y(transform(GeometryFromText('POINT(".$mapbenderMetadata[$i]->maxx." ".$mapbenderMetadata[$i]->maxy.")',4326),".$epsgId.")) as maxy";
-						$resExtent =  db_query($sqlExtent);
-						$minx = floatval(db_result($resExtent,0,"minx"));
-						$miny = floatval(db_result($resExtent,0,"miny"));
-						$maxx = floatval(db_result($resExtent,0,"maxx"));
-						$maxy = floatval(db_result($resExtent,0,"maxy"));
 					}
+				} else {
+					$countTiles = 1;
 				}		
 				//only calculate new boxes if countTiles > 1
 				if ($countTiles > 1) {
@@ -1305,6 +1309,15 @@
 					}
 				} else {
 					//only normal extent used
+					if ($minx == "" || $miny == "" || $maxx == "" || $maxy == "") {
+						//set default values
+						//EPSG:4326
+						$minx = "-90";
+						$miny = "-180";
+						$maxx = "90";
+						$maxy = "180";
+						$epsgId = "4326";
+					}
 					$bboxWfs[$mapbenderMetadata[$i]->featuretype_name][0] = $minx.",".$miny.",".$maxx.",".$maxy;
 					//transform bbox back to geographic coordinates
 					$lonLatBbox = transformBbox($minx.",".$miny.",".$maxx.",".$maxy,intval($epsgId),4326);
@@ -1325,11 +1338,11 @@
 					//<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:BBOX><gml:Box xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:3785"><gml:coordinates decimal="." cs="," ts=" ">-8033496.4863128,5677373.0653376 -7988551.5136872,5718801.9346624</gml:coordinates></gml:Box></ogc:BBOX></ogc:Filter>
 
 					//$bboxFilter = '<ogc:Filter><ogc:BBOX>';
-					$bboxFilter = '<ogc:Filter><ogc:BBOX srsName="EPSG:4326">';
+					$bboxFilter = '<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:BBOX>';
 					//$bboxFilter = '<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"><ogc:BBOX>';
 					//$bboxFilter .= '<gml:Box srsName="EPSG:'.$epsgId[1].'"';
 					$bboxFilter .= '<ogc:PropertyName>'.$mapbenderMetadata[$i]->geometry_field_name[0].'</ogc:PropertyName>';
-					$bboxFilter .= '<gml:Box>';
+					$bboxFilter .= '<gml:Box xmlns:gml="http://www.opengis.net/gml" srsName="'.$crs.'">';
 					$bboxFilter .= '<gml:coordinates decimal="." cs="," ts=" ">';
 					$currentBbox = explode(',',$bboxWfs[$mapbenderMetadata[$i]->featuretype_name][$l]);
 					
@@ -1342,10 +1355,16 @@
 					}
 					$bboxFilter .= '</gml:coordinates></gml:Box></ogc:BBOX></ogc:Filter>';
 					$bboxFilter = rawurlencode(utf8_decode($bboxFilter));
-
-					$gFLink = $mapbenderMetadata[$i]->wfs_getfeature."SERVICE=WFS&REQUEST=GetFeature&VERSION=";
+					//check if owsproxy is activated for wfs - if so, use absolute url of wfs
+					//e.g.: www.geoportal.rlp.de/registry/wfs/{wfs_id}? - important - there has to be one wfsconf defined and assigned!
+					if ($admin->getWFSOWSstring($mapbenderMetadata[$i]->wfs_id) == false) {
+						$wfsGetFeatureUrl = $mapbenderMetadata[$i]->wfs_getfeature;
+					} else {
+						$wfsGetFeatureUrl = $mapbenderServerUrl."/registry/wfs/".$mapbenderMetadata[$i]->wfs_id."?";
+					}
+					$gFLink = $wfsGetFeatureUrl."SERVICE=WFS&REQUEST=GetFeature&VERSION=";
 					$gFLink .= $mapbenderMetadata[$i]->wfs_version."&typeName=".$mapbenderMetadata[$i]->featuretype_name;
-					$gFLink .= "&maxFeatures=".$featureHits[$i]."&srsName=".$mapbenderMetadata[$i]->featuretype_srs;
+					$gFLink .= "&srsName=".$mapbenderMetadata[$i]->featuretype_srs;
 					if (count($mapbenderMetadata[$i]->output_formats) >= 1 && strtoupper($mapbenderMetadata[$i]->geometry_field_name[0] !== "SHAPE")) {
 						//use first output format which have been found - TODO - check if it should be pulled from featuretype instead from wfs 
 						$gFLink .= "&outputFormat=".urlencode($mapbenderMetadata[$i]->output_formats[0]);



More information about the Mapbender_commits mailing list