[OpenLayers-Users] Problem with SelectFeature and ModifyFeature
armstrong1985 at libero.it
armstrong1985 at libero.it
Tue Jul 3 07:36:39 PDT 2012
Good morning. I have a problem with the controls and SelectFeature ModifyFeature.
If I edit a feature and I click outside of the same feature, the selection control does not trigger more events.
I tried to update to new version of OpenLayers 2.12, but this does not work no more. This is my code: var map_overlays = [];
var map, vectorLayer;
var out_options = {
'internalProjection': new OpenLayers.Projection("EPSG:900913"),
'externalProjection': new OpenLayers.Projection("EPSG:4326")
};
var format = new OpenLayers.Format.WKT(out_options);
var lat=41.932
var lon=12.420
var zoom=6
function onPopupClose(evt) {
selectControl.unselect(selectedFeature);
}
function onFeatureSelect(feature) {
selectedFeature = feature;
popup = new OpenLayers.Popup.FramedCloud("chicken",
feature.geometry.getBounds().getCenterLonLat(),
null,
'Nome oggetto: <input id=\'name_polygon\' value="'+nome_poligono+'">',
null, true, onPopupClose);
feature.popup = popup;
map.addPopup(popup);
}
function onFeatureUnselect(feature) {
map.removePopup(feature.popup);
feature.popup.destroy();
feature.popup = null;
}
var 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.id == 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"
});
var SaveFeature = 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){
serialize(feature);
if(feature.inserted == OpenLayers.State.INSERT){
if (!feature.style) {
feature.style = OpenLayers.Util.extend({},
OpenLayers.Feature.Vector.style["default"]);
}
feature.style.fillColor = "#FF0000";
this.layer.redraw();
}
},
setMap: function(map) {
this.handler.setMap(map);
OpenLayers.Control.prototype.setMap.apply(this, arguments);
},
CLASS_NAME: "OpenLayers.Control.SaveFeature"
});
var size = new OpenLayers.Size(21,25);
var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
var icon = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker-blue.png', size, offset);
var markers;
// ***
// *** Map
// ***
function map_init() {
map = new OpenLayers.Map ("map", {
controls:[
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.ScaleLine(),
new OpenLayers.Control.Permalink('permalink'),
new OpenLayers.Control.MousePosition(),
new OpenLayers.Control.Attribution()
],
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
maxResolution: 156543.0399,
numZoomLevels: 19,
units: 'm',
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326")
} );
var wmsLayer = new OpenLayers.Layer.WMS("OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers:"basic"});
// Google Layers
var gmap = new OpenLayers.Layer.Google("Google Map", {sphericalMercator:true, numZoomLevels: 21});
var gphy = new OpenLayers.Layer.Google("Google Physical", {type:
google.maps.MapTypeId.TERRAIN,sphericalMercator:true, numZoomLevels: 16}
);
var gsat = new OpenLayers.Layer.Google("Google
Satellite", {type: google.maps.MapTypeId.SATELLITE,
sphericalMercator:true,numZoomLevels: 21} );
// Bing Maps layers
var aerial = new OpenLayers.Layer.VirtualEarth("Bing
Satellite", {type: VEMapStyle.Aerial, sphericalMercator:true,
numZoomLevels: 19});
var shaded = new
OpenLayers.Layer.VirtualEarth("Bing Map", {type: VEMapStyle.Shaded,
sphericalMercator:true, numZoomLevels: 21});
// Yahoo layers
var yahoosat = new OpenLayers.Layer.Yahoo("Yahoo
Satellite",{'type': YAHOO_MAP_SAT, 'sphericalMercator': true,
numZoomLevels:18 });
var yahoostreet = new OpenLayers.Layer.Yahoo( "Yahoo Street", { 'sphericalMercator': true, numZoomLevels:18 } );
vectorLayer = new OpenLayers.Layer.Vector("Poligoni", {sphericalMercator:true});
markers = new OpenLayers.Layer.Markers( "Markers" , {sphericalMercator:true});
map.addLayers([ gmap,gphy,gsat,yahoosat,yahoostreet,aerial,shaded,wmsLayer,markers,vectorLayer ] );
selectControl = new OpenLayers.Control.SelectFeature(vectorLayer,
{onSelect: onFeatureSelect, onUnselect: onFeatureUnselect, clickout: true});
map.addControl(selectControl);
selectControl.activate();
vectorLayer.events.on({
'beforefeaturemodified': function(evt) {
console.log("Selected " + evt.feature.id + " for modification");
},
'afterfeaturemodified': function(evt) {
if(is_int(evt.feature.id)){
if(evt.feature.state == OpenLayers.State.DELETE){
delete_stored_feature_polygon(evt.feature.id);
}
else {
var str = format.write(evt.feature);
modify_stored_feature_polygon(str, evt.feature.id);
}
}
}
});
var panel = new OpenLayers.Control.Panel({
displayClass: 'customEditingToolbar',
allowDepress: true
});
var draw = new OpenLayers.Control.DrawFeature(
vectorLayer, OpenLayers.Handler.Polygon,
{
title: "Draw Feature",
displayClass: "olControlDrawFeaturePolygon",
}
);
var edit = new OpenLayers.Control.ModifyFeature(vectorLayer, {
title: "Modify Feature",
displayClass: "olControlModifyFeature",
stopSingle: false
});
var del = new DeleteFeature(vectorLayer, {
title: "Delete Feature",
displayClass: "olControlDeleteFeature"
});
var save = new SaveFeature(vectorLayer, {
title: "Save Feature",
displayClass: "olControlSaveFeature"
});
var navControl = new OpenLayers.Control.Navigation({title: 'Pan/Zoom'});
panel.addControls([del, save, draw, edit, navControl]);
panel.defaultControl = navControl;
map.addControl(panel);
map.addControl(new OpenLayers.Control.LayerSwitcher());
var lonLat = new OpenLayers.LonLat( lon ,lat )
.transform(
new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
map.getProjectionObject() // to Spherical Mercator Projection
);
map.setCenter (lonLat, zoom);
}
Where is the problem?
Thanks in advance
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/openlayers-users/attachments/20120703/ffe73a5c/attachment-0001.html>
More information about the Users
mailing list