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

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Tink
Участник
Сообщения: 50
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 4

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

Сообщение Tink » 22 июл 2016, 15:03

Перевожу свою карту с 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?

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 22 июл 2016, 17:19

Ошибка как минимум в том, что ol.format.GML3 - это конструктор, то есть должно быть new ol.format.GML3(). Никакой зависимости в writeGetFeature от формата не вижу: https://github.com/openlayers/ol3/blob/ ... at.js#L781
Spatial is now, more than ever, just another column- The Geometry Column.

Tink
Участник
Сообщения: 50
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 4

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

Сообщение Tink » 22 июл 2016, 17:56

Другими словами, в текущей версии OL v3.17.1 поддерживается только одна версия WFS - 1.1.0 ?

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 22 июл 2016, 18:01

Парсить ответ я так понимаю вы можете и в GML2 (WFS 1.0.0), а вот конструировать запрос - не уверен. Сейчас напишу им в треккер, тоже интересно стало.
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 22 июл 2016, 18:16

А если просто написать http://openlayers.org/en/latest/apidoc/ ... GetFeature тут значение outputFormat: 'GML2' - этого будет не достаточно?
Spatial is now, more than ever, just another column- The Geometry Column.

Tink
Участник
Сообщения: 50
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 4

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

Сообщение Tink » 25 июл 2016, 09:23

Хм, нет этот параметр задает представления ответа сервера, например "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>

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 25 июл 2016, 09:37

Я понимаю, а что именно не так? Вы запрашиваете данные в нужном вам формате, для чего именно вам нужно правильно передавать версию WFS, в текущем варианте что-то работает неправильно?
Spatial is now, more than ever, just another column- The Geometry Column.

Tink
Участник
Сообщения: 50
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 4

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

Сообщение Tink » 25 июл 2016, 10:21

Есть веб-сервера поддерживающие только WFS 2.0.0 как последнюю актуальную версию протокола, и с более младшими просто не работают.

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

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

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 24 гостя