ThinkGeo.com    |     Documentation    |     Premium Support

Text Adornment Layer

Hi,


How would I go about adding a text-based adornment layer? I want to include some copyright information on my maps for the data currently in view. The text will change as the user pans around the map so it's not practical to create a set of static images and use the existing MapTools.Logo property.


I guess I could create images on the fly and point the MapTools.Logo.ImageUri property to an HTTP handler that delivers up the text as an image, but this seems a bit clunky.


I found the "Graphic Logo for Web" sample in the code community which seems like a good starting point for a solution, but I'm unsure how to go about calculating the height and width of the text and rendering it out on both types of canvas.


I had a search through the forums but couldn't see an obvious solution. I'm surprised it hasn't been asked before as including copyright information is often a condition on most commercial map licenses.


Best regards,


Gary



Hi Gary,


I have attached a simple sample which is based from the Graphic Logo for Web" sample you mentioned above. I'm not sure if this is exactly what you want. If I misunderstand your meaning please let me know. 


Thanks,


Johnny


 



2034-GraphicLogoAdornmentWeb.zip (1.56 KB)

Hi Johnny,


Many thanks for this - it's almost what I'm looking for.


What I'd like to do though is position the text at the bottom right of the map, which is the convention used by Google, Bing, Yahoo, etc. To do this, I'll need to somehow calculate the height and width of the text in pixels and use these when initialising screenPointF.


How can I do this? I'm assuming the functionality must exist somewhere (possibly internally within your classes) as it will be used to determine whether labels overlap, etc.


Also, is it possible to have the adornment layer frozen so that it doesn't move when the user is panning? It seems to move with the map when the user is dragging with the mouse, and then redraws in the correct location once the mouse button is released. I'd like it to stay in the same place, just as the scale bar and other map tools do.


 


Thanks again,


Gary



Hi,


 
It’s hard to freeze the position of AdormentLayer. I think we can place a Label control at bottom-right corner to show the copyright information. Also the text can be changed on the fly using server side ExtentChanged event when we pan the map. That’s the simplest but efficient way, I think.
 
Note: There is a client side ExtentChanged event that can be used to managed this, I think maybe that can give you some ideas.
 
Thanks.
 
Johnny

Hi Johnny,


I've managed to make a bit of progress with this and can now position the text at the bottom right hand corner with the following modified DrawCore() code.



if (IsVisible)
{
   GeoFont geoFont = new GeoFont("Arial", 7, DrawingFontStyles.Regular);

   if (canvas is GdiPlusGeoCanvas)
   {
      GdiPlusGeoCanvas gdiPlusGeoCanvas = canvas as GdiPlusGeoCanvas;
      DrawingRectangleF textRectangle = gdiPlusGeoCanvas.MeasureText(copyrightText, geoFont);
      ScreenPointF screenPointF = GetDrawingLocation(gdiPlusGeoCanvas, textRectangle.CenterX, textRectangle.CenterY);
      gdiPlusGeoCanvas.DrawTextWithScreenCoordinate(copyrightText, geoFont, new GeoSolidBrush(GeoColor.StandardColors.Black), screenPointF.X, screenPointF.Y, DrawingLevel.LevelOne);
   }
   else
   {
      DrawingRectangleF textRectangle = canvas.MeasureText(copyrightText, geoFont);
      ScreenPointF screenPointF = GetDrawingLocation(canvas, textRectangle.CenterX, textRectangle.CenterY);
      canvas.DrawTextWithScreenCoordinate(copyrightText, geoFont, new GeoSolidBrush(GeoColor.StandardColors.Black), screenPointF.X, screenPointF.Y, DrawingLevel.LevelOne);
   }
}

I'd still really like to be able to lock this in position though so it doesn't move when the map is panning. This is how many of the built-in tools such as the map logo image, mouse coordinates, etc. behave. Are these rendered using some sort of special internal overlay? Is there some way I can tap into this capability?


Best regards,


Gary



I also have the same problem that: when I pan, the custom adornment layer will move together with map, after you release the mouse, it draw again at orginal place. I don’ want it looks like this, I want to the custom adornment layer’s position is fixed, such as logo, zoombar. 
  
 In Desktopedition, I can find a overlay called AdornmentOverlay, but there is no AdornmentOverlay in Webedition, I wonder which is the best way to implement my requirement too. 
  
 Thanks

 


Guys,
 
Just as you mentioned before, the best solution is that we can develop a custom element with fixed position using Httphandler. Please refer to the attached sample for detail.
 
Thanks,
 
Johnny

2048-Test.zip (7.14 KB)

Guys,


FYI, there is also a project in the Code Community that shows how to have a Graphic Logo for Web. Please, check it out:


code.thinkgeo.com/projects/s...logoforweb