как подключить WFS в Leaflet

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
gornak
Активный участник
Сообщения: 146
Зарегистрирован: 30 авг 2015, 16:38
Репутация: 25
Контактная информация:

Re: как подключить WFS в Leaflet

Сообщение gornak » 20 сен 2016, 15:10

Denis Rykov писал(а):Насчёт namespace, он есть, так что код можно было для этого не трогать
да могу подтвердить,тоже дошел до этого методом тыка
-моя вина отсутствие знаний и понимания собственно стандартов ogc
Denis Rykov писал(а): QGIS и прочие плагины к нему никакого отношения не имеют
но RestClient- это же браузер? (обещаю буду учить "матчасть")
kuzkok писал(а): ещё в нескольких местах есть жёстко забитые строки под стандарт 1.1.0
попробую их найти)), а как по вашему мнению(навскидку), если проблема в этом, то можно ли их подогнать под версии с которыми работает nextgis.com, и насколько это трудозатратно?

kuzkok
Интересующийся
Сообщения: 34
Зарегистрирован: 21 янв 2011, 08:31
Репутация: 7
Откуда: Пермь

Re: как подключить WFS в Leaflet

Сообщение kuzkok » 20 сен 2016, 15:14

С 1.0 тоже не работает. Тестировался он на ответах с геосервера, так что возможно некоторые пункты стандарта не учтены.
Можно всё-таки попробовать поменять значения namespace и поменять в L.GML.FeatureType.parse строку
feature.attributes['gml:id'].value на feature.attributes['fid'].value

ЗЫ: что-то я не смог добиться от сервера nextgis ответа для версии 1.0

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

<wfs:GetFeature 
 xmlns:wfs="http://www.opengis.net/wfs"
 service="WFS"
 outputFormat="text/xml; subtype=gml/3.1.1"
 version="1.0.0">
 <wfs:Query typeName="fs:kvly" srsName="EPSG:3857"/>
</wfs:GetFeature>

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

<wfs:FeatureCollection
        timeStamp="2016-09-20T12:08:46.216526"
        numberMatched="unknown"
        numberReturned="10"
        xmlns:fs="http://featureserver.org/fs"
        xmlns:wfs="http://www.opengis.net/wfs/2.0"
        xmlns:gml="http://www.opengis.net/gml/3.2"
        xmlns:xlink="http://www.w3.org/1999/xlink"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.opengis.net/wfs/2.0
                http://schemas.opengis.net/wfs/2.0.0/wfs.xsd
                http://www.opengis.net/gml/3.2
                http://schemas.opengis.net/gml/3.2.1/gml.xsd">
    <gml:featureMember gml:id="1">
        <fs:kvly fid="1">
ответ от геосервера на подобный запрос

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

<wfs:FeatureCollection
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:nasa="http://nasa.gov"
  xmlns:ogc="http://www.opengis.net/ogc"
  xmlns:maps="http://boundlessgeo.com"
  xmlns:topp="http://www.openplans.org/topp"
  xmlns:wfs="http://www.opengis.net/wfs" 
  xmlns:ows="http://www.opengis.net/ows" 
  xmlns:gml="http://www.opengis.net/gml"
 
или сервер nextgis всегда кодирует ответ в gml 3.2?

gornak
Активный участник
Сообщения: 146
Зарегистрирован: 30 авг 2015, 16:38
Репутация: 25
Контактная информация:

Re: как подключить WFS в Leaflet

Сообщение gornak » 20 сен 2016, 15:50

kuzkok писал(а):попробовать поменять значения namespace
то есть

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

typeNS: 'fs'
поменять на что ?

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

Re: как подключить WFS в Leaflet

Сообщение Denis Rykov » 20 сен 2016, 15:51

Ну у вас же пустая строка была до этого, я предложил поменять на 'fs'.
Spatial is now, more than ever, just another column- The Geometry Column.

kuzkok
Интересующийся
Сообщения: 34
Зарегистрирован: 21 янв 2011, 08:31
Репутация: 7
Откуда: Пермь

Re: как подключить WFS в Leaflet

Сообщение kuzkok » 20 сен 2016, 15:54

gornak писал(а): поменять на что ?
я про namespace из этого сообщения, попробовать поменять на то что зачеркнуто

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

Re: как подключить WFS в Leaflet

Сообщение Denis Rykov » 20 сен 2016, 15:58

Вот на такой запрос ответ приходит в формате GML2:

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

<wfs:GetFeature 
 xmlns:wfs="http://www.opengis.net/wfs"
 service="WFS"
 outputFormat="GML2"
 version="1.0.0">
 <wfs:Query typeName="fs:kvly" srsName="EPSG:3857"/>
