Friday, 8 January 2016

geoserver - WFS-T: changes not saved on an OpenLayers map


I have written a script allowing to display a few WMS and WFS layers and I want to make my 2 WFS layers editable.


I have all my controls and can draw / modify / drag / delete my features but, on one of my layers, the changes are not saved, despite the saveStrategy set to "auto: true".


I give my code here. The layer adresspt_wfs works fine, and the layer bygg_ovr_wfs can't save my new edits. If anyone has an idea?



var map;
var wmsurl = "http://localhost:8080/geoserver/wms";
var wfsurl = "http://localhost:8080/geoserver/wfs";
var projection = new OpenLayers.Projection("EPSG:900913");
var displayProjection = new OpenLayers.Projection("EPSG:4326");

function init() {
var bounds = new OpenLayers.Bounds(
1450000, 7490000, 1490000, 7510000);


var format = 'image/png';

var options = {
projection: projection,
displayProjection: displayProjection,
maxExtent: bounds,
units: 'm'
};

map = new OpenLayers.Map('map',options);


// All the base layers:

var osm = new OpenLayers.Layer.OSM('OpenStreetMap','',
{ zoomOffset: 11, resolutions: [76.4370282714844,38.2185141357422,19.1092570678711,9.55462853393555,4.77731426696777,2.38865713348389,1.19432856674194] });

var gphys = new OpenLayers.Layer.Google(
"Google Physical",
{'sphericalMercator': true, minZoomLevel: 11, maxZoomLevel: 17, type: G_PHYSICAL_MAP});


var gstr = new OpenLayers.Layer.Google(
"Google Streets",
{'sphericalMercator': true, minZoomLevel: 11, maxZoomLevel: 17});

var ghyb = new OpenLayers.Layer.Google(
"Google Hybrid",
{'sphericalMercator': true, minZoomLevel: 11, maxZoomLevel: 17, type: G_HYBRID_MAP});

var gsat = new OpenLayers.Layer.Google(
"Google Satellite",

{'sphericalMercator': true, minZoomLevel: 11, maxZoomLevel: 17, type: G_SATELLITE_MAP});

var dem = new OpenLayers.Layer.WMS(
"ASTER Gdem", wmsurl,
{ layers: 'ASTGTM2_N55E013_dem',
format: format,
srs:'EPSG:4326',
transparent:'false'
},
{isBaseLayer: true });


var nobase = new OpenLayers.Layer.WMS(
"No base map", wmsurl,
{ layers: 'luma_project:background',
srs: 'EPSG:4326',
transparent: 'true'
},
{isBaseLayer: true, maxExtent: bounds, maxResolution: 'auto'});

// All the non-base layers (WMS):


var transportation = new OpenLayers.Layer.WMS(
"Lund transportation network", wmsurl,
{ layers: 'lu_transportation',
format: format,
srs:'EPSG:4326',
transparent:'true',
zoomOffset: 11,
},
{isBaseLayer: false, visibility: true});


var adresspt = new OpenLayers.Layer.WMS(
"Adress points", wmsurl,
{ layers: 'adresspt',
format: format,
srs:'EPSG:4326',
transparent:'true',
zoomOffset: 11
},
{isBaseLayer: false, visibility: false});


var bygg_ovr = new OpenLayers.Layer.WMS(
"Buildings", wmsurl,
{ layers: 'bygg_ovr',
format: format,
srs:'EPSG:4326',
transparent:'true',
zoomOffset: 11
},
{isBaseLayer: false, visibility: false});


// All the non-base layers (WFS):

var styles = new OpenLayers.StyleMap({
"default": new OpenLayers.Style({
fillColor: '#ee9900'
}),
"select": new OpenLayers.Style({
fillColor: 'red'
})

});

var saveStrategy = new OpenLayers.Strategy.Save({auto:true});

var bygg_ovr_wfs = new OpenLayers.Layer.Vector("Buildings (edition)", {
stylemap: styles,
visibility: false,
strategies: [
new OpenLayers.Strategy.BBOX(),
saveStrategy

],
protocol: new OpenLayers.Protocol.WFS({
url: wfsurl,
featurePrefix:"luma_project",
featureType: "bygg_ovr",
featureNS: "http://localhost:8080/luma_project",
srsName: "EPSG:900913",
geometryName: "the_geom",
version: "1.1.0"
})

});

var adresspt_wfs = new OpenLayers.Layer.Vector("Adress points (edition)", {
visibility: false,
strategies: [
new OpenLayers.Strategy.BBOX(),
saveStrategy
],
protocol: new OpenLayers.Protocol.WFS({
url: wfsurl,

featurePrefix:"luma_project",
featureType: "adresspt",
featureNS: "http://localhost:8080/luma_project",
srsName: "EPSG:900913",
geometryName: "the_geom",
version: "1.1.0"
})
});

// Identification and edition of layers


// Edition

editControls = {
building_draw: new OpenLayers.Control.DrawFeature(bygg_ovr_wfs, OpenLayers.Handler.Polygon),
building_drag: new OpenLayers.Control.DragFeature(bygg_ovr_wfs),
building_modify: new OpenLayers.Control.ModifyFeature(bygg_ovr_wfs),
building_delete: new DeleteFeature(bygg_ovr_wfs, {title: 'Delete building'}),
building_click: new OpenLayers.Control.WMSGetFeatureInfo({
url: wmsurl,

title: 'Identify features by clicking',
layers: [bygg_ovr]
}),
building_hover: new OpenLayers.Control.WMSGetFeatureInfo({
url: wmsurl,
title: 'Identify features by hover',
layers: [bygg_ovr],
hover: true,
// defining a custom format options here
formatOptions: {

typeName: 'bygg_ovr',
featureNS: 'http://localhost:8080/luma_project'
}
}),
adresspt_draw: new OpenLayers.Control.DrawFeature(adresspt_wfs, OpenLayers.Handler.Point),
adresspt_drag: new OpenLayers.Control.DragFeature(adresspt_wfs),
adresspt_delete: new DeleteFeature(adresspt_wfs, {title: 'Delete adress point'}),
adresspt_click: new OpenLayers.Control.WMSGetFeatureInfo({
url: wmsurl,
title: 'Identify features by clicking',

layers: [adresspt]
}),
adresspt_hover: new OpenLayers.Control.WMSGetFeatureInfo({
url: wmsurl,
title: 'Identify features by hover',
layers: [adresspt],
hover: true,
// defining a custom format options here
formatOptions: {
typeName: 'adresspt',

featureNS: 'http://localhost:8080/luma_project'
}
})
};

for(var i in editControls) {
map.addControl(editControls[i]);
editControls[i].events.register("getfeatureinfo", this, showInfo);
}


// Add the layers on the map

map.addLayers([osm,gphys,gstr,ghyb,gsat,dem,nobase,transportation,bygg_ovr,bygg_ovr_wfs,adresspt,adresspt_wfs]);


// Add the controls on the map

map.addControl(new OpenLayers.Control.Navigation());
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.addControl(new OpenLayers.Control.OverviewMap());

map.addControl(new OpenLayers.Control.Scale($('scale')));
map.addControl(new OpenLayers.Control.MousePosition({element: $('location')}));

map.zoomToExtent(bounds);


} // End of init()

