[Mapbender-commits] r8727 - trunk/mapbender/http/php
svn_mapbender at osgeo.org
svn_mapbender at osgeo.org
Fri Oct 11 13:09:05 PDT 2013
Author: armin11
Date: 2013-10-11 13:09:05 -0700 (Fri, 11 Oct 2013)
New Revision: 8727
Modified:
trunk/mapbender/http/php/wms.php
Log:
New possibility so serve mapbender capabilities with all childs of requested layer - make some things easier ;-) - not intended for inspire.
Modified: trunk/mapbender/http/php/wms.php
===================================================================
--- trunk/mapbender/http/php/wms.php 2013-10-11 07:02:29 UTC (rev 8726)
+++ trunk/mapbender/http/php/wms.php 2013-10-11 20:09:05 UTC (rev 8727)
@@ -16,14 +16,13 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
+//http://localhost/mapbender_trunk/php/wms.php?layer_id=21018&INSPIRE=1&REQUEST=GetCapabilities&VERSION=1.1.1&SERVICE=wms&withChilds=1
require_once(dirname(__FILE__)."/../../core/globalSettings.php");
require_once(dirname(__FILE__)."/../classes/class_layer_monitor.php");
require_once(dirname(__FILE__)."/../classes/class_administration.php");
//
$admin = new administration();
//
-//
// make all parameters available as upper case
//
foreach($_GET as $key => $val) {
@@ -36,6 +35,11 @@
$layerId = $_GET["LAYER_ID"];
$updateSequence = intval($_GET["UPDATESEQUENCE"]);
$inspire = $_GET["INSPIRE"];
+$withChilds = false;
+
+if (isset($_REQUEST["withChilds"]) && $_REQUEST["withChilds"] === "1") {
+ $withChilds = true;
+}
$sessionId = $_GET[strtoupper(session_name())];
//if session id not set, set a dummy id!
if (!isset($sessionId) || $sessionId =="") {
@@ -136,7 +140,7 @@
$wms_row = db_fetch_array($res_wms_sql);
if (!$wms_row["wms_id"]) {
- // TO DO: create exception XML
+ // TODO: create exception XML
header("Content-type: application/xhtml+xml; charset=UTF-8");
echo createExceptionXml("Layer not defined", "Unknown layer id " . $layerId);
die;
@@ -211,8 +215,6 @@
$monitor = new Layer_load_count();
$monitor->increment($layerId);
-
-
// ---------------------------------------------------------------------------
//
// START TO CREATE CAPABILITIES DOC
@@ -228,7 +230,7 @@
#to be adopted TODO armin
function validate ($contactInformation_column) {
if ($contactInformation_column <> "" AND $contactInformation_column <> NULL) {
- $contactinformationcheck = true;
+ $contactinformationcheck = true;
}
else {
$contactinformationcheck = false;
@@ -784,7 +786,7 @@
$res_layer_sql = db_prep_query($layer_sql, $v, $t);
$layer_row = db_fetch_array($res_layer_sql);
-#Creating layer node
+#Creating root layer node
$layer = $doc->createElement("Layer");
$layer = $capability->appendChild($layer);
@@ -813,10 +815,10 @@
} else {
$layerAbstract = _mb("Layer abstract not given - please give a description for this layer.");
}
- $abstract = $doc->createElement("Abstract");
- $abstract = $layer->appendChild($abstract);
- $abstractText = $doc->createTextNode($layerAbstract);
- $abstractText = $abstract->appendChild($abstractText);
+$abstract = $doc->createElement("Abstract");
+$abstract = $layer->appendChild($abstract);
+$abstractText = $doc->createTextNode($layerAbstract);
+$abstractText = $abstract->appendChild($abstractText);
#Request the specific wms- and layerkeywords
$keyword_sql = "SELECT DISTINCT keyword FROM keyword, layer_keyword, layer " .
@@ -849,8 +851,6 @@
}
}
-
-
#SQL statement to get additional layer information from layer epsg
$epsg_sql = "SELECT layer_epsg.epsg, layer_epsg.minx, layer_epsg.miny, " .
"layer_epsg.maxy, layer_epsg.maxx " .
@@ -859,28 +859,25 @@
$v = array($layer_row['layer_id']);
$t = array("i");
$res_espg_sql = db_prep_query($epsg_sql, $v, $t);
-
+$res_espg_sql1 = $res_espg_sql;
$latLonBoundingBoxCreated = false;
$BoundingBoxCreated = false;
while ($epsg_row = db_fetch_array($res_espg_sql)) {
-
#Creating SRS node
$srs = $doc->createElement("SRS");
$srs = $layer->appendChild($srs);
$srsText = $doc->createTextNode(str_replace('epsg','EPSG',$epsg_row['epsg']));
$srsText = $srs->appendChild($srsText);
-
-
}
#SQL statement to get additional layer information from layer epsg
-$epsg_sql = "SELECT layer_epsg.epsg, layer_epsg.minx, layer_epsg.miny, " .
+/*$epsg_sql = "SELECT layer_epsg.epsg, layer_epsg.minx, layer_epsg.miny, " .
"layer_epsg.maxy, layer_epsg.maxx " .
"FROM layer_epsg WHERE layer_epsg.fkey_layer_id = $1";
$v = array($layer_row['layer_id']);
-$t = array("i");
+$t = array("i");*/
$res_espg_sql = db_prep_query($epsg_sql, $v, $t);
while ($epsg_row = db_fetch_array($res_espg_sql)) {
@@ -904,12 +901,12 @@
}
#SQL statement to get additional layer information from layer epsg
-$epsg_sql = "SELECT layer_epsg.epsg, layer_epsg.minx, layer_epsg.miny, " .
+/*$epsg_sql = "SELECT layer_epsg.epsg, layer_epsg.minx, layer_epsg.miny, " .
"layer_epsg.maxy, layer_epsg.maxx " .
"FROM layer_epsg WHERE layer_epsg.fkey_layer_id = $1";
$v = array($layer_row['layer_id']);
-$t = array("i");
+$t = array("i");*/
$res_espg_sql = db_prep_query($epsg_sql, $v, $t);
while ($epsg_row = db_fetch_array($res_espg_sql)) {
@@ -930,7 +927,6 @@
$boundingBox->setAttribute('maxy', $bbox['maxy']);
}
-
#Append epsg string to srs node
$srsText = $doc->createTextNode($epsgText);
$srsText = $srs->appendChild($srsText);
@@ -946,6 +942,7 @@
$AUOnlineResource->setAttribute("xlink:href", $AuthorityUrl);
$AUOnlineResource = $AuthorityURL->appendChild($AUOnlineResource);
+//fictive root layer created
####### duplicate root layer
#if layer is root layer itself!
@@ -960,189 +957,112 @@
##}
#</armin>
+//call function for sublayer element
-
-############## sublayer
-
-#SQL statement to get all layers
-$sub_layer_sql = "SELECT * FROM layer WHERE fkey_wms_id = $1 AND layer_parent <> ''";
-$v = array($wms_row['wms_id']);
-$t = array("i");
-
-if (isset($layerId) && $layerId > 0) {
- $sub_layer_sql .= " AND layer_id = $2";
- array_push($v, $layerId);
- array_push($t, "i");
-}
-$sub_layer_sql .= " ORDER BY layer_pos";
-$res_sub_layer_sql = db_prep_query($sub_layer_sql, $v, $t);
-
-
-#<armin>
-$res_sub_layer_sql_2 = db_prep_query($sub_layer_sql, $v, $t);
-$sub_layer_row_2 = db_fetch_array($res_sub_layer_sql_2);
-
-
-if (!isset($sub_layer_row_2['layer_pos'])) {
- $clonedLayer = $layer->cloneNode(true);
- $clonedLayer->setAttribute("queryable", "0");
- $clonedLayer->setAttribute("cascaded", "0");
- $layer->appendChild($clonedLayer);
-}
-#</armin>
-
-
-$e = new mb_notice("wms.php: read sublayer:");
-
-while ($sub_layer_row = db_fetch_array($res_sub_layer_sql)) {
-
- #Creating layer node
-
- $sub_layer = $doc->createElement("Layer");
- $e = new mb_notice("wms.php: layer_parent:".$sub_layer_row['layer_parent']);
- $parent = $parentLayerArray[$sub_layer_row['layer_parent']];
- $e = new mb_notice("wms.php: type of parent:".gettype($parent));
- if (gettype($parent) == "NULL") {
- $e = new mb_notice("wms.php: layer_parent not found in parent array - root layer info will be used!");
- $parent = $parentLayerArray[0];
- }
- $sub_layer = $parent->appendChild($sub_layer);
-
- if($sub_layer_row['layer_queryable'] <> "" AND $sub_layer_row['layer_queryable'] <> NULL) {
- $sub_layer->setAttribute('queryable', $sub_layer_row['layer_queryable']);
+//*************************************************
+function createLayerElement ($doc, $wmsId, $layerRow, $wmsRow) {
+ #Creating single layer node
+ $layer = $doc->createElement("Layer");
+ if($layerRow['layer_queryable'] <> "" AND $layerRow['layer_queryable'] <> NULL) {
+ $layer->setAttribute('queryable', $layerRow['layer_queryable']);
}
- #Getting information about the hierarchie of layers
- $cascadeSQL = "SELECT COUNT(*) FROM layer WHERE fkey_wms_id = $1 AND layer_parent = $2";
-
- $v = array($wms_row[0], $sub_layer_row['layer_pos']);
- $t = array("i", "i");
- $res_cascadeSQL = db_prep_query($cascadeSQL, $v, $t);
- $cascade = 0;
- $cascade_row = db_fetch_row($res_cascadeSQL);
- if($cascade_row[0] > 0)
- {
- $cascade = 1;
- }
- $sub_layer->setAttribute('cascaded', $cascade); //TODO: check if this is right!
-
- #Write layer to parent layer array
- $parentLayerArray[$sub_layer_row['layer_pos']] = $sub_layer;
-
#Creating name node
- if($sub_layer_row['layer_name'] <> "" AND $sub_layer_row['layer_name'] <> NULL) {
+ if($layerRow['layer_name'] <> "" AND $layerRow['layer_name'] <> NULL) {
$name = $doc->createElement("Name");
- $name = $sub_layer->appendChild($name);
- $nameText = $doc->createTextNode($sub_layer_row['layer_name']);
+ $name = $layer->appendChild($name);
+ $nameText = $doc->createTextNode($layerRow['layer_name']);
$nameText = $name->appendChild($nameText);
}
-
#Creating Title node
- if($sub_layer_row['layer_title'] <> "" AND $sub_layer_row['layer_title'] <> NULL) {
+ if($layerRow['layer_title'] <> "" AND $layerRow['layer_title'] <> NULL) {
$title = $doc->createElement("Title");
- $title = $sub_layer->appendChild($title);
- $titleText = $doc->createTextNode($sub_layer_row['layer_title']);
+ $title = $layer->appendChild($title);
+ $titleText = $doc->createTextNode($layerRow['layer_title']);
$titleText = $title->appendChild($titleText);
}
-
#Creating the "Abstract" node
- if($sub_layer_row['layer_abstract'] <> "" AND $sub_layer_row['layer_abstract'] <> NULL) {
- $layerAbstract = $sub_layer_row['layer_abstract'];
+ if($layerRow['layer_abstract'] <> "" AND $layerRow['layer_abstract'] <> NULL) {
+ $layerAbstract = $layerRow['layer_abstract'];
} else {
$layerAbstract = _mb('No abtract for the specific layer was given, please add a description to your layer ressource.');
}
$abstract = $doc->createElement("Abstract");
- $abstract = $sub_layer->appendChild($abstract);
+ $abstract = $layer->appendChild($abstract);
$abstractText = $doc->createTextNode($layerAbstract);
$abstractText = $abstract->appendChild($abstractText);
-
- #Request the specific wms- and layerkeywords
- $keyword_sql = "SELECT DISTINCT keyword FROM layer LEFT JOIN layer_keyword ON layer_keyword.fkey_layer_id = layer.layer_id LEFT JOIN keyword ON keyword.keyword_id = layer_keyword.fkey_keyword_id WHERE layer.fkey_wms_id = ".$wms_row['wms_id']." AND layer.layer_id = ".$sub_layer_row['layer_id']."";
- $res_keyword_sql = db_query($keyword_sql);
-
- #Creating list of keyword nodes
- #Iterating over a List of Keywords
- $keywordlistExist = 0;
- while ($keyword_sql = db_fetch_array($res_keyword_sql))
- {
- #Initially creating the "KeywordList" node
- if ($keywordlistExist == 0)
- {
- $keywordList = $doc->createElement("KeywordList");
- $keywordList = $sub_layer->appendChild($keywordList);
- $keywordlistExist = 1;
- }
-
- #Creating the "Keyword" node
- $keyword_dom = $doc->createElement("Keyword");
- $keyword_dom = $keywordList->appendChild($keyword_dom);
- if (trim($keyword_sql['keyword']) <> "" AND $keyword_sql['keyword'] <> NULL) {
- $keyword = $keyword_sql['keyword'];
- } else {
- $keyword = _mb('Empty keyword was given, please add a keyword to your layer ressource.');
- }
- $keyword_domText = $doc->createTextNode($keyword);
-
- $keyword_domText = $keyword_dom->appendChild($keyword_domText);
- }
-
- // inherit srs from parent layer
+ #Request the specific wms- and layerkeywords
+ $keyword_sql = "SELECT DISTINCT keyword FROM layer LEFT JOIN layer_keyword ON layer_keyword.fkey_layer_id = layer.layer_id LEFT JOIN keyword ON keyword.keyword_id = layer_keyword.fkey_keyword_id WHERE layer.fkey_wms_id = ".$wmsRow['wms_id']." AND layer.layer_id = ".$layerRow['layer_id']."";
+ $res_keyword_sql = db_query($keyword_sql);
+ #Creating list of keyword nodes
+ #Iterating over a List of Keywords
+ $keywordlistExist = 0;
+ while ($keyword_sql = db_fetch_array($res_keyword_sql)) {
+ #Initially creating the "KeywordList" node
+ if ($keywordlistExist == 0)
+ {
+ $keywordList = $doc->createElement("KeywordList");
+ $keywordList = $layer->appendChild($keywordList);
+ $keywordlistExist = 1;
+ }
+ #Creating the "Keyword" node
+ $keyword_dom = $doc->createElement("Keyword");
+ $keyword_dom = $keywordList->appendChild($keyword_dom);
+ if (trim($keyword_sql['keyword']) <> "" AND $keyword_sql['keyword'] <> NULL) {
+ $keyword = $keyword_sql['keyword'];
+ } else {
+ $keyword = _mb('Empty keyword was given, please add a keyword to your layer ressource.');
+ }
+ $keyword_domText = $doc->createTextNode($keyword);
+ $keyword_domText = $keyword_dom->appendChild($keyword_domText);
+ }
+ //inherit srs from parent layer TODO - use all srs from parents! Test the sql first
$layer_srs_sql = "SELECT DISTINCT epsg FROM layer_epsg " .
- "WHERE fkey_layer_id = ".$sub_layer_row['layer_id'] .
- " OR fkey_layer_id = " . $layer_row['layer_id'];
+ "WHERE fkey_layer_id = ".$layerRow['layer_id'];
+ //" OR fkey_layer_id = " . $layer_row['layer_id'];
$res_layer_srs_sql = db_query($layer_srs_sql);
-
while ($layer_srs_row = db_fetch_array($res_layer_srs_sql)) {
#Creating SRS node
$srs = $doc->createElement("SRS");
- $srs = $sub_layer->appendChild($srs);
+ $srs = $layer->appendChild($srs);
$srsText = $doc->createTextNode(str_replace('epsg','EPSG',$layer_srs_row['epsg']));
$srsText = $srs->appendChild($srsText);
-
}
#SQL statement to get additional layer information from layer epsg
$epsg_sql = "SELECT layer_epsg.epsg, layer_epsg.minx, layer_epsg.miny, " .
"layer_epsg.maxy, layer_epsg.maxx FROM layer_epsg " .
- "WHERE layer_epsg.fkey_layer_id = ".$sub_layer_row['layer_id'];
+ "WHERE layer_epsg.fkey_layer_id = ".$layerRow['layer_id'];
$res_espg_sql = db_query($epsg_sql);
-
while ($epsg_row = db_fetch_array($res_espg_sql)) {
#set epsg 4326 for latlonbbox
if ($epsg_row['epsg'] == "EPSG:4326" AND $latLonBoundingBoxCreated == false) {
-
$latlon['minx'] = $epsg_row['minx'];
$latlon['miny'] = $epsg_row['miny'];
$latlon['maxx'] = $epsg_row['maxx'];
$latlon['maxy'] = $epsg_row['maxy'];
-
#Creating LatLongBoundingBox node
- $latLonBoundingBox = $doc->createElement("LatLonBoundingBox");
- $latLonBoundingBox = $sub_layer->appendChild($latLonBoundingBox);
- $latLonBoundingBox->setAttribute('minx', $latlon['minx']);
- $latLonBoundingBox->setAttribute('miny', $latlon['miny']);
- $latLonBoundingBox->setAttribute('maxx', $latlon['maxx']);
- $latLonBoundingBox->setAttribute('maxy', $latlon['maxy']);
- }
+ $latLonBoundingBox = $doc->createElement("LatLonBoundingBox");
+ $latLonBoundingBox = $layer->appendChild($latLonBoundingBox);
+ $latLonBoundingBox->setAttribute('minx', $latlon['minx']);
+ $latLonBoundingBox->setAttribute('miny', $latlon['miny']);
+ $latLonBoundingBox->setAttribute('maxx', $latlon['maxx']);
+ $latLonBoundingBox->setAttribute('maxy', $latlon['maxy']);
+ }
}
-
#SQL statement to get additional layer information from layer epsg
$epsg_sql = "SELECT layer_epsg.epsg, layer_epsg.minx, layer_epsg.miny, " .
"layer_epsg.maxy, layer_epsg.maxx FROM layer_epsg " .
- "WHERE layer_epsg.fkey_layer_id = ".$sub_layer_row['layer_id'];
+ "WHERE layer_epsg.fkey_layer_id = ".$layerRow['layer_id'];
$res_espg_sql = db_query($epsg_sql);
-
while ($epsg_row = db_fetch_array($res_espg_sql)) {
-
-
#set only first epsg for bbox
$bbox['epsg'] = str_replace('epsg','EPSG',$epsg_row['epsg']);
$bbox['minx'] = $epsg_row['minx'];
$bbox['miny'] = $epsg_row['miny'];
$bbox['maxx'] = $epsg_row['maxx'];
$bbox['maxy'] = $epsg_row['maxy'];
-
#Creating BoundingBox node
$boundingBox = $doc->createElement("BoundingBox");
- $boundingBox = $sub_layer->appendChild($boundingBox);
+ $boundingBox = $layer->appendChild($boundingBox);
$boundingBox->setAttribute('SRS', $bbox['epsg']);
$boundingBox->setAttribute('minx', $bbox['minx']);
$boundingBox->setAttribute('miny', $bbox['miny']);
@@ -1152,9 +1072,7 @@
//
//Creating Metadata and Identifier nodes
//read out all metadata entries for specific layer
-
-
- $subLayerId = $sub_layer_row['layer_id'];
+ $subLayerId = $layerRow['layer_id'];
$sql = <<<SQL
SELECT metadata_id, uuid, link, linktype, md_format, origin, datasetid FROM mb_metadata
@@ -1163,18 +1081,13 @@
mb_metadata.metadata_id = relation.fkey_metadata_id WHERE mb_metadata.origin IN ('capabilities','external','metador','upload')
SQL;
- //$e = new mb_exception("wms.php: layerid: ".$sub_layer_row['layer_id']);
+ //$e = new mb_exception("wms.php: layerid: ".$layerRow['layer_id']);
$i = 0;
$res_metadata = db_query($sql);
-
-
-
-
-
while ($row_metadata = db_fetch_array($res_metadata)) {
//check id datasetid is set, if not use metadataid
if ($row_metadata["datasetid"] == '' || !isset($row_metadata["datasetid"])) {
- //this column is empty, if metador was used and the identifier for dataset id is equal to the identifier of the metadata fileidentifier. In this case we expand a standard codespace http://www.geoportal.rlp.de TODO: use a define in mapbender.conf to pull the standard codespace from!
+ //this column is empty, if metador was used and the identifier for dataset id is equal to the identifier of the metadata fileidentifier. In this case we expand a standard codespace http://www.geoportal.rlp.de
if (defined('METADATA_DEFAULT_CODESPACE')) {
$datasetId = METADATA_DEFAULT_CODESPACE."#".$row_metadata["uuid"];
} else {
@@ -1185,18 +1098,17 @@
}
//create Identifier tags
$Identifier = $doc->createElement("Identifier");
- $Identifier = $sub_layer->appendChild($Identifier);
+ $Identifier = $layer->appendChild($Identifier);
$Identifier->setAttribute('authority', $AuthorityName);
$IdentifierText = $doc->createTextNode($datasetId);
$IdentifierText = $Identifier->appendChild($IdentifierText);
-
//$e = new mb_exception("i: ".$i);
//push entries into xml structure
//check for kind of link - push the right one into the link field
switch ($row_metadata['origin']) {
case 'capabilities':
$metadataUrl = $doc->createElement("MetadataURL");
- $metadataUrl = $sub_layer->appendChild($metadataUrl);
+ $metadataUrl = $layer->appendChild($metadataUrl);
$metadataUrl->setAttribute('type', $row_metadata['linktype']);
$format = $doc->createElement("Format");
$format = $metadataUrl->appendChild($format);
@@ -1209,7 +1121,7 @@
break;
case 'external':
$metadataUrl = $doc->createElement("MetadataURL");
- $metadataUrl = $sub_layer->appendChild($metadataUrl);
+ $metadataUrl = $layer->appendChild($metadataUrl);
$metadataUrl->setAttribute('type', 'ISO19115:2003');
$format = $doc->createElement("Format");
$format = $metadataUrl->appendChild($format);
@@ -1223,7 +1135,7 @@
break;
case 'upload':
$metadataUrl = $doc->createElement("MetadataURL");
- $metadataUrl = $sub_layer->appendChild($metadataUrl);
+ $metadataUrl = $layer->appendChild($metadataUrl);
$metadataUrl->setAttribute('type', 'ISO19115:2003');
$format = $doc->createElement("Format");
$format = $metadataUrl->appendChild($format);
@@ -1237,7 +1149,7 @@
break;
case 'metador':
$metadataUrl = $doc->createElement("MetadataURL");
- $metadataUrl = $sub_layer->appendChild($metadataUrl);
+ $metadataUrl = $layer->appendChild($metadataUrl);
$metadataUrl->setAttribute('type', 'ISO19115:2003');
$format = $doc->createElement("Format");
$format = $metadataUrl->appendChild($format);
@@ -1251,7 +1163,7 @@
break;
default:
$metadataUrl = $doc->createElement("MetadataURL");
- $metadataUrl = $sub_layer->appendChild($metadataUrl);
+ $metadataUrl = $layer->appendChild($metadataUrl);
$metadataUrl->setAttribute('type', 'ISO19115:2003');
$format = $doc->createElement("Format");
$format = $metadataUrl->appendChild($format);
@@ -1268,23 +1180,19 @@
$onlineResource->setAttribute("xlink:type", "simple");
//Add linkage to Capabilities
$i++;
- //$e = new mb_exception("i: ".$i);
}
-
- #Creating DataURL Node - use it from database if it will exist!
-
+ #Creating DataURL Node - use it from database if it will exist!
$dataUrl = $doc->createElement("DataURL");
- $dataUrl = $sub_layer->appendChild($dataUrl);
+ $dataUrl = $layer->appendChild($dataUrl);
$format = $doc->createElement("Format");
$format = $dataUrl->appendChild($format);
$formatText = $doc->createTextNode('text/html');
$formatText = $format->appendChild($formatText);
-
- if ($sub_layer_row['layer_dataurl'] <> "" AND $sub_layer_row['layer_dataurl'] <> NULL) {
+ if ($layerRow['layer_dataurl'] <> "" AND $layerRow['layer_dataurl'] <> NULL) {
$onlineResource = $doc->createElement("OnlineResource");
$onlineResource = $dataUrl->appendChild($onlineResource);
$onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink" );
- $onlineResource->setAttribute("xlink:href", $sub_layer_row['layer_dataurl']);
+ $onlineResource->setAttribute("xlink:href", $layerRow['layer_dataurl']);
$onlineResource->setAttribute("xlink:type", "simple");
}
else
@@ -1292,10 +1200,9 @@
$onlineResource = $doc->createElement("OnlineResource");
$onlineResource = $dataUrl->appendChild($onlineResource);
$onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink" );
- $onlineResource->setAttribute("xlink:href", $mapbenderMetadataUrl.$sub_layer_row['layer_id']);
+ $onlineResource->setAttribute("xlink:href", $mapbenderMetadataUrl.$layerRow['layer_id']);
$onlineResource->setAttribute("xlink:type", "simple");
}
-
//Creating Style Node by pulling style and format from database!
//for each possible style
//check for number of styles, check for name 'default'
@@ -1305,12 +1212,10 @@
SELECT * FROM layer_style WHERE fkey_layer_id = $subLayerId
SQL;
-
$res_style = db_query($sql);
-
while ($row_style = db_fetch_array($res_style)) {
$style = $doc->createElement("Style");
- $style = $sub_layer->appendChild($style);
+ $style = $layer->appendChild($style);
$name = $doc->createElement("Name");
$name = $style->appendChild($name);
if ($row_style['name'] != '') {
@@ -1328,7 +1233,7 @@
}
$titleText = $title->appendChild($titleText);
//if server supports get legend graphic
- if(($wms_row['wms_getlegendurl'] <> "" AND $wms_row['wms_getlegendurl'] <> NULL) || ($row_style['legendurl'] <> "" AND $row_style['legendurl'] <> NULL)){
+ if(($wmsRow['wms_getlegendurl'] <> "" AND $wmsRow['wms_getlegendurl'] <> NULL) || ($row_style['legendurl'] <> "" AND $row_style['legendurl'] <> NULL)){
$legendUrl = $doc->createElement("LegendURL");
$legendUrl = $style->appendChild($legendUrl);
$legendUrl->setAttribute("width", "10" );
@@ -1344,12 +1249,12 @@
$onlineResource = $doc->createElement("OnlineResource");
$onlineResource = $legendUrl->appendChild($onlineResource);
$onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink" );
- if ($wms_row['wms_getlegendurl'] <> "" AND $wms_row['wms_getlegendurl'] <> NULL) {
- $onlineResource->setAttribute("xlink:href", $wms_row['wms_getlegendurl']."version=1.1.1&service=WMS&request=GetLegendGraphic&layer=".$sub_layer_row['layer_name']."&format=image/png");
+ if ($wmsRow['wms_getlegendurl'] <> "" AND $wmsRow['wms_getlegendurl'] <> NULL) {
+ $onlineResource->setAttribute("xlink:href", $wmsRow['wms_getlegendurl']."version=1.1.1&service=WMS&request=GetLegendGraphic&layer=".$layerRow['layer_name']."&format=image/png");
} else {
//other stupid check - TODO: make it better
if (strpos($row_style['legendurl'], "http:") === false) {
- $onlineResource->setAttribute("xlink:href", $wms_row['wms_getlegendurl'].$row_style['legendurl']);
+ $onlineResource->setAttribute("xlink:href", $wmsRow['wms_getlegendurl'].$row_style['legendurl']);
} else {
$onlineResource->setAttribute("xlink:href", $row_style['legendurl']);
}
@@ -1358,13 +1263,54 @@
}
}
//Creating "ScaleHint" node
- if ($sub_layer_row['layer_minscale'] <> "" AND $sub_layer_row['layer_minscale'] <> NULL) {
+ if ($layerRow['layer_minscale'] <> "" AND $layerRow['layer_minscale'] <> NULL) {
$scaleHint = $doc->createElement("ScaleHint");
- $scaleHint = $sub_layer->appendChild($scaleHint);
- $scaleHint->setAttribute('min', (floatval($sub_layer_row['layer_minscale'])/2004.3976484406788493955738891127));
- $scaleHint->setAttribute('max', (floatval($sub_layer_row['layer_maxscale'])/2004.3976484406788493955738891127));
- }
+ $scaleHint = $layer->appendChild($scaleHint);
+ $scaleHint->setAttribute('min', (floatval($layerRow['layer_minscale'])/2004.3976484406788493955738891127));
+ $scaleHint->setAttribute('max', (floatval($layerRow['layer_maxscale'])/2004.3976484406788493955738891127));
+ }
+ return $layer;
+} //end of function to create single layer object
+
+//*************************************************
+
+function createLayerTree($parent, $withChilds, $layerId, &$layer, $wmsId, $doc, $wms_row) {
+ $sub_layer_sql = "SELECT * FROM layer WHERE fkey_wms_id = $1 AND layer_parent = $2 ORDER BY layer_pos";
+ $v = array($wmsId, $parent);
+ $t = array("i","s");
+ if (!$withChilds) {
+ $sub_layer_sql .= " AND layer_id = $2";
+ array_push($v, $layerId);
+ array_push($t, "i");
+ }
+ //$e = new mb_exception($sub_layer_sql);
+ $res_sub_layer_sql = db_prep_query($sub_layer_sql, $v, $t);
+ while ($sub_layer_row = db_fetch_array($res_sub_layer_sql)) {
+ $subLayer = createLayerElement($doc, $wmsId, $sub_layer_row, $wms_row);
+ //recursive creation
+ createLayerTree($sub_layer_row['layer_pos'], $withChilds, $layerId, &$subLayer, $wmsId, $doc, $wms_row);
+ $layer->appendChild($subLayer);
+ }
}
+
+//get layer_pos for requested layer id before beginning with tree creation
+$layerSql = "SELECT * FROM layer WHERE layer_id = $1";
+$v = array($layerId);
+$t = array("i");
+$res_layer = db_prep_query($layerSql, $v, $t);
+$row = db_fetch_array($res_layer);
+$layerPos = $row['layer_pos'];
+//TODO: root layer is always there but the following pulls only the sublayer and not the requested layer by its own!! - todo: don't use the root layer every time!!! pull the requested layer instead but pull all srs and things which are inherited from the root layer or the parents from this layer - it is not always easy if the hirarchy is nested much - pull all parents - maybe a thing for class_administration!
+if ($withChilds) {
+ //create layer itself first!
+ $subLayer = createLayerElement($doc, $wmsId, $row, $wms_row);
+
+ createLayerTree($layerPos, $withChilds, $layerId, $subLayer, $wms_row['wms_id'], $doc, $wms_row);
+} else {
+ //only create one layer
+ $subLayer = createLayerElement($doc, $wmsId, $row, $wms_row);
+}
+$layer->appendChild($subLayer);
header("Content-type: application/xhtml+xml; charset=UTF-8");
echo $doc->saveXml();
?>
More information about the Mapbender_commits
mailing list