【发布时间】:2016-01-13 14:02:18
【问题描述】:
我正在使用以下代码在 openlayers 3 上尝试 wfs-t:
var formatWFS = new ol.format.WFS();
var formatGML = new ol.format.GML({
featureNS: 'http://argeomatica.com',
featureType: 'playa_sample',
srsName: 'EPSG:3857'
});
var transactWFS = function(p,f) {
switch(p) {
case 'insert':
node = formatWFS.writeTransaction([f],null,null,formatGML);
break;
case 'update':
node = formatWFS.writeTransaction(null,[f],null,formatGML);
break;
case 'delete':
node = formatWFS.writeTransaction(null,null,[f],formatGML);
break;
}
s = new XMLSerializer();
str = s.serializeToString(node);
$.ajax('https://gsx.geolytix.net/geoserver/geolytix_wfs',{
type: 'POST',
dataType: 'xml',
processData: false,
contentType: 'text/xml',
data: str
}).done();
}
但是,当我运行更新事务(ajax 调用)时,它会将几何列作为“几何”发送。我需要将其更改为大写“GEOM”:
...
<Property>
<Name>geometry</Name>
...
应该是: ...
<Property>
<Name>GEOM</Name>
...
我尝试使用我找到的隐藏属性 (geometryName_) 设置该功能:
f.geometryName_ = "GEOM";
但这不起作用。任何更改功能以将“GEOM”传递给 ajax 调用的帮助将不胜感激。谢谢
更新 #1
按照 Bart 的建议,我添加了 setGeometryName:
case 'update':
f.setGeometryName("GEOM");
node = formatWFS.writeTransaction(null,[f],null,formatGML);
break;
但这会导致 openlayers 3 js 在以下位置出错:
ol.interaction.Modify.prototype.addFeature_
..
if (geometry.getType() in this.SEGMENT_WRITERS) <-- errors out here
错误:无法获取属性 getType 对象为空
【问题讨论】:
-
您需要在该功能上使用 setGeometryName。这将由格式提取。
-
巴特,尝试了你的建议,但没有奏效。请参阅上面的更新 #1。
-
您需要确保在您的特征值中,几何图形位于该键下。设置名称后 feature.getGeometry() 会产生什么?
-
巴特,openlayers 3.12.0 不允许使用 setGeometryName。设置后,openlayers 崩溃并出现上述错误。如果我不调用 setGeometryName,getGeometry 会返回要素的几何形状。
-
您的要素是如何创建的,为什么它们从一开始就没有正确的几何名称?
标签: gis openlayers-3 geoserver