</wfs:GetFeature>
Spatial is now, more than ever, just another column- The Geometry Column.

gornak
Активный участник
Сообщения: 146
Зарегистрирован: 30 авг 2015, 16:38
Репутация: 25
Контактная информация:

Re: как подключить WFS в Leaflet

Сообщение gornak » 20 сен 2016, 16:03

Denis Rykov писал(а):Ну у вас же пустая строка была до этого, я предложил поменять на 'fs'.
это уже относительно давно сделано, только бессознательно
kuzkok писал(а):я про namespace из этого сообщения, попробовать поменять на то что зачеркнуто
да , "догнал" )), сделал и в 696 строке заменил на

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

id: feature.attributes['fid'].value
пока результат тот же- отрисовки нет

kuzkok
Интересующийся
Сообщения: 34
Зарегистрирован: 21 янв 2011, 08:31
Репутация: 7
Откуда: Пермь

Re: как подключить WFS в Leaflet

Сообщение kuzkok » 20 сен 2016, 16:26

Исправил namespace и gml:id=>fid
Вложения
kvly.png
kvly.png (548.56 КБ) 7147 просмотров

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

Re: как подключить WFS в Leaflet

Сообщение Denis Rykov » 20 сен 2016, 17:00

Спасибо, а в реп добавите исправления или это хардкод?
Spatial is now, more than ever, just another column- The Geometry Column.

gornak
Активный участник
Сообщения: 146
Зарегистрирован: 30 авг 2015, 16:38
Репутация: 25
Контактная информация:

Re: как подключить WFS в Leaflet

Сообщение gornak » 20 сен 2016, 17:01

kuzkok писал(а):Исправил namespace и gml:id=>fid
да, верно
проблема была в crs: L.CRS.EPSG3857
а надо crs: L.CRS.EPSG4326
не до конца разобрался с этим параметром, я думал, что это crs загружаемого wfs слоя, оказывается не так?
Потестирую плагин с сервером еще.Спасибо большое.Думаю для всех будет польза.

kuzkok
Интересующийся
Сообщения: 34
Зарегистрирован: 21 янв 2011, 08:31
Репутация: 7
Откуда: Пермь

Re: как подключить WFS в Leaflet

Сообщение kuzkok » 20 сен 2016, 17:42

Denis Rykov писал(а):Спасибо, а в реп добавите исправления или это хардкод?
Пока хардкод для решения проблемы @gornak. Исправления для работы с WFS 2.0 в плагине будут когда-нибудь позже, хочется чего-нибудь универсального для всех версий, или хотя бы для 1.1 и 2.0, они вроде не сильно друг от друга ушли в синтаксисе.

kuzkok
Интересующийся
Сообщения: 34
Зарегистрирован: 21 янв 2011, 08:31
Репутация: 7
Откуда: Пермь

Re: как подключить WFS в Leaflet

Сообщение kuzkok » 20 сен 2016, 19:04

У меня ещё некоторое подозрение насчет атрибута fid. В стандарте WFS 2.0.0 говориться только про gml:id.
А в featureMember, по стандарту GML 3.2, его быть не должно.
Вот описания типов:

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

<element name="featureMember" type="gml:FeaturePropertyType"/>

<complexType name="FeaturePropertyType">
<sequence minOccurs="0">
  <element ref="gml:AbstractFeature"/>
</sequence>
<attributeGroup ref="gml:OwnershipAttributeGroup"/>
<attributeGroup ref="gml:AssociationAttributeGroup"/>
</complexType>

При запросе сервер должен возвращать следующее:

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

 <gml:featureMember>
        <fs:kvly gml:id="1">
            <fs:geom>
                ...
            </fs:geom>
            <fs:nkvtxt>1</fs:nkvtxt>
            <fs:ar>56</fs:ar>
            <fs:lesni4estv>Лужниковское</fs:lesni4estv>
            <fs:name>Академическое</fs:name>
        </fs:kvly>
    </gml:featureMember>
    <gml:featureMember>
        <fs:kvly gml:id="2">
            <fs:geom>
                ...
            </fs:geom>
            <fs:nkvtxt>1</fs:nkvtxt>
            <fs:ar>56</fs:ar>
            <fs:lesni4estv>Дятловское</fs:lesni4estv>
            <fs:name>Белавинское</fs:name>
        </fs:kvly>
    </gml:featureMember>

Ответить

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

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

Сейчас этот форум просматривают: Ahrefs [Bot] и 4 гостя