【发布时间】:2016-09-12 01:32:37
【问题描述】:
我正在开发一个带有 Openlayers 3、Postgresql 和 Geoserver 2.8 的网络地图应用程序,我想进行 WFS-T 事务以进行绘图和更新,所以我按照以下步骤操作https://medium.com/@goldrydigital/wfs-t-with-openlayers-3-16-6fb6a820ac58 这是我的修改代码:
var dirty = {};
select.getFeatures().on('add', function(e) {
e.element.on('change', function(e) {
dirty[e.target.getId()] = true;
});
});
var clone;
select.getFeatures().on('remove', function(e) {
var f = e.element;
if (dirty[f.getId()]){
delete dirty[f.getId()];
featureProperties = f.getProperties();
delete featureProperties.boundedBy;
clone = new ol.Feature(featureProperties);
clone.setId(f.getId());
clone.setGeometryName("the_geom");
}
});
var node = formatwfs.writeTransaction(null, [clone], null, {
featureNS: "myNameSpace",
featureType: "myLayer"
});
$.ajax({
type: "POST",
url: "http://localhost:8080/geoserver/wfs",
data: new XMLSerializer().serializeToString(node),
contentType: 'text/xml',
success: function(data) {
alert((new XMLSerializer()).serializeToString(data));
},
error: function(e) {
var errorMsg = e? (e.status + ' ' + e.statusText) : "";
alert('Error saving this feature to GeoServer.<br><br>'
+ errorMsg);
},
context: this
});
绘图部分工作正常,但更新时出现错误:
<ows:ExceptionText>No such property: geometry</ows:ExceptionText>
我的表和图层中的几何列是“the_geom”,所以我使用 setGeometryName("the_geom") 在我的代码上仔细检查它,但是当我进行 AJAX 调用时,我得到了上面的错误。
我想到的第一件事是将我的postgresql表中的几何列名称更改为几何并在geoserver中重新发布该层,但我想先知道是否有任何不那么听话的解决方案,提前谢谢
将 postgresql 中的几何列名称更改为“几何”后,我现在又遇到另一个错误:
<ows:ExceptionText>java.lang.NullPointerException</ows:ExceptionText>
【问题讨论】:
-
感谢您使用我的 WFS-T 示例。我已经更新了 OL 3.16 的帖子。还有带有完整工作示例的 jsFiddle。 jsfiddle.net/goldrydigital/13Lwsfmf
-
@DennisBauszus 感谢您提供有用的教程,干得好,很多人都在使用您的代码示例
-
@DennisBauszus 链接坏了你能更新吗?
-
我的 jsfiddle 上发生了一些奇怪的事情。似乎原来的链接已经死了,但已经成倍增加了两个不同的小提琴。你可以试试jsfiddle.net/goldrydigital/x3j1pkq7或jsfiddle.net/goldrydigital/h7mk0jpt
标签: ajax postgresql openlayers-3 geoserver