Запрос PHP Post WMS GetMap с использованием XML (GeoServer)

Мне нужно «отправить» XML-файл в Geoserver WMS GetMap и получить обратно изображение. У меня есть действующий XML, который я могу протестировать с помощью «демонстрационной» функции на Geoserver, и он возвращает изображение, как и ожидалось.

Однако я не могу понять, какой механизм мне нужно использовать для генерации того же запроса и ответа в PHP.

Я пробовал использовать cURL (поскольку я уже успешно использую для запросов WFS) и играл с fputs, но я не могу его взломать.

Есть ли у кого-нибудь рабочий пример XML-запроса WMS GetMap «Отправленный» к GeoServer с использованием PHP?

Большое спасибо, Стив


person user8262    schedule 06.06.2013    source источник
comment
у вас может быть больше успеха, задавая stackoverflow (или другой сайт php)   -  person Ian Turton    schedule 07.06.2013


Ответы (1)


Plesae см. В приведенном ниже коде пример того, как использовать curl для получения элементов с геосервера с помощью xml, php и curl.

<?php

  $xml_builder = '
                    <?xml version="1.0" encoding="utf-8"?>
                    <ogc:GetMap xmlns:ogc="http://www.opengis.net/ows"
                        xmlns:gml="http://www.opengis.net/gml"
                        version="1.2.0"
                        service="WMS">
                    <StyledLayerDescriptor version="1.0.0">
                    <NamedLayer>
                     <Name>myNs:roads</Name>
                     <NamedStyle>
                      <Name>simple_roads</Name>
                     </NamedStyle>
                    </NamedLayer>
                    </StyledLayerDescriptor>
                    <Output>
                     <Format>image/png</Format>
                     <Size>
                     <Width>600</Width>
                     <Height>320</Height>
                     </Size>
                    </Output>
                    <Exceptions>application/vnd.ogc.se+xml</Exceptions>

</ogc:GetMap>
                 ';
  // We send XML via CURL using POST with a http header of text/xml.
  $ch = curl_init('http://localhost:8080/GeoServer/wms');
  curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_builder);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $ch_result = curl_exec($ch);
  curl_close($ch);
  // Print CURL result.
  echo $ch_result;
?>

Очевидно, вам нужно будет изменить XML, чтобы он соответствовал тому слою, который вам нужен. Вам также нужно будет изменить URL-адрес в curl_init на свой сервер, если он не находится на локальном хосте с точки зрения сервера.

Если все работает, нужно напечатать много странного текста, поскольку это возвращаемое изображение. Иногда вы можете увидеть PNG в тексте вверху, поскольку он является частью заголовка png.

person Darkcylde    schedule 09.08.2013