ThinkGeo.com    |     Documentation    |     Premium Support

Numbered markers on InMemoryMarkerOverlay

Hi there,


I have a map with a few (30 max) Markers on it using a InMemoryMarkerOverlay.


Now, I need to change the marker's look and make the markers numbered (ie - all markers will have a label with their index number,taken from the markers list, on them)


What is the best way to implement this ?

Is there a way to manually create the shape and add the label on it (even while using a different Overlay) ?


Two of the options I had in mind are :



        
  1. OnMarkerCreate - get the marker location upon creation and add a floating span label on it.

        The problem is that the label never seem to be exactly on the marker.

  2.     
  3. Create custom made images of the markers with the labels on them and place each and every one on a seperate Overlay.

        The problem is, I might be creating to many Overlays. plus, if I ever wish to change the marker design, I will have to recreate all the marker again


Thank You in advance,

Runny



Runny, 
  
 Thanks for your questions! 
  
 Please give me a little times to research your requirement, I will let you know the result as soon as possible, 
  
 Thanks, 
  
 Scott,

Thank you for your help Scott.

 Runy,


Thanks for your questions,


Please refer the following code and I think it meets your requirements fully:


 



Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#B3C6D4"));
                Map1.MapUnit = GeographyUnit.DecimalDegree;

                RectangleShape recShp = new RectangleShape(-180, 90, 180, -90);
                Map1.CurrentExtent = new RectangleShape(-125, 72, 50, -46);
                Map1.RestrictedExtent = recShp;

                // Vehicle Marker Overlay 
                InMemoryMarkerOverlay vehMarkerOverlay = new InMemoryMarkerOverlay("Vehicles");

                vehMarkerOverlay.FeatureSource.Open();
                vehMarkerOverlay.Columns.Add(new FeatureSourceColumn("Status"));
                vehMarkerOverlay.Columns.Add(new FeatureSourceColumn("PopupInfo"));
                vehMarkerOverlay.Columns.Add(new FeatureSourceColumn("FeatureId"));
                vehMarkerOverlay.FeatureSource.Close();

                ValueMarkerStyle markerStyle = new ValueMarkerStyle("Status");

                // 'Free' vehicle style
                MarkerValueItem freeVeh = new MarkerValueItem("F");
                freeVeh.DefaultMarkerStyle.WebImage = new WebImage("../../theme/default/img/marker_green.gif", 32, 32);
                freeVeh.DefaultMarkerStyle.WebImage.Text = "[#FeatureId#]";
                freeVeh.DefaultMarkerStyle.Popup.ContentHtml = "[#PopupInfo#]";
                markerStyle.ValueItems.Add(freeVeh);

                // 'Off' vehicle style
                MarkerValueItem offVeh = new MarkerValueItem("Z");
                offVeh.DefaultMarkerStyle.WebImage = new WebImage("../../theme/default/img/marker_green.gif", 32, 32);
                offVeh.DefaultMarkerStyle.WebImage.Text = "[#FeatureId#]";
                offVeh.DefaultMarkerStyle.Popup.ContentHtml = "[#PopupInfo#]";
                markerStyle.ValueItems.Add(offVeh);

                vehMarkerOverlay.ZoomLevelSet.ZoomLevel01.CustomMarkerStyle = markerStyle;

                vehMarkerOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

                Feature feature1 = new Feature(-123, 49, "veh1");
                feature1.ColumnValues.Add("Status", "F");
                feature1.ColumnValues.Add("FeatureId", feature1.Id);
                feature1.ColumnValues.Add("PopupInfo", "GPS: -123,49 Company:1");
                vehMarkerOverlay.Features.Add(feature1);

                Feature feature2 = new Feature(-123.234, 49.567, "veh2");
                feature2.ColumnValues.Add("Status", "Z");
                feature2.ColumnValues.Add("FeatureId", feature2.Id);
                feature2.ColumnValues.Add("PopupInfo", "GPS: -123,49 Company:1");
                vehMarkerOverlay.Features.Add(feature2);

                Map1.CustomOverlays.Add(vehMarkerOverlay);
  The label can be numbered according to the FeatureId on the markers, you can change the FeatureId column to any other columns what you want,


Thanks,


Scott,



Thanks a bunch Scott. 
  
 Exactly what I was looking for. 
  
 Runny

Hello Runny, 
  
 I’m glad it’s help, any more questions please tell us. 
  
 Regards, 
  
 Gary