Openlayers 3 - wfs-t:更改几何字段的名称

Rob*_*ith 3 gis geoserver openlayers-3

我正在使用以下代码在 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();
  }
Run Code Online (Sandbox Code Playgroud)

但是,当我运行更新事务(ajax 调用)时,它将几何列作为“几何”发送。我需要将其更改为大写“GEOM”:

...

<Property>
<Name>geometry</Name>
Run Code Online (Sandbox Code Playgroud)

...

应该: ...

<Property>
<Name>GEOM</Name>
Run Code Online (Sandbox Code Playgroud)

...

我尝试使用我发现的隐藏属性(geometryName_)设置该功能:

f.geometryName_ = "GEOM";

但这是行不通的。任何更改功能以将“GEOM”传递给 ajax 调用的帮助将不胜感激。谢谢

更新#1

根据 Bart 的建议,我添加了 setGeometryName:

case 'update':
    f.setGeometryName("GEOM");
    node = formatWFS.writeTransaction(null,[f],null,formatGML);
    break;
Run Code Online (Sandbox Code Playgroud)

但这会导致 openlayers 3 js 出错:

ol.interaction.Modify.prototype.addFeature_
..
if (geometry.getType() in this.SEGMENT_WRITERS) <-- errors out here
Run Code Online (Sandbox Code Playgroud)

错误:无法获取属性 getType 对象为 null

Met*_*ani 5

我假设您使用 ol.transaction.Draw 绘制一个特征,如果在这种情况下您需要在geometryName:'the_geom'调用“drawend”事件之前在绘制交互对象中设置几何名称

var interaction = new ol.interaction.Draw({
  type: 'MultiPolygon',
  source: Source,
  geometryName:'the_geom'
});
Run Code Online (Sandbox Code Playgroud)

如果您在绘制完成后设置几何名称(使用错误feature.setGeometryName()),openlayers 将向服务器发送一个空对象。