3 votos

Cómo crear un Wrapper para mapserver

Quiero crear una envoltura para mi servidor. (Yo uso mapserver y apache en windows server)

En este documento ( http://mapserver.org/cgi/wrapper.html ) consulte las sugerencias:

1º :

#!/bin/sh
MAPSERV="/path/to/my/mapserv"
MS_MAPFILE="/path/to/my/mapfile.map" exec ${MAPSERV}

2º :

#!/bin/sh
MAPSERV="/path/to/my/mapserv"
MAPFILE="/path/to/my/mapfile.map"
if [ "${REQUEST_METHOD}" = "GET" ]; then
  if [ -z "${QUERY_STRING}" ]; then
    QUERY_STRING="map=${MAPFILE}"
  else
    QUERY_STRING="map=${MAPFILE}&${QUERY_STRING}"
  fi
  exec ${MAPSERV}
else
  echo "Sorry, I only understand GET requests."
fi
exit 1
# End of Script

1. ¿Se ejecuta en un servidor Windows?

2. en ese documento dice : "Ponga el script en el directorio cgi-bin de su servidor web, y hágalo ejecutable". ¿cuál es el nombre y la extensión del script guardado?

también en MapServer WMS Document en url " http://mapserver.org/ogc/wfs_server.html " se refieren a algunas sugerencias :

  • Reglas Apache ReWrite (usando Apache mod_rewrite)
  • Variables de entorno de Apache - MS_MAPFILE
  • Apache SetEnvIf
  • Script ASP (IIS - Microsoft Windows)
  • Envoltorio de Mapscript
  • Wrapper script (Unix)

3. ¿Cuál es la mejor sugerencia? ¿Por qué? ¿Cuáles son las ventajas de cada una?

4. "1 ª sugerencia" y "Apache mod_rewrite" parece fácil y bueno Suficiente. ¿No es así?

1voto

nmtoken Puntos 1096

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

/*load map*/
$oMap = ms_newMapobj("D:/path/to/the/map-file/onegeology.map");s/

/*initialise request object and parse request*/
$request = ms_newowsrequestobj();
$request->loadparams();
ms_ioinstallstdouttobuffer();

/*get response from mapserver*/
$oMap->owsdispatch($request);
$contenttype = ms_iostripstdoutbuffercontenttype();

header('Content-type:' . $contenttype);

$operation = $request->getValueByName('Request');
$version = $request->getValueByName('VERSION');

/*insert inspire pieces only for version 1.3.0*/
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();
/************************************************************************/
/*                            altercapabilities                         */
/*                                                                      */
/*      Utility function to add the minimum requirement parts into      */
/*      a capabilities document.                                        */
/************************************************************************/
function altercapabilities($capabilities_xml)
{
    $doc = new DOMDocument();

    $doc->loadXML($capabilities_xml);

    $root = $doc->documentElement;

/* ==================================================================== */
/*      add inspire name space and schema locations                     */
/* ==================================================================== */
    $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;

    /*use array of attributes. getAttributeNS does not seem to return the value*/
    //$schema_value = $root->getAttribute('schemaLocation');
    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;
        }
    }

/* ==================================================================== */
/*      add the extend capabilities before the Layer element.           */
/* ==================================================================== */
    $capability_node = $doc->getElementsByTagName('Capability')->item(0);
    $layer_node = $capability_node->getElementsByTagName('Layer')->item(0);
    /*
    //minimum requirement 
    //a 'scenario 1' response for a service that supports only one language.
    //ref: Technical Guidance for the implementation of INSPIRE View Services v3.0
        <inspire_vs:ExtendedCapabilities>
            <inspire_common:MetadataUrl xsi:type="inspire_common:resourceLocatorType">               
                <inspire_common:URL>http://metadata.bgs.ac.uk/geonetwork/srv/en/csw?SERVICE=CSW&REQUEST=GetRecordById&ID=7822e848-822d-45a5-8584-56d352fd2170&elementSetName=full&OutputSchema=csw:IsoRecord&</inspire_common:URL>
                <inspire_common:MediaType>application/xml;charset=UTF-8</inspire_common:MediaType>
                //<inspire_common:MediaType>application/vnd.iso.19139+xml</inspire_common:MediaType>
            </inspire_common:MetadataUrl>
            <inspire_common:SupportedLanguages>
                <inspire_common:DefaultLanguage>
                    <inspire_common:Language>eng</inspire_common:Language>
                </inspire_common:DefaultLanguage>
            </inspire_common:SupportedLanguages>
            <inspire_com:ResponseLanguage>
                <inspire_com:Language>eng</inspire_com:Language>
            </inspire_com:ResponseLanguage>
        </inspire_vs:ExtendedCapabilities>
     */

    $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&

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X