Имя геометрии OpenLayers не поддерживается при загрузке из WFS - PullRequest
1 голос
/ 18 октября 2019

Я использую OpenLayers 6 и GeoServer 2.16 (плюс PostGIS);и когда я загружаю слои из GeoServer, объект загружается, но имя его геометрии перезаписывается. В GeoServer имя геометрии (и столбец в PostGIS) равно geom. Возвращенный XML отражает это. Но тогда объект OpenLayers имеет имя геометрии geometry, игнорируя имя геометрии, которое вернул GeoServer.

Это кажется тривиальным, но вызывает проблемы, так как при переходе к редактированию объекта я получаю ошибку с org.geoserver.wfs.WFSException: No such property: geometry;поэтому, хотя я могу редактировать имя геометрии и соответствующее значение в своем коде, это похоже на неудачный взлом.

Это ошибка или какая-то настройка, которую я просто не могу найти в документации?

Любая помощь будет принята с благодарностью! (Я не видел ни одного вопроса, отражающего эту ошибку (в моем случае получение WFS, похоже, все вопросы касаются обратной отправки.) Если я повторяюсь, пожалуйста, дайте мне знать.)

1 Ответ

0 голосов
/ 20 октября 2019

Я не знаю, это ошибка или нет. Но это действительно раздражает. К сожалению, в OpenLayers нет обновленного документа о функциях редактирования.

Есть решение, позволяющее решить эту проблему:

  1. Изменение имени поля PostGIS. Вы можете переименовать поле PostGIS или установить имя поля геометрии на geometry при импорте в PostGIS.

  2. Кроме того, вы можете изменить запрос на редактирование в OpenLayers вручную. Распространенным способом редактирования функций является отправка запроса XML или POST в GeoServer. Поэтому перед отправкой просто замените geometry на geom! Примерно так:

var node = wfs.writeTransaction(null, [feature], null, gml);
var s = new XMLSerializer();
var str = s.serializeToString(node);
str = str.replace("geometry", "geom");
xhr.open('POST', 'http://localhost:8080/geoserver/wfs', true);
xhr.send(str);
...