Как вставить атрибуты в 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;