Страница 1 из 1

Как в OL3 выполнить запрос GetFeature версий WFS 2.0.0 ?

Добавлено: 22 июл 2016, 15:03
Tink
Перевожу свою карту с Openlayers 2.12 на OL3, столкнулся с проблемой:

Как получить информацию об объекте слоя WMS в разных версиях WFS 1.0.0 / 1.1.0 / 2.0.0 ?

Что информация получается WFS запросом методом GetFeature, это понятно.
Непонятно именно как задавать версии WFS. Ведь в зависимости от неё задается версия GML - т.е. несколько меняются параметры запроса и запись ответа.

В документации сказано, что по умолчанию используется версия WFS 1.1.0, и есть некий параметр gmlFormat (пока эксперементальный) который позволяет прочитать ответ WFS версии отличной от дефолтной.

Видел я и пример WFS - GetFeature предположу, что такая запись для 1.1.0 должна быть эквивалентной:

Код: Выделить всё

var f = ol.format.ogc.filter;
var wfs = new ol.format.WFS({ gmlFormat: ol.format.GML3 });
wfs.writeGetFeature({
    srsName: 'EPSG:3857',
    featureNS: 'http://openstreemap.org',
    featurePrefix: 'osm',
    featureTypes: ['water_areas'],
    filter: f.and(
      f.like('name', 'Mississippi*'),
      f.equalTo('waterway', 'riverbank')
    )
});
Какая тогда будет запись для WFS версий 1.0.0 и 2.0.0 ?
Что бы я не подставлял вместо ol.format.GML3 все равно получаю на выходе WFS версии 1.1.0

PS
кстати, можно ли обойтись без featureTypes?

Re: Как в OL3 выполнить запрос GetFeature версий WFS 2.0.0 ?

Добавлено: 22 июл 2016, 17:19
Denis Rykov
Ошибка как минимум в том, что ol.format.GML3 - это конструктор, то есть должно быть new ol.format.GML3(). Никакой зависимости в writeGetFeature от формата не вижу: https://github.com/openlayers/ol3/blob/ ... at.js#L781

Re: Как в OL3 выполнить запрос GetFeature версий WFS 2.0.0 ?

Добавлено: 22 июл 2016, 17:56
Tink
Другими словами, в текущей версии OL v3.17.1 поддерживается только одна версия WFS - 1.1.0 ?

Re: Как в OL3 выполнить запрос GetFeature версий WFS 2.0.0 ?

Добавлено: 22 июл 2016, 18:01
Denis Rykov
Парсить ответ я так понимаю вы можете и в GML2 (WFS 1.0.0), а вот конструировать запрос - не уверен. Сейчас напишу им в треккер, тоже интересно стало.

Re: Как в OL3 выполнить запрос GetFeature версий WFS 2.0.0 ?

Добавлено: 22 июл 2016, 18:16
Denis Rykov
А если просто написать http://openlayers.org/en/latest/apidoc/ ... GetFeature тут значение outputFormat: 'GML2' - этого будет не достаточно?

Re: Как в OL3 выполнить запрос GetFeature версий WFS 2.0.0 ?

Добавлено: 25 июл 2016, 09:23
Tink
Хм, нет этот параметр задает представления ответа сервера, например "application/json".

Пример генерируемой XML (дефолтовая версия - 1.1.0):

Код: Выделить всё

<GetFeature xmlns="http://www.opengis.net/wfs" service="WFS" version="1.1.0" outputFormat="application/json" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
    <Query typeName="osm:water_areas" srsName="EPSG:3857" xmlns:osm="http://openstreemap.org">
        <Filter xmlns="http://www.opengis.net/ogc">
            <And>
                <PropertyIsLike wildCard="*" singleChar="." escapeChar="!">
                    <PropertyName>name</PropertyName>
                    <Literal>Mississippi*</Literal>
                </PropertyIsLike>
                <PropertyIsEqualTo>
                    <PropertyName>waterway</PropertyName>
                    <Literal>riverbank</Literal>
                </PropertyIsEqualTo>
            </And>
        </Filter>
    </Query>
</GetFeature>

Re: Как в OL3 выполнить запрос GetFeature версий WFS 2.0.0 ?

Добавлено: 25 июл 2016, 09:37
Denis Rykov
Я понимаю, а что именно не так? Вы запрашиваете данные в нужном вам формате, для чего именно вам нужно правильно передавать версию WFS, в текущем варианте что-то работает неправильно?

Re: Как в OL3 выполнить запрос GetFeature версий WFS 2.0.0 ?

Добавлено: 25 июл 2016, 10:21
Tink
Есть веб-сервера поддерживающие только WFS 2.0.0 как последнюю актуальную версию протокола, и с более младшими просто не работают.

В OpenLayers 2 можно было написать свой класс, что мы и делали.
В OL3 свои классы можно писать только имея не сжатые исходники, и затем из обфусцировать.
Влазить в библиотеку не очень хочется.

Можно генерировать XML для выполнения запроса и вручную, но хотелось бы использовать все таки один подход.