【问题标题】:No such property: geometry when updating feature in openlayers 3 - Geoserver没有这样的属性:在 openlayers 3 中更新功能时的几何 - Geoserver
【发布时间】: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/x3j1pkq7jsfiddle.net/goldrydigital/h7mk0jpt

标签: ajax postgresql openlayers-3 geoserver


【解决方案1】:

我把geometry列名改成“geometry”,然后Java空指针相关的错误来了,然后我发现生成的XML代码是错误的,需要修改,因为它引用了错误的typeName feature:myLayer 虽然它应该是 myNameSpace:myLayer 对于这个我所要做的就是用 Javascript 替换它:

var str=new XMLSerializer().serializeToString(node);
var data=str.replace("feature:myLayer","myNameSpace:myLayer");

【讨论】:

    【解决方案2】:

    除了 Hicham Zouarhi 的解决方案,您还可以像这样更改几何类型:

    //Change feature name
    const find_feature = `feature:${layerName}`;
    const re_feature = new RegExp(find_feature, "g");
    
    //Change feature geometry column
    const find_geometry = `<Property><Name>geometry</Name>`;
    const re_geometry = new RegExp(find_geometry, "g");
    
    const payload = xs.serializeToString(formatWFS.writeTransaction(null, f, null, formatGML))
     .replace(re_feature, `Bugra:${layerName}`)
     .replace(re_geometry, `<Property><Name>${layerGeometryColumn}</Name>`);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      相关资源
      最近更新 更多