function showInfo(evt) {
$('responseText').innerHTML = evt.text;

} // End of showInfo()


function toggleControlEdit(element) {
for(key in editControls) {
var control = editControls[key];
if(element.value == key && element.checked) {
control.activate();
}
else {

control.deactivate();
}
}
} // End of toogleControlEdit()

// This control has been found here:
// http://www.peterrobins.co.uk/it/oledit.html

DeleteFeature = OpenLayers.Class(OpenLayers.Control, {
initialize: function(layer, options) {

OpenLayers.Control.prototype.initialize.apply(this, [options]);
this.layer = layer;
this.handler = new OpenLayers.Handler.Feature(
this, layer, {click: this.clickFeature}
);
},
clickFeature: function(feature) {
// if feature doesn't have a fid, destroy it
if(feature.fid == undefined) {
this.layer.destroyFeatures([feature]);

} else {
feature.state = OpenLayers.State.DELETE;
this.layer.events.triggerEvent("afterfeaturemodified", {feature: feature});
feature.renderIntent = "select";
this.layer.drawFeature(feature);
}
},
setMap: function(map) {
this.handler.setMap(map);
OpenLayers.Control.prototype.setMap.apply(this, arguments);

},
CLASS_NAME: "OpenLayers.Control.DeleteFeature"
}) // End of DeleteFeature

Thanks in advance!




No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...