$val) { $_GET[strtoupper($key)] = $val; } $requestType = $_GET["REQUEST"]; $version = $_GET["VERSION"]; $service = strtoupper($_GET["SERVICE"]); $layerId = $_GET["LAYER_ID"]; $updateSequence = intval($_GET["UPDATESEQUENCE"]); $inspire = $_GET["INSPIRE"]; if (isset($inspire) && $inspire === 1 ) { $inspire = true; } $mapbenderMetadaUrl = $_SERVER['HTTP_HOST']."/mapbender/php/mod_showMetadata.php?resource=layer&id="; $inspireServiceMetadataUrl = $_SERVER['HTTP_HOST']."/mapbender/php/mod_layerISOMetadata.php?SERVICE=WMS&outputFormat=iso19139&Id="; $mapbenderMetadataUrlUrl = $_SERVER['HTTP_HOST']."/mapbender/php/mod_dataISOMetadata.php?outputFormat=iso19139&id="; //http://www.geoportal.rlp.de/mapbender/php/mod_layerISOMetadata.php?SERVICE=WMS&outputFormat=iso19139&Id=24615 if (isset($_SERVER["HTTPS"])){ $urlPrefix = "https://"; } else { $urlPrefix = "http://"; } $mapbenderMetadataUrl = $urlPrefix.$mapbenderMetadataUrl; $inspireServiceMetadataUrl = $urlPrefix.$inspireServiceMetadataUrl; $mapbenderMetadataUrlUrl = $urlPrefix.$mapbenderMetadataUrlUrl; $con = db_connect(DBSERVER,OWNER,PW); db_select_db(DB,$con); /** * Creates an XML Exception according to WMS 1.1.1 * * @return an XML String * @param $errorCode String * @param $errorMessage String */ function createExceptionXml ($errorCode, $errorMessage) { // see http://de2.php.net/manual/de/domimplementation.createdocumenttype.php $imp = new DOMImplementation; $dtd = $imp->createDocumentType("ServiceExceptionReport", "", "http://schemas.opengis.net/wms/1.1.1/exception_1_1_1.dtd"); $doc = $imp->createDocument("", "", $dtd); $doc->encoding = 'UTF-8'; $doc->standalone = false; $el = $doc->createElement("ServiceExceptionReport"); $exc = $doc->createElement("ServiceException", $errorMessage); if ($errorCode) { $exc->setAttribute("code", $errorCode); } $el->appendChild($exc); $doc->appendChild($el); return $doc->saveXML(); } // // check if service param is set // if (!isset($service) || $service === "" || $service != "WMS") { header("Content-type: application/xhtml+xml; charset=UTF-8"); echo createExceptionXml("", "Parameter SERVICE invalid"); die; } // // check if request param is set // if (!isset($requestType) || $requestType === "" || ($service == "WMS" && $requestType != "GetCapabilities")) { header("Content-type: application/xhtml+xml; charset=UTF-8"); echo createExceptionXml("", "Parameter REQUEST invalid"); die; } // // check if version param is set // if (!isset($version) || $version === "" || ($service == "WMS" && $version != "1.1.1")) { // optional parameter, set to 1.1.1 if not set $version = "1.1.1"; } // // check if layer id is set // if (!isset($layerId) || !is_numeric($layerId)) { // TO DO: create exception XML header("Content-type: application/xhtml+xml; charset=UTF-8"); echo createExceptionXml("Layer not defined", "Unknown layer id " . $layerId); die; } // // check if layer is stored in database // $wms_sql = "SELECT * FROM wms AS w, layer AS l " . "where l.layer_id = $1 AND l.fkey_wms_id = w.wms_id LIMIT 1"; $v = array($layerId); $t = array("i"); $res_wms_sql = db_prep_query($wms_sql, $v, $t); $wms_row = db_fetch_array($res_wms_sql); if (!$wms_row["wms_id"]) { // TO DO: create exception XML header("Content-type: application/xhtml+xml; charset=UTF-8"); echo createExceptionXml("Layer not defined", "Unknown layer id " . $layerId); die; } // // check if update sequence is valid // $updateSequenceDb = intval($wms_row["wms_timestamp"]); if ($updateSequence) { if ($updateSequence > $updateSequenceDb) { // Exception: code=InvalidUpdateSequence header("Content-type: application/xhtml+xml; charset=UTF-8"); echo createExceptionXml("InvalidUpdateSequence", "Invalid update sequence"); die; } else if ($updateSequence == $updateSequenceDb) { // Exception: code=CurrentUpdateSequence header("Content-type: application/xhtml+xml; charset=UTF-8"); echo createExceptionXml("CurrentUpdateSequence", "Current update sequence"); die; } } // // increment layer count // $monitor = new Layer_load_count(); $monitor->increment($layerId); // --------------------------------------------------------------------------- // // START TO CREATE CAPABILITIES DOC // (return most recent Capabilities XML) // // --------------------------------------------------------------------------- $doc = new DOMDocument('1.0'); $doc->encoding = 'UTF-8'; $doc->standalone = false; #Check for existing content in database #to be adopted TODO armin function validate ($contactInformation_column) { if ($contactInformation_column <> "" AND $contactInformation_column <> NULL) { $contactinformationcheck = true; } else { $contactinformationcheck = false; } return $contactinformationcheck; } #Creating the "WMT_MS_Capabilities" node $wmt_ms_capabilities = $doc->createElement("WMT_MS_Capabilities"); $wmt_ms_capabilities->setAttribute("updateSequence", $wms_row["wms_timestamp"]); if ($inspire){ $wmt_ms_capabilities->setAttribute("xmlns:inspire_common", "http://inspire.ec.europa.eu/schemas/inspire/1.0"); $wmt_ms_capabilities->setAttribute("xmlns:inspire_vs", "http://inspire.ec.europa.eu/schemas/inspire_vs/1.0"); } $wmt_ms_capabilities = $doc->appendChild($wmt_ms_capabilities); $wmt_ms_capabilities->setAttribute('version', '1.1.1'); #Creatig the "Service" node $service = $doc->createElement("Service"); $service = $wmt_ms_capabilities->appendChild($service); #Creating the "Name" Node $name = $doc->createElement("Name"); $name = $service->appendChild($name); $nameText = $doc->createTextNode("OGC:WMS"); $nameText = $name->appendChild($nameText); #Creating the "Title" node if($wms_row['wms_title'] <> "" AND $wms_row['wms_title'] <> NULL) { $title = $doc->createElement("Title"); $title = $service->appendChild($title); $titleText = $doc->createTextNode($wms_row['wms_title']); $titleText = $title->appendChild($titleText); } #Creating the "Abstract" node if($wms_row['wms_abstract'] <> "" AND $wms_row['wms_abstract'] <> NULL) { $abstract = $doc->createElement("Abstract"); $abstract = $service->appendChild($abstract); $abstractText = $doc->createTextNode($wms_row['wms_abstract']); $abstractText = $abstract->appendChild($abstractText); } # switch URLs for OWSPROXY if($wms_row['wms_owsproxy'] <> "" AND $wms_row['wms_owsproxy'] <> NULL) { $tmpOR = $urlPrefix.$_SERVER["HTTP_HOST"]."/owsproxy/".session_id()."/".$wms_row["wms_owsproxy"]."?"; $tmpOR = str_replace(SERVERIP, SERVERNAME, $tmpOR); $wms_row['wms_getcapabilities'] = $tmpOR; $wms_row['wms_getmap'] = $tmpOR; $wms_row['wms_getfeatureinfo'] = $tmpOR; } #Creating the "OnlineResource" node //if($wms_row['wms_getcapabilities'] <> "" AND $wms_row['wms_getcapabilities'] <> NULL) { $onlineResource = $doc->createElement("OnlineResource"); $onlineResource = $service->appendChild($onlineResource); $onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink" ); // $onlineResource->setAttribute("xlink:href", $wms_row['wms_getcapabilities']); $onlRes = $_SERVER["HTTP_HOST"] . $_SERVER["SCRIPT_NAME"] . "?layer_id=" . $layerId."&".session_name()."=".session_id(); if (isset($_SERVER["HTTPS"])) { $onlRes = "https://" . $onlRes; } else { $onlRes = "http://" . $onlRes; } $onlineResource->setAttribute("xlink:href", $onlRes); $onlineResource->setAttribute("xlink:type", "simple"); //} #Insert contact information #Creating "Contact Information" node if (validate($wms_row['contactperson']) && validate($wms_row['contactorganization']) && validate($wms_row['contactposition']) && validate($wms_row['address']) && validate($wms_row['city']) && validate($wms_row['stateorprovince']) && validate($wms_row['postcode']) && //AND validate($wms_row['country']) && validate($wms_row['contactvoicetelephone']) && validate($wms_row['contactfacsimiletelephone']) && validate($wms_row['contactelectronicmailaddress'])) { $contactInformation = $doc->createElement("ContactInformation"); $contactInformation = $service->appendChild($contactInformation); #Creating "Contact Person Primary" node if(validate($wms_row['contactperson']) AND validate($wms_row['contactorganization'])) { $contactPersonPrimary = $doc->createElement("ContactPersonPrimary"); $contactPersonPrimary = $contactInformation->appendChild($contactPersonPrimary); } #Creating the "ContactPerson" node if(validate($wms_row['contactperson'])) { $contactPerson = $doc->createElement("ContactPerson"); $contactPerson = $contactPersonPrimary->appendChild($contactPerson); $contactPersonText = $doc->createTextNode($wms_row['contactperson']); $contactPersonText = $contactPerson->appendChild($contactPersonText); } #Creating the "ContactOrganization" node if(validate($wms_row['contactorganization'])) { $contactOrganization = $doc->createElement("ContactOrganization"); $contactOrganization = $contactPersonPrimary->appendChild($contactOrganization); $contactOrganizationText = $doc->createTextNode($wms_row['contactorganization']); $contactOrganizationText = $contactOrganization->appendChild($contactOrganizationText); } #Creating the "ContactPosition" node if(validate($wms_row['contactposition'])) { $contactPosition = $doc->createElement("ContactPosition"); $contactPosition = $contactInformation->appendChild($contactPosition); $contactPositionText = $doc->createTextNode($wms_row['contactposition']); $contactPositionText = $contactPosition->appendChild($contactPositionText); } #Creating "ContactAddress" node if(validate($wms_row['address']) AND validate($wms_row['city']) AND validate($wms_row['stateorprovince']) AND validate($wms_row['postcode']) /*AND validate($wms_row['country'])*/) { $contactAddress = $doc->createElement("ContactAddress"); $contactAddress = $contactInformation->appendChild($contactAddress); } #Creating the "AddressType" and "Address" textnode if(validate($wms_row['address'])) { $addressType = $doc->createElement("AddressType"); $addressType = $contactAddress->appendChild($addressType); $addresstypeText = $doc->createTextNode("postal"); $addresstypeText = $addressType->appendChild($addresstypeText); $address = $doc->createElement("Address"); $address = $contactAddress->appendChild($address); $addressText = $doc->createTextNode($wms_row['address']); $addressText = $address->appendChild($addressText); } #Creatig the "City" node if(validate($wms_row['city'])) { $city = $doc->createElement("City"); $city = $contactAddress->appendChild($city); $cityText = $doc->createTextNode($wms_row['city']); $cityText = $city->appendChild($cityText); } #Creatig the "StateOrProvince" node if(validate($wms_row['stateorprovince'])) { $stateOrProvince = $doc->createElement("StateOrProvince"); $stateOrProvince = $contactAddress->appendChild($stateOrProvince); $stateOrProvinceText = $doc->createTextNode($wms_row['stateorprovince']); $stateOrProvinceText = $stateOrProvince->appendChild($stateOrProvinceText); } #Creatig the "PostCode" node if(validate($wms_row['postcode'])) { $postCode = $doc->createElement("PostCode"); $postCode = $contactAddress->appendChild($postCode); $postCodeText = $doc->createTextNode($wms_row['postcode']); $postCodeText = $postCode->appendChild($postCodeText); } #Creatig the "Country" node if(isset($wms_row['country']) AND validate($wms_row['country'])) { $country = $doc->createElement("Country"); $country = $contactAddress->appendChild($country); $countryText = $doc->createTextNode($wms_row['country']); $countryText = $country->appendChild($countryText); } #Creatig the "ContactVoiceTelephone" node if(validate($wms_row['contactvoicetelephone'])) { $contactVoiceTelephone = $doc->createElement("ContactVoiceTelephone"); $contactVoiceTelephone = $contactInformation->appendChild($contactVoiceTelephone); $contactVoiceTelephoneText = $doc->createTextNode($wms_row['contactvoicetelephone']); $contactVoiceTelephoneText = $contactVoiceTelephone->appendChild($contactVoiceTelephoneText); } #Creatig the "ContactFacsimileTelephone" node if(validate($wms_row['contactfacsimiletelephone'])) { $contactFacsimileTelephone = $doc->createElement("ContactFacsimileTelephone"); $contactFacsimileTelephone = $contactInformation->appendChild($contactFacsimileTelephone); $contactFacsimileTelephoneText = $doc->createTextNode($wms_row['contactfacsimiletelephone']); $contactFacsimileTelephoneText = $contactFacsimileTelephone->appendChild($contactFacsimileTelephoneText); } #Creatig the "ContactElectronicMailAddress" node if(validate($wms_row['contactelectronicmailaddress'])) { $contactElectronicMailAddress = $doc->createElement("ContactElectronicMailAddress"); $contactElectronicMailAddress = $contactInformation->appendChild($contactElectronicMailAddress); $contactElectronicMailAddressText = $doc->createTextNode($wms_row['contactelectronicmailaddress']); $contactElectronicMailAddressText = $contactElectronicMailAddress->appendChild($contactElectronicMailAddressText); } } #Creatig the "Fees" node if(validate($wms_row['fees'])) { $fees = $doc->createElement("Fees"); $fees = $service->appendChild($fees); $feesText = $doc->createTextNode($wms_row['fees']); $feesText = $fees->appendChild($feesText); } #Creating the "AccessConstraints" node if(validate($wms_row['accessconstraints'])) { $accessConstraints = $doc->createElement("AccessConstraints"); $accessConstraints = $service->appendChild($accessConstraints); $accessConstraintsText = $doc->createTextNode($wms_row['accessconstraints']); $accessConstraintsText = $accessConstraints->appendChild($accessConstraintsText); } #Creating the "Capability" node $capability = $doc->createElement("Capability"); $capability = $wmt_ms_capabilities->appendChild($capability); #Creatig the "Request" node $request = $doc->createElement("Request"); $request = $capability->appendChild($request); ############################################################ #GetCapabilities #Creatig the "GetCapabilities" node $getCapabilities = $doc->createElement("GetCapabilities"); $getCapabilities = $request->appendChild($getCapabilities); #Creatig the "Format" node $wms_format_sql ="SELECT data_format FROM wms_format WHERE fkey_wms_id = $1 AND data_type = 'capability'"; $v = array($wms_row['wms_id']); $t = array("i"); $res_wms_format_sql = db_prep_query($wms_format_sql, $v, $t); while ($wms_format_row = db_fetch_array($res_wms_format_sql)) { $format = $doc->createElement("Format"); $format = $getCapabilities->appendChild($format); $formatText = $doc->createTextNode($wms_format_row['data_format']); $formatText = $format->appendChild($formatText); } #cause the format for capabilities is not read : $format = $doc->createElement("Format"); $format = $getCapabilities->appendChild($format); $formatText = $doc->createTextNode('application/vnd.ogc.wms_xml'); $formatText = $format->appendChild($formatText); #Creating the "DCPType" node $DCPType = $doc->createElement("DCPType"); $DCPType = $getCapabilities->appendChild($DCPType); #Creating the "HTTP" node $HTTP = $doc->createElement("HTTP"); $HTTP = $DCPType->appendChild($HTTP); #Creating the "Get" node $get = $doc->createElement("Get"); $get = $HTTP->appendChild($get); #Creating the "OnlineResource" node //if ($wms_row['wms_getcapabilities'] <> "" AND $wms_row['wms_getcapabilities'] <> NULL) { $onlineResource = $doc->createElement("OnlineResource"); $onlineResource = $get->appendChild($onlineResource); $onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); // $onlineResource->setAttribute("xlink:href", $wms_row['wms_getcapabilities']); $onlRes = $_SERVER["HTTP_HOST"] . $_SERVER["SCRIPT_NAME"] . "?layer_id=" . $layerId; if (isset($_SERVER["HTTPS"])) { $onlRes = "https://" . $onlRes; } else { $onlRes = "http://" . $onlRes; } $onlineResource->setAttribute("xlink:href", $onlRes); $onlineResource->setAttribute("xlink:type", "simple"); //} #Creating the "Post" node $post = $doc->createElement("Post"); $post = $HTTP->appendChild($post); #Creating the "OnlineResource" node //if ($wms_row['wms_getcapabilities'] <> "" AND $wms_row['wms_getcapabilities'] <> NULL) { $onlineResource = $doc->createElement("OnlineResource"); $onlineResource = $post->appendChild($onlineResource); $onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); // $onlineResource->setAttribute("xlink:href", $wms_row['wms_getcapabilities']); $onlRes = $_SERVER["HTTP_HOST"] . $_SERVER["SCRIPT_NAME"] . "?layer_id=" . $layerId; if (isset($_SERVER["HTTPS"])) { $onlRes = "https://" . $onlRes; } else { $onlRes = "http://" . $onlRes; } $onlineResource->setAttribute("xlink:href", $onlRes); $onlineResource->setAttribute("xlink:type", "simple"); //} ########################################################## #GetMap #Creatig the "GetMap" node $getMap = $doc->createElement("GetMap"); $getMap = $request->appendChild($getMap); #Creatig the "Format" node $wms_format_sql ="SELECT data_format FROM wms_format WHERE fkey_wms_id = $1 AND data_type = 'map'"; $v = array($wms_row['wms_id']); $t = array("i"); $res_wms_format_sql = db_prep_query($wms_format_sql, $v, $t); while ($wms_format_row = db_fetch_array($res_wms_format_sql)) { $format = $doc->createElement("Format"); $format = $getMap->appendChild($format); $formatText = $doc->createTextNode($wms_format_row['data_format']); $formatText = $format->appendChild($formatText); } #Creating the "DCPType" node $DCPType = $doc->createElement("DCPType"); $DCPType = $getMap->appendChild($DCPType); #Creating the "HTTP" node $HTTP = $doc->createElement("HTTP"); $HTTP = $DCPType->appendChild($HTTP); #Creating the "Get" node $get = $doc->createElement("Get"); $get = $HTTP->appendChild($get); #Creating the "OnlineResource" node if ($wms_row['wms_getmap'] <> "" AND $wms_row['wms_getmap'] <> NULL) { $onlineResource = $doc->createElement("OnlineResource"); $onlineResource = $get->appendChild($onlineResource); $onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink" ); $onlineResource->setAttribute("xlink:href", $wms_row['wms_getmap']); $onlineResource->setAttribute("xlink:type", "simple"); } #Creating the "Post" node $post = $doc->createElement("Post"); $post = $HTTP->appendChild($post); #Creating the "OnlineResource" node if($wms_row['wms_getmap'] <> "" AND $wms_row['wms_getmap'] <> NULL) { $onlineResource = $doc->createElement("OnlineResource"); $onlineResource = $post->appendChild($onlineResource); $onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink" ); $onlineResource->setAttribute("xlink:href", $wms_row['wms_getmap']); $onlineResource->setAttribute("xlink:type", "simple"); } ########################################################## #GetFeatureInfo #Creatig the "GetFeatureInfo" node $getFeatureInfo = $doc->createElement("GetFeatureInfo"); $getFeatureInfo = $request->appendChild($getFeatureInfo); #Creatig the "Format" node $wms_format_sql ="SELECT data_format FROM wms_format WHERE fkey_wms_id = $1 AND data_type = 'featureinfo'"; $v = array($wms_row['wms_id']); $t = array("i"); $res_wms_format_sql = db_prep_query($wms_format_sql, $v, $t); while ($wms_format_row = db_fetch_array($res_wms_format_sql)) { $format = $doc->createElement("Format"); $format = $getFeatureInfo->appendChild($format); $formatText = $doc->createTextNode($wms_format_row['data_format']); $formatText = $format->appendChild($formatText); } #Creating the "DCPType" node $DCPType = $doc->createElement("DCPType"); $DCPType = $getFeatureInfo->appendChild($DCPType); #Creating the "HTTP" node $HTTP = $doc->createElement("HTTP"); $HTTP = $DCPType->appendChild($HTTP); #Creating the "Get" node $get = $doc->createElement("Get"); $get = $HTTP->appendChild($get); #Creating the "OnlineResource" node if($wms_row['wms_getfeatureinfo'] <> "" AND $wms_row['wms_getfeatureinfo'] <> NULL) { $onlineResource = $doc->createElement("OnlineResource"); $onlineResource = $get->appendChild($onlineResource); $onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink" ); $onlineResource->setAttribute("xlink:href", $wms_row['wms_getfeatureinfo']); $onlineResource->setAttribute("xlink:type", "simple"); } #Creating the "Post" node $post = $doc->createElement("Post"); $post = $HTTP->appendChild($post); #Creating the "OnlineResource" node if($wms_row['wms_getfeatureinfo'] <> "" AND $wms_row['wms_getfeatureinfo'] <> NULL) { $onlineResource = $doc->createElement("OnlineResource"); $onlineResource = $post->appendChild($onlineResource); $onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink" ); $onlineResource->setAttribute("xlink:href", $wms_row['wms_getfeatureinfo']); $onlineResource->setAttribute("xlink:type", "simple"); } #Creating the "Exeption" node $exception = $doc->createElement("Exception"); $exception = $capability->appendChild($exception); #Creatig the "Format" node $wms_format_sql ="SELECT data_format FROM wms_format WHERE fkey_wms_id = $1 AND data_type = 'exception'"; $v = array($wms_row['wms_id']); $t = array("i"); $res_wms_format_sql = db_prep_query($wms_format_sql, $v, $t); while ($wms_format_row = db_fetch_array($res_wms_format_sql)) { $format = $doc->createElement("Format"); $format = $exception->appendChild($format); $formatText = $doc->createTextNode($wms_format_row['data_format']); $formatText = $format->appendChild($formatText); } ################################################################ #INSPIRE if ($inspire) { #generating the vendor specific node $vendorSpecificCapabilities = $doc->createElement("VendorSpecificCapabilities"); $vendorSpecificCapabilities = $capability->appendChild($vendorSpecificCapabilities); #generate inspire_vs:ExtendedCapabilities node $inspire_vs_ExtendedCapabilities = $doc->createElement("inspire_vs:ExtendedCapabilities"); $inspire_vs_ExtendedCapabilities->setAttribute("xmlns:inspire_common", "http://inspire.ec.europa.eu/schemas/common/1.0"); $inspire_vs_ExtendedCapabilities = $vendorSpecificCapabilities->appendChild($inspire_vs_ExtendedCapabilities); #generate inspire_vs: node #$inspire_vs_ExtendedCapabilities = $doc->createElement("inspire_vs:ExtendedCapabilities"); #$inspire_vs_ExtendedCapabilities = $vendorSpecificCapabilities->appendChild($inspire_vs_ExtendedCapabilities); #MetadataUrl to inspire service metadata $inspire_common_MetadataUrl = $doc->createElement("inspire_common:MetadataUrl"); $inspire_common_MetadataUrl = $inspire_vs_ExtendedCapabilities->appendChild($inspire_common_MetadataUrl); #URL $inspire_common_URL = $doc->createElement("inspire_common:URL"); $inspire_common_URLText = $doc->createTextNode($inspireServiceMetadataUrl.$layerId); $inspire_common_URL->appendChild($inspire_common_URLText); $inspire_common_URL = $inspire_common_MetadataUrl->appendChild($inspire_common_URL); #MediaType $inspire_common_MediaType = $doc->createElement("inspire_common:MediaType"); $inspire_common_MediaTypeText = $doc->createTextNode('application/vnd.iso.19139+xml');#from http://inspire.ec.europa.eu/schemas/inspire_vs/1.0/examples/WMS_Image2000GetCapabilities_InspireSchema.xml $inspire_common_MediaType->appendChild($inspire_common_MediaTypeText); $inspire_common_MediaType = $inspire_common_MetadataUrl->appendChild($inspire_common_MediaType); #Language Part #SupportedLanguages $inspire_common_SupportedLanguages = $doc->createElement("inspire_common:SupportedLanguages"); $inspire_common_SupportedLanguages = $inspire_vs_ExtendedCapabilities->appendChild($inspire_common_SupportedLanguages); #DefaultLanguage $inspire_common_DefaultLanguage = $doc->createElement("inspire_common:DefaultLanguage"); $inspire_common_DefaultLanguage = $inspire_common_SupportedLanguages->appendChild($inspire_common_DefaultLanguage); #Language $inspire_common_Language = $doc->createElement("inspire_common:Language"); $inspire_common_LanguageText = $doc->createTextNode('ger'); $inspire_common_Language->appendChild($inspire_common_LanguageText); $inspire_common_Language = $inspire_common_DefaultLanguage->appendChild($inspire_common_Language); #SupportedLanguage $inspire_common_SupportedLanguage = $doc->createElement("inspire_common:SupportedLanguage"); $inspire_common_SupportedLanguage = $inspire_common_SupportedLanguages->appendChild($inspire_common_SupportedLanguage); #Language $inspire_common_Language = $doc->createElement("inspire_common:Language"); $inspire_common_LanguageText = $doc->createTextNode('ger'); $inspire_common_Language->appendChild($inspire_common_LanguageText); $inspire_common_Language = $inspire_common_SupportedLanguage->appendChild($inspire_common_Language); #ResponseLanguage $inspire_common_ResponseLanguage = $doc->createElement("inspire_common:ResponseLanguage"); $inspire_common_ResponseLanguage = $inspire_vs_ExtendedCapabilities->appendChild($inspire_common_ResponseLanguage); #Language $inspire_common_Language = $doc->createElement("inspire_common:Language"); $inspire_common_LanguageText = $doc->createTextNode('ger'); $inspire_common_Language->appendChild($inspire_common_LanguageText); $inspire_common_Language = $inspire_common_ResponseLanguage->appendChild($inspire_common_Language); } ################################################################ #Querying layer table $layer_sql = "SELECT * FROM layer WHERE layer.fkey_wms_id = $1 AND layer.layer_parent = ''"; $v = array($wms_row['wms_id']); $t = array("i"); $res_layer_sql = db_prep_query($layer_sql, $v, $t); $layer_row = db_fetch_array($res_layer_sql); #Creating layer node $layer = $doc->createElement("Layer"); $layer = $capability->appendChild($layer); #Write layer to parent layer array $parentLayerArray[$layer_row['layer_pos']] = $layer; #Creating Name node if ($layer_row['layer_name'] <> "" AND $layer_row['layer_name'] <> NULL) { $name = $doc->createElement("Name"); $name = $layer->appendChild($name); $nameText = $doc->createTextNode($layer_row['layer_name']); $nameText = $name->appendChild($nameText); } #Creating Title node if ($layer_row['layer_title'] <> "" AND $layer_row['layer_title'] <> NULL) { $title = $doc->createElement("Title"); $title = $layer->appendChild($title); $titleText = $doc->createTextNode($layer_row['layer_title']); $titleText = $title->appendChild($titleText); } #Creating the "Abstract" node if($layer_row['layer_abstract'] <> "" AND $layer_row['layer_abstract'] <> NULL) { $abstract = $doc->createElement("Abstract"); $abstract = $layer->appendChild($abstract); $abstractText = $doc->createTextNode($layer_row['layer_abstract']); $abstractText = $abstract->appendChild($abstractText); } #Request the specific wms- and layerkeywords $keyword_sql = "SELECT DISTINCT keyword FROM keyword, layer_keyword, layer " . "WHERE keyword.keyword_id = layer_keyword.fkey_keyword_id " . "AND layer_keyword.fkey_layer_id = layer.layer_id " . "AND layer.fkey_wms_id = $1"; $v = array($wms_row['wms_id']); $t = array("i"); $res_keyword_sql = db_prep_query($keyword_sql, $v, $t); #Creating list of keyword nodes #Iterating over a List of Keywords $keywordlistExist = 0; while ($keyword_sql = db_fetch_array($res_keyword_sql)) { #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); $keyword_domText = $doc->createTextNode($keyword_sql['keyword']); $keyword_domText = $keyword_dom->appendChild($keyword_domText); } #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 = $1"; $v = array($layer_row['layer_id']); $t = array("i"); $res_espg_sql = db_prep_query($epsg_sql, $v, $t); $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($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, " . "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"); $res_espg_sql = db_prep_query($epsg_sql, $v, $t); while ($epsg_row = db_fetch_array($res_espg_sql)) { #set only epsg 4326 for latlonbbox if ($epsg_row['epsg'] == "EPSG:4326") { $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 = $layer->appendChild($latLonBoundingBox); $latLonBoundingBox->setAttribute('minx', $latlon['minx']); $latLonBoundingBox->setAttribute('miny', $latlon['miny']); $latLonBoundingBox->setAttribute('maxx', $latlon['maxx']); $latLonBoundingBox->setAttribute('maxy', $latlon['maxy']); break; } } #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 = $1"; $v = array($layer_row['layer_id']); $t = array("i"); $res_espg_sql = db_prep_query($epsg_sql, $v, $t); while ($epsg_row = db_fetch_array($res_espg_sql)) { #set only first epsg for bbox $bbox['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 = $layer->appendChild($boundingBox); $boundingBox->setAttribute('SRS', $bbox['epsg']); $boundingBox->setAttribute('minx', $bbox['minx']); $boundingBox->setAttribute('miny', $bbox['miny']); $boundingBox->setAttribute('maxx', $bbox['maxx']); $boundingBox->setAttribute('maxy', $bbox['maxy']); } #Append epsg string to srs node $srsText = $doc->createTextNode($epsgText); $srsText = $srs->appendChild($srsText); ####### duplicate root layer #if layer is root layer itself! # ##if ($layer_row['layer_pos']=='0'){ # ##$clonedLayer = $layer->cloneNode(true); ##$clonedLayer->setAttribute("queryable", "0"); ##$clonedLayer->setAttribute("cascaded", "0"); ##$layer->appendChild($clonedLayer); # ##} # ############## 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); # $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); } # while ($sub_layer_row = db_fetch_array($res_sub_layer_sql)) { #Creating layer node $sub_layer = $doc->createElement("Layer"); $e = new mb_exception("wms.php: layer_parent:".$sub_layer_row['layer_parent']); $parent = $parentLayerArray[$sub_layer_row['layer_parent']]; $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']); } #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); #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) { $name = $doc->createElement("Name"); $name = $sub_layer->appendChild($name); $nameText = $doc->createTextNode($sub_layer_row['layer_name']); $nameText = $name->appendChild($nameText); } #Creating Title node if($sub_layer_row['layer_title'] <> "" AND $sub_layer_row['layer_title'] <> NULL) { $title = $doc->createElement("Title"); $title = $sub_layer->appendChild($title); $titleText = $doc->createTextNode($sub_layer_row['layer_title']); $titleText = $title->appendChild($titleText); } #Creating the "Abstract" node if($sub_layer_row['layer_abstract'] <> "" AND $sub_layer_row['layer_abstract'] <> NULL) { $abstract = $doc->createElement("Abstract"); $abstract = $sub_layer->appendChild($abstract); $abstractText = $doc->createTextNode($sub_layer_row['layer_abstract']); $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)) { #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); $keyword_domText = $doc->createTextNode($keyword_sql['keyword']); $keyword_domText = $keyword_dom->appendChild($keyword_domText); } // inherit srs from parent layer $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']; $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); $srsText = $doc->createTextNode($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']; $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']); } } #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']; $res_espg_sql = db_query($epsg_sql); while ($epsg_row = db_fetch_array($res_espg_sql)) { #set only first epsg for bbox $bbox['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->setAttribute('SRS', $bbox['epsg']); $boundingBox->setAttribute('minx', $bbox['minx']); $boundingBox->setAttribute('miny', $bbox['miny']); $boundingBox->setAttribute('maxx', $bbox['maxx']); $boundingBox->setAttribute('maxy', $bbox['maxy']); } # Creating Metadata Node //read out all metadata entries for specific layer $subLayerId = $sub_layer_row['layer_id']; $sql = <<createElement("MetadataURL"); $metadataUrl = $sub_layer->appendChild($metadataUrl); $metadataUrl->setAttribute('type', $row_metadata['linktype']); $format = $doc->createElement("Format"); $format = $metadataUrl->appendChild($format); $formatText = $doc->createTextNode($row_metadata['md_format']); $formatText = $format->appendChild($formatText); $onlineResource = $doc->createElement("OnlineResource"); $onlineResource = $metadataUrl->appendChild($onlineResource); $onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink" ); $onlineResource->setAttribute("xlink:href", $row_metadata['link']); break; case 'external': $metadataUrl = $doc->createElement("MetadataURL"); $metadataUrl = $sub_layer->appendChild($metadataUrl); $metadataUrl->setAttribute('type', 'ISO19115:2003'); $format = $doc->createElement("Format"); $format = $metadataUrl->appendChild($format); $formatText = $doc->createTextNode("text/xml"); $formatText = $format->appendChild($formatText); $onlineResource = $doc->createElement("OnlineResource"); $onlineResource = $metadataUrl->appendChild($onlineResource); $onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink" ); $onlineResource->setAttribute("xlink:href", $row_metadata['link']); $onlineResource->setAttribute("xlink:href", $mapbenderMetadataUrlUrl.$row_metadata['uuid']); break; case 'upload': $metadataUrl = $doc->createElement("MetadataURL"); $metadataUrl = $sub_layer->appendChild($metadataUrl); $metadataUrl->setAttribute('type', 'ISO19115:2003'); $format = $doc->createElement("Format"); $format = $metadataUrl->appendChild($format); $formatText = $doc->createTextNode("text/xml"); $formatText = $format->appendChild($formatText); $onlineResource = $doc->createElement("OnlineResource"); $onlineResource = $metadataUrl->appendChild($onlineResource); $onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink" ); $onlineResource->setAttribute("xlink:href", $row_metadata['link']); $onlineResource->setAttribute("xlink:href", $mapbenderMetadataUrlUrl.$row_metadata['uuid']); break; case 'metador': $metadataUrl = $doc->createElement("MetadataURL"); $metadataUrl = $sub_layer->appendChild($metadataUrl); $metadataUrl->setAttribute('type', 'ISO19115:2003'); $format = $doc->createElement("Format"); $format = $metadataUrl->appendChild($format); $formatText = $doc->createTextNode("text/xml"); $formatText = $format->appendChild($formatText); $onlineResource = $doc->createElement("OnlineResource"); $onlineResource = $metadataUrl->appendChild($onlineResource); $onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink" ); $onlineResource->setAttribute("xlink:href", $row_metadata['link']); $onlineResource->setAttribute("xlink:href", $mapbenderMetadataUrlUrl.$row_metadata['uuid']); break; default: $metadataUrl = $doc->createElement("MetadataURL"); $metadataUrl = $sub_layer->appendChild($metadataUrl); $metadataUrl->setAttribute('type', 'ISO19115:2003'); $format = $doc->createElement("Format"); $format = $metadataUrl->appendChild($format); $formatText = $doc->createTextNode("text/xml"); $formatText = $format->appendChild($formatText); $onlineResource = $doc->createElement("OnlineResource"); $onlineResource = $metadataUrl->appendChild($onlineResource); $onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink" ); $onlineResource->setAttribute("xlink:href", $row['link']); $onlineResource->setAttribute("xlink:href", "Url not given - please check your registry!"); break; } $onlineResource->setAttribute("xlink:type", "simple"); //Add linkage to Capabilities $i++; $e = new mb_exception("i: ".$i); } # Creating DataURL Node $dataUrl = $doc->createElement("DataURL"); $dataUrl = $sub_layer->appendChild($dataUrl); $format = $doc->createElement("Format"); $format = $dataUrl->appendChild($format); $formatText = $doc->createTextNode('text/html'); $formatText = $format->appendChild($formatText); if($wms_row['wms_owsproxy'] <> "" AND $wms_row['wms_owsproxy'] <> NULL) { $onlineResource = $doc->createElement("OnlineResource"); $onlineResource = $dataUrl->appendChild($onlineResource); $onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink" ); $onlineResource->setAttribute("xlink:href", OWSPROXY."/".session_id()."/".$wms_row["wms_owsproxy"]."?"); $onlineResource->setAttribute("xlink:type", "simple"); } else { if($sub_layer_row['layer_dataurl'] <> "" AND $sub_layer_row['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:type", "simple"); } else { $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:type", "simple"); } } #Creating Style Node $style = $doc->createElement("Style"); $style = $sub_layer->appendChild($style); $name = $doc->createElement("Name"); $name = $style->appendChild($name); $nameText = $doc->createTextNode('default'); $nameText = $name->appendChild($nameText); $title = $doc->createElement("Title"); $title = $style->appendChild($title); $titleText = $doc->createTextNode('default'); $titleText = $title->appendChild($titleText); if($wms_row['wms_getlegendurl'] <> "" AND $wms_row['wms_getlegendurl'] <> NULL){ $legendUrl = $doc->createElement("LegendURL"); $legendUrl = $style->appendChild($legendUrl); $legendUrl->setAttribute("width", "10" ); $legendUrl->setAttribute("height", "8" ); $format = $doc->createElement("Format"); $format = $legendUrl->appendChild($format); $formatText = $doc->createTextNode('image/png'); $formatText = $format->appendChild($formatText); if($wms_row['wms_owsproxy'] <> "" AND $wms_row['wms_owsproxy'] <> NULL) { $onlineResource = $doc->createElement("OnlineResource"); $onlineResource = $legendUrl->appendChild($onlineResource); $onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink" ); $onlineResource->setAttribute("xlink:href", OWSPROXY."/".session_id()."/".$wms_row["wms_owsproxy"]."?version=1.1.1&service=WMS&request=GetLegendGraphic&layer=".$sub_layer_row['layer_name']."&format=image/png"); $onlineResource->setAttribute("xlink:type", "simple"); } else { if($wms_row['wms_getlegendurl'] <> "" AND $wms_row['wms_getlegendurl'] <> NULL) { $onlineResource = $doc->createElement("OnlineResource"); $onlineResource = $legendUrl->appendChild($onlineResource); $onlineResource->setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink" ); $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"); $onlineResource->setAttribute("xlink:type", "simple"); } } } #Creating "ScaleHint" node if ($sub_layer_row['layer_minscale'] <> "" AND $sub_layer_row['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)); } } header("Content-type: application/xhtml+xml; charset=UTF-8"); echo $doc->saveXml(); ?>