nextgis / nextgis.com-webgis

Public issues for online Web GIS service from nextgis.com. Leave your feedback, problems and suggestions here.
http://nextgis.com
0 stars 1 forks source link

Can't add features with WFS, created with Nextgis Connect #3

Closed simgislab closed 8 years ago

simgislab commented 8 years ago

From @trolleway on May 28, 2016 17:12

Создал слой в инстансе. Подключился к инстансу в Nextgis Connect. Создал в нём WFS, добавил в QGIS. Точки двигаются, сохраняются - всё ок. При добавлении - QGIS сообщает: image

Проверил по такому же порядку на practice2 с тем же слоем - точки создаются

Copied from original issue: nextgis/nextgis.com#36

simgislab commented 8 years ago

From @KolesovDmitry on May 28, 2016 17:54

На стороне WFS эта ошибка выбрасывается в этом месте: https://github.com/nextgis/nextgisweb/blob/3/nextgisweb/wfsserver/nextgis_to_fs.py#L231

simgislab commented 8 years ago

Я повторил только что с полигональным слоем - все работает, объекты добавляются. А с точками - не работает.

simgislab commented 8 years ago

From @KolesovDmitry on May 29, 2016 8:0

Эта же ошибка возникает в NGW при попытке импорта точечного слоя и создания в нем новой точки. Похоже, там проблема связана с тем, что QGIS создает мультигеометрии, а в БД данные хранятся как простые геометрии:

DataError: (DataError) Geometry type (MultiPoint) does not match column type (Point)

Происходит это тут: https://github.com/nextgis/nextgisweb/blob/3/nextgisweb/wfsserver/nextgis_to_fs.py#L226 при попытке залить новый объект в базу: https://github.com/nextgis/nextgisweb/blob/3/nextgisweb/vector_layer/model.py#L384

@dezhin, @drnextgis, не подскажите, какая у нас политика работы с мультигеометриями?

simgislab commented 8 years ago

From @drnextgis on May 29, 2016 8:35

Похоже ошибка на нашей стороне. DescribeFeatureType возвращает неправильный тип геометрии слоя, пример (по факту тип слоя - Point, а не MultiPoint):

<complexContent>
<extension base="gml:AbstractFeatureType">
<sequence>
<element minOccurs="0" name="is_demolition" type="string"/>
<element minOccurs="0" name="addr_full" type="string"/>
<element minOccurs="0" name="demolotion_since" type="string"/>
<element minOccurs="0" name="resettlement_from" type="string"/>
<element minOccurs="0" name="demolotion_to" type="string"/>
<element minOccurs="0" name="resettlement_to" type="string"/>
<element minOccurs="0" name="geom" type="gml:MultiPointPropertyType"/>
</sequence>
</extension>
</complexContent>
simgislab commented 8 years ago

From @KolesovDmitry on May 29, 2016 14:2

Ошибка есть и она на нашей стороне, но вопрос немного о другом.

Какое-то время назад у нас все геометрии принудительно приводились к мультигеометриям для хранения в базе. Помнится, я даже специально менял кусок с определением типа слоя: https://github.com/nextgis/nextgisweb/commit/a5a3473178e294825cd391671b7e97688057de4e Похоже, что теперь преобразований в мультигеометрии нет.

Поэтому вопрос о политике работы с мультигеометриями не праздный и от него зависит, как править эту ошибку. Правильно ли я понял, что теперь мы храним, как мультигеометрии, так и простые? Если создается пустой слой, он будет мульти- или просто-геометрия?

simgislab commented 8 years ago

From @BishopGIS on May 29, 2016 14:4

Да, в 3 ветке поддерживаются мульти и не мульти. Можешь приведение типов убирать. А вот во 2-й все по старому.

simgislab commented 8 years ago

From @KolesovDmitry on May 29, 2016 18:49

Изменил код, ошибка больше не должна появляться

drnextgis commented 8 years ago

Почему-то в DescribeFeatureType приходит полный список всевозможных геометрий, запрос, результат:

<complexType name="test_wfst_Type">
<complexContent>
<extension base="gml:AbstractFeatureType">
<sequence>
<element minOccurs="0" name="SCADA_ID" type="string"/>
<element minOccurs="0" name="NAME" type="string"/>
<element minOccurs="0" name="DESCRIPT" type="string"/>
<element minOccurs="0" name="LONG" type="double"/>
<element minOccurs="0" name="HEIGHT" type="double"/>
<element minOccurs="0" name="LAT" type="double"/>
<element minOccurs="0" name="geom" type="gml:PointPropertyType"/>
<element minOccurs="0" name="geom" type="gml:LineStringPropertyType"/>
<element minOccurs="0" name="geom" type="gml:PolygonPropertyType"/>
<element minOccurs="0" name="geom" type="gml:MultiPointPropertyType"/>
<element minOccurs="0" name="geom" type="gml:MultiLineStringPropertyType"/>
<element minOccurs="0" name="geom" type="gml:MultiPolygonPropertyType"/>
</sequence>
</extension>
</complexContent>
</complexType>
KolesovDmitry commented 8 years ago

@drnextgis На почту пришел комментарий, что новые объекты не создаются (в этой ветке почему-то не нашел его). С созданием объектов что-то непонятное. Я проверял на точечных, линейных и полигональных слоях, там данные создавались. Возможно, слой на практисе и мои слои чем-то отличаются или я как-то не так создаю данные. Типы слоев я сравню, а ты не мог бы отписаться по пунктам, как создаешь объекты (начиная с создания слоя)? С количеством геометрий нужно разбираться дальше, но то, что возвращается список всех возможных геометрий по идее не должно влиять на создание, если создаются именно те объекты, которые хранятся в слое.

drnextgis commented 8 years ago

Окончательно исправлено в https://github.com/nextgis/nextgisweb/commit/1aae8b71c4936a1954e2ab5c9af567480a014b1d Спасибо @KolesovDmitry, что нашёл эту опечатку.