Escribí algunos php mapscript hace un tiempo para inyectar un poco de información personalizada en mi respuesta WMS GetCapabilities ~ añadiendo una sección de capacidades extendidas para hacer un servicio compatible con INSPIRE, antes de que la funcionalidad esté disponible de forma nativa en MapServer 6.2.
El punto de partida fue un MapServer para Windows (MS4W) con un punto final de, por ejemplo
http://your-server-name/cgi-bin/BGS_Bedrock_and_Superficial_Geology/wms ?
y una respuesta GetCapabilities sin adulterar como:
http://your-server-name/cgi-bin/BGS_Bedrock_and_Superficial_Geology/wms?service=WMS&request=GetCapabilities&
Eche un vistazo al libro de recetas de OneGeology si desea ver cómo configurar un servicio de este tipo Configuración paso a paso para RSU .
Ahora con mi servicio funcionando (sabiendo que mi archivo map no tiene errores) tomo mi archivo php (llamémoslo wms.php) como el de abajo y lo pongo en una ubicación que permita que php se ejecute.
<?php
$oMap = ms_newMapobj("D:/path/to/the/map-file/onegeology.map");s/
$request = ms_newowsrequestobj();
$request->loadparams();
ms_ioinstallstdouttobuffer();
$oMap->owsdispatch($request);
$contenttype = ms_iostripstdoutbuffercontenttype();
header('Content-type:' . $contenttype);
$operation = $request->getValueByName('Request');
$version = $request->getValueByName('VERSION');
if ((strcasecmp($version,'1.3.0') ==0 || $version == "") && strcasecmp($operation,'GetCapabilities') == 0)
{
$content = ms_iogetstdoutbufferstring();
$content = altercapabilities($content);
echo $content;
}
else
ms_iogetStdoutBufferBytes();
ms_ioresethandlers();
function altercapabilities($capabilities_xml)
{
$doc = new DOMDocument();
$doc->loadXML($capabilities_xml);
$root = $doc->documentElement;
$doc->createAttributeNS('http://inspire.ec.europa.eu/schemas/common/1.0' ,'inspire_common:inspire_common');
$doc->createAttributeNS('http://inspire.ec.europa.eu/schemas/inspire_vs/1.0' ,'inspire_vs:inspire_vs');
$root = $doc->documentElement;
$attrs = $root->attributes;
foreach ($attrs as $i => $attr)
{
if (strstr($attr->name, 'schemaLocation'))
{
$new_value = $attr->value . " http://inspire.ec.europa.eu/schemas/inspire_vs/1.0 http://inspire.ec.europa.eu/schemas/inspire_vs/1.0/inspire_vs.xsd";
$root->setAttribute('xsi:schemaLocation', $new_value);
break;
}
}
$capability_node = $doc->getElementsByTagName('Capability')->item(0);
$layer_node = $capability_node->getElementsByTagName('Layer')->item(0);
$element = $doc->createElement('inspire_vs:ExtendedCapabilities');
$extend_root =$capability_node->insertBefore($element, $layer_node);
$metadata_url = $doc->createElement('inspire_common:MetadataUrl');
$node_added = $extend_root->appendChild($metadata_url);
$md_attribute = $doc->createAttribute('xsi:type');
$metadata_url->appendChild($md_attribute);
$md_att_text = $doc->createTextNode('inspire_common:resourceLocatorType');
$md_attribute->appendChild($md_att_text);
$new_node = $doc->createElement('inspire_common:URL');
$node_tmp = $node_added->appendChild($new_node);
$node_tmp->appendChild($doc->createTextNode('http://metadata.bgs.ac.uk/geonetwork/srv/en/csw?SERVICE=CSW&REQUEST=GetRecordById&ID=a0a82d76-657c-2a78-e044-0003ba9b0d98&elementSetName=full&OutputSchema=http://www.isotc211.org/2005/gmd&'));
$new_node = $doc->createElement('inspire_common:MediaType');
$node_tmp = $node_added->appendChild($new_node);
$node_tmp->appendChild($doc->createTextNode('application/xml'));
$supp_lan = $doc->createElement('inspire_common:SupportedLanguages');
$node_added = $extend_root->appendChild( $supp_lan);
$def_lan = $doc->createElement('inspire_common:DefaultLanguage');
$node_tmp = $node_added->appendChild($def_lan);
$new_node = $doc->createElement('inspire_common:Language');
$node_tmp = $def_lan->appendChild($new_node);
$node_tmp->appendChild($doc->createTextNode('eng'));
$response_lan = $doc->createElement('inspire_common:ResponseLanguage');
$node_added = $extend_root->appendChild( $response_lan);
$new_node = $doc->createElement('inspire_common:Language');
$node_tmp = $node_added->appendChild($new_node);
$node_tmp->appendChild($doc->createTextNode('eng'));
return $doc->saveXML();
}
?>
Ahora podemos llamar al servicio utilizando este archivo php como:
http://your-server-name/BGS_Bedrock_and_Superficial_Geology/wms.php?service=WMS&request=GetCapabilities&