Итак, у меня есть веб-приложение, которое работает и может добавлять точки и строки в существующие таблицы Postgis, получая данные от Geoserver. Мне нужен следующий конкретный бит функциональности:Как вставить атрибуты в WFS с помощью OpenLayers?
Я хочу, чтобы пользователи также могли добавлять информацию об атрибутах в каждую точку интерфейса карты. Как и в каждой точке, которую они рисуют на карте, должно быть что-то, что позволяет пользователю также вводить некоторые текстовые данные в столбец.
Я пробовал читать несколько вопросов здесь, но ни один из них не обеспечил решение для точечного векторного слоя.
Как это сделать?
бит я для загрузки и размещая точечные WFS является:
var vectorSource2 = new ol.source.Vector({
loader: function(extent, resolution, projection) {
var url2 = 'http://localhost:8080/geoserver/wfs?service=WFS&' +
'version=1.1.0&request=GetFeature&typename=BFTchambers:chamber2&' +
'outputFormat=text/javascript&format_options=callback:loadFeatures2' +
'&bbox=' + extent.join(',');
$.ajax({url: url2, dataType: 'jsonp', jsonp: false})
.done(function(response) {
pointWFS = new ol.format.WFS(),
sourceVector2.addFeatures(pointWFS.readFeatures(response))
});
},
strategy: ol.loadingstrategy.tile(ol.tilegrid.createXYZ({
maxZoom: 20
})),
});
window.loadFeatures2 = function(response) {
console.log("Point features were drawn");
vectorSource2.addFeatures(geojsonFormat.readFeatures(response));
};
var formatWFS2 = new ol.format.WFS();
var pointGML = new ol.format.GML({
featureNS: 'http://geoserver.org/bftchamber',
featureType: 'chamber2',
});
var pointWFS = function(p,f) {
switch(p) {
case 'insert':
node = formatWFS2.writeTransaction([f],null,null,pointGML);
break;
case 'update':
node = formatWFS2.writeTransaction(null,[f],null,pointGML);
break;
case 'delete':
node = formatWFS2.writeTransaction(null,null,[f],pointGML);
break;
}
s = new XMLSerializer();
str = s.serializeToString(node);
$.ajax('http://localhost:8080/geoserver/wfs',{
type: 'POST',
dataType: 'xml',
processData: false,
contentType: 'text/xml',
data: str
}).done();
console.log(" point features were posted to server");
}
case 'btnDrawPoint':
interaction = new ol.interaction.Draw({
type: 'Point',
source: layerVector.getSource()
});
map.addInteraction(interaction);
interaction.on('drawend', function(e) {
pointWFS('insert',e.feature);
});
break;
Просто позвоните f.set ('foo', 'bar'), где «bar» - это вход от вашего пользователя, прежде чем передать его в writeTransaction – bartvde
@bartvde can пожалуйста, уточните это? Я новичок с openlayers и Javascript – Luffydude