ThinkGeo.com    |     Documentation    |     Premium Support

Unique marker identifier

Hi guys,


Does the marker class have some kind of unique identifier property? When the user clicks on a marker (that can be on any overlay) on the map, I need to be able to get the key of the marker overlay and the key of marker object. At the moment, I can't seem to find out which marker overlay a marker belongs to from the marker object.  A unique identifier in the marker object would be really helpful.


Thanks,


Nirish



Hi Nirish,


You’d better use the events in MarkerOverlay instead of Marker to implement this, and the arguments of those events contains both the marker you click on and the id of the MarkerOverlay that the marker belongs to. Followings is the sample code, please have a try to see if it helps.




SimpleMarkerOverlay markerOverlay = new SimpleMarkerOverlay();
markerOverlay.MouseEnter += new EventHandler<MouseEnterMarkerOverlayEventArgs>(markerOverlay_MouseEnter);

void markerOverlay_MouseEnter(object sender, MouseEnterMarkerOverlayEventArgs e)
{
     // This is the canvs of marker overlay which the mouse enter in. 
     Canvas currentMarkerOverlayCanvas = (Canvas)sender;

     // This is the id of the marker overlay which the mouse enter in.
     string markerOverlayId = currentMarkerOverlayCanvas.Name;

     // This the marker which mouse enter in. 
     Marker currentMarker = (Marker)e.CurrentMarker;
}


Any more questions please let me know.
 
Thanks,
 
Sun

Hi Sun,  
  
 Thanks for that. I can now get the id of the marker overlay. But how do I get the key of the marker in the markers collection of the marker overlay? 
  
 Thanks, 
 Nirish

Nirish,


I think you could use the Name property of Marker as a key when you add it to the MarkerOverlay. The code is like this:


Marker marker1 = new Marker(0, 0);
marker1.Name = "1";
markerOverlay.Markers.Add(marker1.Name, marker1);

Marker marker2 = new Marker(20, 0);
marker1.Name = "2";
markerOverlay.Markers.Add(marker2.Name, marker2);

Marker marker3 = new Marker(40, 0);
marker1.Name = "3";
markerOverlay.Markers.Add(marker3.Name, marker3);


Then in the mouse click (in the Silverlight Edition this could be MouseLeftButtonDown event of MarkerOverlay) you can get the maker by ‘e.CurrentMarker’ when mouse click on the marker and the name of this marker is just the key of this marker in the markers collection of the marker overlay.


void markerOverlay_MouseLeftButtonDown(object sender, MouseLeftButtonDownMarkerOverlayEventArgs e)
{
    Marker marker = e.CurrentMarker;
    string key = marker.Name;
}


Hope this helps and any more questions please let me know.
Thanks,
Sun

Hi Sun, 
  
 I was thinking about that option to use the marker name as the key but in cases where different markers can have the same name (eg. multiple markers named ‘Hospital’), it doesn’t work very well. But your solution is good for unique marker names. :) 
  
 Thanks, 
  
 Nirish

Yes, this solution will have a problem if multiple markers have the same names. We will consider adding some property (like Id or something) to unique identify a marker. 
  
 Sorry for the inconvenience and any more questions please let me know. 
  
 Thanks, 
  
 Sun