ThinkGeo.com    |     Documentation    |     Premium Support

Identifying which layer was clicked

 Hi,


How to identify which layer has been clicked?


Dim dyOverlay As New LayerOverlay()


dyOverlay.Name = "DynamicOverlay"


for each loop


 adding multiple shape files to the above Dynamic Overlay witha key.


Next


And there are many Dynamic Overlays added to the map and are shown at different zoom levels. Each Dynamic overlay contains many shape files.


Now,


In the Map.Click event, using "e.PointShape" how would I find which layer was clicked. Is there a way to the find the corresponding layer without looping through all the ShapeLayers within the dynamic overlay?


On the Client Side, OnClientClick, does this function know which layer was clicked?


Appreciate your help on this.


 


Thanks!



Satish,


When we clicked on the map, actually we don't know which layer is clicked. But you can arrage your layers to optimize the logic in Map.Click event. In fact you don't need to loop through all the layers in overlay, you can get it by its key.


Layer layer = overlay.Layers["LayerKey"];


Since you know which layers should be clicked, here we provide some suggestions:


1. Arrage overlays, always add layers which can be clicked to a single overlay, so the search will be limited to a single overlay 


2. Arrage layers' order as following: Point Layers are always on top, Area Layers are always on bottom, the search sequence should be: Point-->Line-->Area


Besides, the following link provided another solution for getting clicked feature in multi-layers. gis.thinkgeo.com/Support/Dis...fault.aspx.


Regards,


Ivan


 



 Thanks for your reply.


I have a Map.OnClientClick calling a javascript function and also wanted to have server side event to happen at certain zoom levels. So what I did is I returned "false" for all zoom levels from the javascript function for which I don't need the server postback. But what I noticed is that the client side event is called but the server side event still takes places inspite of returning "false".


Is there a way to handle this scenario? Also how do I get the clicked (Lat,LNG) pair on the OnClientClick javascript function?


Thanks!



Satish,


Here I provide some code snippet which can meet your requirement, please check it and have another try.


--Client side


var oMap;

var OnMapCreated = function (map) {
    oMap = map;
}

var Map1ClientClick = function (e) {
    var lonlat = oMap.getLonLatFromPixel(new OpenLayers.Pixel(e.x, e.y));
    var lonlatPair = "LonLat:" + lonlat.lon + "," + lonlat.lat;
    // For example, don't raise server side click event in zoomlevel 3~7
    if (oMap.zoom > 3 && oMap.zoom < 7) {
        return false;
    }
}


--Sever side


Map1.OnClientClick = "Map1ClientClick";


Regards,


Ivan


 



This one worked for me.


Thanks.



Satish,  
  
 You’re welcome.  
  
 Regards,  
  
 Don