繁体   English   中英

从 WFS 加载时不保留 OpenLayers 几何名称

[英]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 中,没有任何关于编辑功能的更新文档。

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

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

  2. 此外,您可以手动更改 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM