[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