Hi users-list,

I've not found a solution to this by searching the web yet,:

My problem concernes OpenLayers.Layer.Text layer below an 
OpenLayers.Layer.Vector layer, trying to trigger the click events on the 
markers of the Text layer (to be able to open their popups) without 
deactivating the Vector overlay layer. I've read an article about Vector layer 
absorbing click events without a good solution IMO.

How can I solve this issue?

I've prepared an example:
There should be 2 files attached.

Alternatively you could proceed with following to achieve the same like the 
attached files:
Taking the Click event example from here 
http://openlayers.org/dev/examples/click.html
and replace the complete contents of the script tag with this (don't forget to 
link to the online version of the OpenLayers.js in the head-tag!):

 var projMercator = new OpenLayers.Projection("EPSG:900913");
 var map = new OpenLayers.Map("map");

 OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {
 defaultHandlerOptions: {
 'single': true,
 'double': false,
 'pixelTolerance': 0,
 'stopSingle': false,
 'stopDouble': false
 },

 initialize: function(options) {
 this.handlerOptions = OpenLayers.Util.extend(
 {}, this.defaultHandlerOptions
 );
 OpenLayers.Control.prototype.initialize.apply(
 this, arguments
 ); 
 this.handler = new OpenLayers.Handler.Click(
 this, {
 'click': this.trigger
 }, this.handlerOptions
 );
 }, 

 trigger: function(e) {
 var lonlat = map.getLonLatFromViewPortPx(e.xy);
 alert("You clicked near " + lonlat.lat + " N, " +
 + lonlat.lon + " E");
 }

 });


 function init(){
 map.addControl(new OpenLayers.Control.LayerSwitcher());

 // click handler
 var click = new OpenLayers.Control.Click();
 map.addControl(click);
 click.activate();

 // 1st layer
 map.addLayer(new OpenLayers.Layer.OSM());

 // 2nd layer
 var pois = new OpenLayers.Layer.Text( "My Points",
 {
 location:"./textfile.txt",
 projection: map.displayProjection
 });
 map.addLayer(pois);


 // 3rd layer (vector layer)
 var layerGeometry = new OpenLayers.Layer.Vector(
 "Gebiete",
 {
 strategies: [new OpenLayers.Strategy.Fixed()],
 protocol: new OpenLayers.Protocol.HTTP({
 url: "geom.json",
 format: new OpenLayers.Format.GeoJSON()
 }),
 projection: projMercator
 }
 );
 map.addLayer(layerGeometry);


 var lonLat = new OpenLayers.LonLat( 9.5788, 48.9773 )
 .transform(
 new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
 map.getProjectionObject() // to Spherical Mercator Projection
 );
 var zoom=11;
 map.setCenter (lonLat, zoom); 
 }






Thanks
João

_______________________________________________
Users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/openlayers-users

Reply via email to