Openlayers Wfs - проблема транзакции при удалении объектов, похоже, я что-то упускаю из свойства объекта, потому что в ответе говорится, что удалено - PullRequest
0 голосов
/ 03 мая 2020

Это мой код

var selectFeat = new ol.interaction.Select({
    condition: ol.events.condition.click,
    hitTolerance: 3,
  });
  map.addInteraction(selectFeat);
  // var selectedFeat = selectFeat.getFeatures();

  function deleteFeatures() {
    var selectedFeat = selectFeat.getFeatures();
    if (selectedFeat.getLength() > 0) {
      var toDeleteFeat = selectFeat.getFeatures().getArray()[0];
      // wfsSource.removeFeature(toDeleteFeat);
      // selectFeat.getFeatures().remove(toDeleteFeat);
      // selectFeat.getFeatures().on("change:length", function (e) {
      selectFeat.on("select", function (e) {
        transactWFS("delete", e.target.item(0));
      });
      wfsSource.removeFeature(toDeleteFeat);
      selectFeat.getFeatures().remove(toDeleteFeat);
    } else
      window.alert("Please select a layer first :" + selectedFeat.getLength());
  }
Document.getElementById("delete").addEventListener("click", function () {
        deleteFeatures();
})

транзакционная функция -

////////transact function //////////////
let transactWFS = function (p, f) {
    let WFSTSerializer = new ol.format.WFS();
    let formatGML = {
      featureNS: "Flori",
      featureType: ["floriii"],
      srsName: "urn:x-ogc:def:crs:EPSG:4326", //kshtu eshte formati i xml
      //outputFormat: "application/json",
      //format_options='callback:loadFeatures'
    };
    switch (p) {
      case "insert":
        node = WFSTSerializer.writeTransaction([f], null, null, formatGML);
        break;
      case "update":
        node = WFSTSerializer.writeTransaction(null, [f], null, formatGML);
        break;
      case "delete":
        node = WFSTSerializer.writeTransaction(null, null, [f], formatGML);
        break;
    }
    let serializer = new XMLSerializer(); 
    let featString = serializer.serializeToString(node);
    console.log(node);
    console.log(featString);
    let request = new XMLHttpRequest();
    request.open("POST", "http://localhost:8080/geoserver/ows");
    request.setRequestHeader("Content-Type", "text/xml");
    //console.log(request);
    request.send(featString);
  };

Openlayers WFS - транзакция проблема удаления объектов, похоже, я что-то упустил из свойства объекта, потому что ответ говорит о удалено.

1 Ответ

0 голосов
/ 05 мая 2020
**I figure out that the problem was at the request and actually didnt need an select event :**

function deleteFeatures() {
    var selectedFeat = selectFeat.getFeatures();
    if (selectedFeat.getLength() > 0) {
      var toDeleteFeat = selectFeat.getFeatures().getArray()[0];
      //wfsSource.clear();
      console.log(toDeleteFeat.geometryName);
      transactWFS("delete", toDeleteFeat);
    } else
      window.alert("Please select a layer first :" + selectedFeat.getLength());
  }

**And the request must be like this;**

$.ajax("http://localhost:8080/geoserver/Flori/ows?", {
      service: "WFS",
      type: "POST",
      dataType: "xml",
      processData: false,
      contentType: "text/xml",
      data: featString,
    }).done(function () {
      // wfsSource.refresh();
      wfsSource.clear();
    });
...