ThinkGeo.com    |     Blog    |     Wiki    |     Support

AdornmentLayer in Silverlight

Hi


I would like to add image/text in adornment layer so that its position would not be changed even if we Pan or zoom map; for example, compass example as mentioned in the url (wiki.thinkgeo.com/wiki/Source_Code_ServicesEditionSample_Compass_CS_090820.zip); I would also like to change the text/image in the runtime; But I could not find AdornmentLayer in the silverlight edition as this class is in MapSuiteCore. Is there a way to achieve this in Silverlight? If yes, please provide the sample.


Thanks


-Muneswar





 



Hello Muneswar, 



Thanks for your post, in sliverlight edition, there is some special, you can call the method in Server side or Client side, I believe the way you tried is try to use it in Client side, so you can't find it. 



But when we using the way in Server side, we can almost do everything we can do in web edition. Because the server side way is using the map suite core just like other product. 



Please refer this post:  gis.thinkgeo.com/Support/Dis...fault.aspx 



Let met know if you still have queries. 



Regards, 



Gary



Hi Gary, 
 My problem is not loading maps in silverlight; I am aware that we can load maps using serveroverlays using mapconnector. I want to add text/bitmap on map and its position should not change on pan & zoom; assume I want to display legend on map as explained in wiki.thinkgeo.com/wiki/Source_Code_ServicesEditionSample_Compass_CS_090820.zip

Hello Muneswar, 
  
 Sorry, I mean you can using AdornmentLayer  in the silverlight just follow the way I mentioned above, then it’s the same to using AdornmentLayer to make it work without pan/zoom . 
  
 Regards, 
  
 Gary

Hi Gary, 
  
 Could i get a sample of using mini map in silverlight edition?

Hi Gary, 
  
 I have to implement a static minimap in my map page. Static in the sense the minimap should not refresh like the map refreshes its tile for every zooming and panning. Could you suggest me an idea so that the minimap does not refreshes when the map is zoomed or panned. I have used the following code.  
  
 in aspx.cs 
  
                 ServerLayerOverlay worldMapKitRenderLayerOverlay = new ServerLayerOverlay("WorldMapKitRenderLayerOverlay"); 
                  worldMapKitRenderLayerOverlay.Layers.Add(worldMapKitRenderLayer); 
                 SilverlightMapConnector1.ServerLayerOverlays.Add(worldMapKitRenderLayerOverlay); 
  
                 
                                  
                 MiniMapAdornmentLayer minimap = new MiniMapAdornmentLayer(); 
                 minimap.Layers.Add(worldMapKitRenderLayer);  
                 minimap.Location = ThinkGeo.MapSuite.Core.AdornmentLocation.LowerLeft;  
  
 in adornmentlayer.cs 
  
 public class MiniMapAdornmentLayer : AdornmentLayer 
     { 
         private Collection<Layer> layers; 
         private int width; 
         private int height; 
         public MiniMapAdornmentLayer() 
             : this(new Layer[] { }, 250, 250) 
         { } 
         public MiniMapAdornmentLayer(int width, int height) 
             : this(new Layer[] { }, width, height) 
         { } 
         public MiniMapAdornmentLayer(IEnumerable<Layer> layers, int width, int height) 
         { 
             this.layers = new Collection<Layer>(); 
             foreach (Layer layer in layers) 
             { 
                 this.layers.Add(layer); 
             } 
             this.width = width; 
             this.height = height; 
         } 
         public Collection<Layer> Layers 
         { 
             get { return layers; } 
         } 
  
  
         protected override void DrawCore(GeoCanvas canvas, Collection<SimpleCandidate> labelsInAllLayers) 
         { 
             GeoImage miniImage = new GeoImage(width, height); 
             RectangleShape scaledWorldExtent = MapEngine.GetDrawingExtent(new RectangleShape(-135.7, 83.6, 113.5, -83), 200, 200); 
             //RectangleShape scaledWorldExtent = MapEngine.GetDrawingExtent(canvas.CurrentWorldExtent, 200, 200); 
             scaledWorldExtent.ScaleUp(10); 
             GdiPlusGeoCanvas minCanvas = new GdiPlusGeoCanvas(); 
              
             minCanvas.BeginDrawing(miniImage, scaledWorldExtent, canvas.MapUnit); 
             foreach (Layer layer in layers) 
             { 
                 layer.Draw(minCanvas, labelsInAllLayers); 
             } 
  
             //minCanvas.DrawArea(new RectangleShape(-150.7, 83.6, 123.5, -93), new GeoPen(GeoColor.StandardColors.Gray, 2), DrawingLevel.LevelOne); 
             minCanvas.DrawArea(canvas.CurrentWorldExtent, new GeoPen(GeoColor.StandardColors.Black, 2), DrawingLevel.LevelOne); 
             minCanvas.EndDrawing(); 
             ScreenPointF drawingLocation = GetDrawingLocation(canvas, width, height); 
             canvas.DrawScreenImageWithoutScaling(miniImage, (drawingLocation.X + width / 2) + 10, (drawingLocation.Y + height / 2) - 10, DrawingLevel.LevelOne, 0, 0, 0); 
              
         } 
     } 
  
  
 in xaml.cs 
  
             serverLayerOverlay = new ServerLayerOverlay("WorldMapKitRenderLayerOverlay", "SilverlightMapConnector1"); 
             serverLayerOverlay.TileType = TileType.SingleTile; 
             Map1.Overlays.Add(serverLayerOverlay); 
             
             ServerLayerOverlay minimapoverlay = new ServerLayerOverlay("ServerSideMiniMap", "SilverlightMapConnector1"); 
             minimapoverlay.TileType = TileType.SingleTile; 
             Map1.Overlays.Add(minimapoverlay);

Hi Gary 
  
 Gentle Reminder on the minimap query!!!

Hello Madan, 
  
 Sorry for delay, there is some different part about the AdornmentLayer working between Web and Sliverlight, so we do not support the minimap in the sliverlight as default function, sorry for the inconvenience. 
  
 I tried your code but it’s not working on my side, I can’t see the mini map render, but my suggest about your questions is hook the extentchanged event, then every time when the map zoom or pan, extent will change, now refresh the minimap. 
  
 Let us know your question and queries. 
  
 Regards, 
  
 Gary