无此类属性:在Openlayers 3中更新要素时的几何-Geoserver [英] No such property: geometry when updating feature in openlayers 3 - Geoserver

查看:318
本文介绍了无此类属性:在Openlayers 3中更新要素时的几何-Geoserver的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Openlayers 3,Postgresql和Geoserver 2.8开发一个Webmapping应用程序,我想进行WFS-T事务进行绘制和更新,所以我按照以下步骤进行操作

I am working on a webmapping app with Openlayers 3, Postgresql and Geoserver 2.8, I want to make a WFS-T transactions for drawing and updating so I followed this steps https://medium.com/@goldrydigital/wfs-t-with-openlayers-3-16-6fb6a820ac58 Here is my modification code :

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
        });

绘图部分工作正常,但在更新时出现错误:

the drawing part works fine but for the updating I get an error:

<ows:ExceptionText>No such property: geometry</ows:ExceptionText>

我的表和图层中的几何列是"the_geom",所以我使用setGeometryName("the_geom")在代码中再次检查了它,但是当我进行AJAX调用时,出现了上面的错误.

the geometry column in my table and layer is "the_geom" so I double check it on my code with setGeometryName("the_geom") but yet when I make the AJAX call I get the error above.

我想到的第一件事是将postgresql表中的geometry列名称更改为geometry并在geoserver中重新发布该图层,但是我想首先知道是否有较不听话的解决方案,在此先感谢

The first thing that came to my mind is to change the geometry column name in my postgresql table to geometry and republish the layer in geoserver, but I want to know first if there is any less obedient solution for this, thanks in advance

将postgresql中的几何列名称更改为"geometry"后,我现在遇到另一个错误:

After changing the geometry column name in postgresql to "geometry" I get now another error :

<ows:ExceptionText>java.lang.NullPointerException</ows:ExceptionText>

推荐答案

我将几何列名称更改为"geometry",然后出现了与Java空指针有关的错误,然后我发现生成的XML代码是错误,需要修改,因为它指向错误的typeName feature:myLayer ,而应该是 myNameSpace:myLayer ,为此,我要做的就是将其替换为Javascript:

I changed the geometry column name into "geometry" and after that the error relative to the Java null pointer came, then I found out that the XML code generated was wrong and needs to be modified for it refers to a wrong typeName feature:myLayer while it should be myNameSpace:myLayer for this one all I had to do was to replace it with Javascript :

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

这篇关于无此类属性:在Openlayers 3中更新要素时的几何-Geoserver的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