ThinkGeo.com    |     Documentation    |     Premium Support

Dynamic symbols?

Outside of using a PopupOverlay, is there a way to add an image to a mapsymbol dynamically without having to load it into a layer’s style first? Currently I load all of the possible images I want to use into a ValueStyle and then apply that ValueStyle to the layer. I’d like to be able to simply add a marker to a layer without having to know what images I’m going to use beforehand. 

Hi Clay,



If I understand is correct, you want to change the style/marker image on the fly? If yes, then some codes would be like:

           private void ChangePointImage(object sender, RoutedEventArgs e)
           {

                ValueItems valuesItem =  shapefileFeatureLayer.ZoomLevelSet.ZoomLevel01.CustomStyle[]…
                valuesItem . DefaultPointStyle.Image = new GeoImage(@"…\marker.png");
                Map1.Refresh();
           }

Actually, I am not very clear your scenario, if the above not helps you, please provide us more details.

Thanks,

Troy

What I would like to have is something like 

Overlay.EditShapesLayer InternalFeatures.Add(key, feature, image);

or something to that effect so I can tell the feature exactly what image I want at run time rather than having to load them all in the ValueStyle when the layer loads. Does that make more sense?


Hi Clay,



Not pretty sure if you have know the simpleMarkerOverlay or Some MarkerOverlays, I think we may turn the feature to a marker instead of using shapefileFeatureLayer or InMemoryFeaturelayer. Some codes like:


SimpleMarkerOverlay markerOverlay = new SimpleMarkerOverlay();
 
            Marker marker = new Marker();
            PointShape position = feature.GetShape() as PointShape;
            marker.Position = new Point(position.X, position.Y);
            marker.ImageSource = new BitmapImage(new Uri("/Resources/image.png", UriKind.RelativeOrAbsolute));
            marker.Width = 20;
            marker.Height = 30;
 
            markerOverlay.Markers.Add(marker);
 
            markerOverlay.Refresh();

If I am misunderstand your case, please feel free to correct me.

Thanks,

Troy

That’s got it. Thanks!

Okay, great to hear it helps.

Thanks,

Troy