Как вставить атрибуты в WFS, используя OpenLayers 3?

Итак, у меня есть веб-приложение, которое работает и может добавить полигон к существующим таблицам Postgis, получая данные из Geoserver. Мне нужна следующая особая функциональность:

Я хочу, чтобы пользователи также могли добавлять информацию об атрибутах для каждого многоугольника в интерфейсе карты. Так как в каждом полигоне, который они рисуют на карте, должно быть что-то, что позволяет пользователю также вводить некоторые текстовые данные в столбец.

Я попытался прочитать здесь несколько вопросов, но ни один из них не содержит более одного столбца для добавления информации об атрибутах. У меня есть три столбца для пользователя добавить атрибуты информации (имя, город, район).

Как это сделать?

У меня есть бит для загрузки и публикации функций полигона WFS:

    var vectorSource = new ol.source.Vector({
    loader: function (extent, resolution, projection) {
      var url = "http://localhost:8070/geoserver/geom_wfs/ows?service=WFS"+ "&version=1.1.0&request=GetFeature"+ '&outputFormat=text/javascript'+ "&typeName=geom_wfs:field"+ "&format_options=callback:loadFeatures"+'&srsname=EPSG:3857';
       // use jsonp: false to prevent jQuery from adding the "callback"
      $.ajax({url: url, dataType: 'jsonp', jsonp: false});
     }
    });


    /**
    * JSONP WFS callback function.
    * @param {Object} response The response object.
    */
    window.loadFeatures = function (response) {
        vectorSource.addFeatures(new     ol.format.GeoJSON().readFeatures(response));
        };

    var vectorSource2= new ol.layer.Vector({
        source: vectorSource
    });    
        
    var formatWFS2 = new ol.format.WFS();
    var formatGML = new ol.format.GML({
      featureNS: 'http://geoserver.org/geom_wfs',
      featureType: 'field'
    });

    var polyWFS = function(p,f) {
    switch(p) {
    case 'insert':
        node = formatWFS2.writeTransaction([f],null,null,formatGML);
        break;
    case 'update':
        node = formatWFS2.writeTransaction(null,[f],null,formatGML);
        break;
    case 'delete':
        node = formatWFS2.writeTransaction(null,null,[f],formatGML);
        break;
    }
    s = new XMLSerializer();
    str = s.serializeToString(node);
    $.ajax('http://localhost:8070/geoserver/wfs',{
        type: 'POST',
        dataType: 'xml',
        processData: false,
        contentType: 'text/xml',
        data: str
        }).done();
        console.log(" polygon features were posted to server");
    }
    case 'btnDrawPolygon':
        interaction = new ol.interaction.Draw({
            type: 'Polygon',
            source: layerVector.getSource()
        });
        map.addInteraction(interaction);
        interaction.on('drawend', function(e) {
          var myAttrValue = prompt("Enter length of area", "");
          var myFeature= e.feature;
          if (myAttrValue != null) {
            myFeature.set('area', myAttrValue);
          }
          polyWFS('insert',e.feature);
        });
        break;

0 ответов

Другие вопросы по тегам