1

我正在使用 OpenLayers 6 和 GeoServer 2.16(加上 PostGIS);当我从 GeoServer 加载图层时,会加载特征,但会覆盖它们的几何名称。在 GeoServer 中,几何名称(和 PostGIS 中的列)是geom. 返回的 XML 反映了这一点。但是 OpenLayers 对象的几何名称为geometry,忽略 GeoServer 返回的几何名称。

这似乎微不足道,但会导致问题,例如当我去编辑功能时出现错误org.geoserver.wfs.WFSException: No such property: geometry;所以虽然我可以在我的代码中编辑几何名称和相应的值,但这似乎是一个糟糕的 hack。

这是我在文档中找不到的错误还是某些设置?

任何帮助将不胜感激!(我没有看到任何反映此错误的问题(获取 WFS 是我的情况,所有问题似乎都是关于 POSTing back)。如果我重复,请告诉我。)

4

2 回答 2

1

您可以通过要求 OpenLayers 从输入中读取几何列的名称来解决此问题。对于GeoJSON

source: new VectorSource({
    format: new GeoJSON({ extractGeometryName: true }),
    url: ...
}),
于 2021-03-10T18:59:04.387 回答
0

我不知道这是不是一个错误。但这真的很烦人。遗憾的是,在 OpenLayers 中,没有任何关于编辑功能的更新文档。

有一些解决方案可以解决这个问题:

  1. 更改 PostGIS 字段名称。geometry您可以在导入 PostGIS 时重命名 PostGIS 字段或将几何字段名称设置为。

  2. 此外,您可以手动更改 OpenLayers 中的编辑请求。编辑要素的常用方法是向 GeoServer 发送 XML 或 POST 请求。所以在发送之前只需替换geometrygeom!像这样的东西:

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);
于 2019-10-20T06:31:31.230 回答