[英]OpenLayers geometry name is not maintained when loading from WFS
我正在使用 OpenLayers 6 和 GeoServer 2.16(加上 PostGIS); 当我从 GeoServer 加载图层时,会加载特征,但会覆盖它们的几何名称。 在 GeoServer 中,几何名称(和 PostGIS 中的列)是geom
。 返回的 XML 反映了这一点。 但是 OpenLayers object 然后有一个几何名称geometry
,忽略 GeoServer 返回的几何名称。
这似乎微不足道,但会导致问题,因为当我 go 编辑功能时,我收到org.geoserver.wfs.WFSException: No such property: geometry
; 所以虽然我可以在我的代码中编辑几何名称和相应的值,但这似乎是一个糟糕的 hack。
这是我在文档中找不到的错误还是某些设置?
任何帮助将不胜感激,(我没有看到任何反映此错误的问题(获取 WFS 是我的情况。所有问题似乎都是关于 POSTing back)。如果我重复,请告诉我。)
我不知道这是不是一个错误。 但这真的很烦人。 遗憾的是,在 OpenLayers 中,没有任何关于编辑功能的更新文档。
有一些解决方案可以解决这个问题:
更改 PostGIS 字段名称。 导入 PostGIS 时,可以重命名 PostGIS 字段或将几何字段名称设置为geometry
。
此外,您可以手动更改 OpenLayers 中的编辑请求。 编辑要素的常用方法是向 GeoServer 发送 XML 或 POST 请求。 因此,在发送之前只需将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);
您可以通过要求 OpenLayers 从输入中读取几何列的名称来解决此问题。 对于GeoJSON :
source: new VectorSource({
format: new GeoJSON({ extractGeometryName: true }),
url: ...
}),
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.