ThinkGeo.com    |     Blog    |     Wiki    |     Support

Legend

Hello

In the basic steps of mapping, we often learn that after drawing the map, you have to draw the legend. For routing maps it have not been done by major editors like GoogleMaps, YahooMaps etc. and it is already a mistake. Unfortunately nobody seems to care about. But for data representation like sales in geomarketing, it is an absolute necessity.

I've been searching the forums and other pages for how to build the legend in MapSuiteDesktop, and found few information. Last summer it was not available. Some guys gave some trick to build it from Drawing, but not available for all styles.


Is there now a plug-in or some source code that would build a proper legend, for

- topological features likes routes, administrative areas, mountains etc.

- data representation like in articque.com/uploads/ima...e-paca.png

- as well as other decoration like scale, orientation etc.


Thanks for any information.



Riccardo, 


You can accomplish this by creating a custom AdornmentLayer and adding it to the map. Besides legend, you can draw a title or a company logo or a compass on top of your map too. Basically you can draw whatever you want to draw. We have built-in classes for drawing ScaleBar and ScaleLine too so you can easily add them on your map.
 
Here is a sample for you. Please let us know if you have any issues.


Thanks,


Ben



403-AdornmentLayer.zip (104 KB)

Thanks Ben, that’s nice, I didn’t see the adornment layer sample. 
 Now I’m working on Csharp, and I successfully added a ScaleBar adornment layer, but could not find any customadornment layer like in your VB sample. 
 Do you have it for Csharp and can it handle any area and line style that is in the map ? 
 Thanks for your help. 
  
 PS: by the way do you have any repository for such addon classes, somewhere in the support web site ?

Riccardo,


Here is the CSharp one.  In fact I’m more familiar with C# just thought by mistake you were using VB. 
 
You can see from the code that creating your own Adornment Layer is a low level method, which gives you much power allowing you to draw whatever you want, but it is not that convenient to hook up the styles on the map and draw them as legends automatically.  You still need to add your own code for your legend and in the future, we may add a default legend style which can be easy to use.  
 
I wrote this class for you just now and it’s just a sample showing how to use the adornmentLayer, not good enough to be an addon class. But it’s a good idea that we can have some repository for this kind of classes, we will consider that matter, thanks for reminding.
 
Ben

408-AdornmentLayerCSharp.zip (106 KB)

Thanks for the csharp sample. 
 I added to my map and it seems to jump down each time I move the map with the pan mode… But anyway I understand the idea.

Riccardo, 
  
 As what I said, that’s why it is not in a repository for everyone downloading. :) Anyway, you can see with this custom AdornmentLayer, you can write cool things yourself, that’s definitely great.  
  
 Thanks, 
  
 Ben. 


Hello  
  
 I think this sample is out of date becuse I found the DrawSample Method this can be more acurrate to represent styles. Can you update your sample using this method including a linestyle or better if you can give us a control that do the same that the legend control in version 2.x I can see that this new version is more extensible but for many that start with version 2 is more dificult if you keep away this use full features. Maybe for you this can take a few minutes but for newbies this can take days, I choose your products becouse I’m agree with your philosophy about simplicity and time saving. I am very  happy with this new powerfull version of map suite but try to keep simplicity and time saving. 
  
 Best regards

Hi Yuri,


The DrawSample is a good idea for legend. We tried to use this function to update this legend adornment layer sample, and it works fine. Also we added the line style to this sample based on your requirement. Hope this sample can give you some help.
Any more questions please let me know and thanks for sharing your good idea.
Thanks,
sun

1250-AdornmentLayerCSharp.zip (103 KB)

Thanks it was very usefull. Now I have more clear how to use and declare the canvas classes, and the drawsample method.

You are welcome, and any more questions please let me know. 
  
 Thanks, 
  
 sun 


Traing to code a legend control like in version 2.x I found the next problem how can I know wich layers are visible in the current scale? I tray to use the properties isvisible and isactive but they are always returns true. So how is the easiest way to know wish layers are showing in the map?

Yuri,


Thanks for your post.
 
For the feature layer, you could do it in the following way:

ZoomLevel drawingZoomLevel =  ((FeatureLayer)layer).ZoomLevelSet.GetZoomLevelForDrawing(winformsMap1.CurrentExtent, winformsMap1.Width, winformsMap1.MapUnit);
if (drawingZoomLevel == null)
{
     System.Diagnostics.Debug.WriteLine("It is not active for the current zoomlevel.");


 

Any more questions please feel free to let me know.
 
Thanks.
 
Yale

 



Yale,


Thanks for all the great feedback and sample. The outlined approach for legends is great for static map legends providing just for display, but what about the more dynamic legend control that is illustrated in MapSuiteExplorer. This is necessary for any worthy end user mapping application. I can see the approach and am willing to create my own solution, but would rather not reinvent the wheel. Is ThinkGeo willing to share the legend they developed for MapSuiteExplorer.


Any feedback is greatly appreciated.


Eric



Eric, 
  
 We are working on enhancement for MapSuiteExplorer, but it’s a big project in the future, you can not see any change immediately. I think add a legend on it is a good idea, we will consider it. 
  
 Maybe Yale or someone else will give you more information about your question. 
  
 And please let me know if you have more suggestion for our products. 
  
 Thanks 
  
 James 


James,


I am a little confused. You mention that "add a legend on it is a good idea". The Map Suite Explorer I have has a legend. By legend I mean the layer control. The ability to turn layers on and off, change the style, reorder. This is what I was refering to. More of an application legend, than a map legend. I am interested in the application layer control that Map Suite Explorer already has.


Eric



1 Like

 I let you know that today we posted a Code Community project on display  a Legend for your map. The type of Legend you will see in that project is not interactive where you can change the styles, reorder the layers etc but I think you and other users should still find it interesting.

Having a fully interactive Legend as you have the expectation is a major undertaking and in the future we will post Legends similar to the one you can find the Map Suite Explorer.


code.thinkgeo.com/projects/show/legendadornment


 



Thaks for the info Val.


I assume that the existing functionality of the Map Suite Explorer legend (or layer control) is not easily or willingly illustrated. I will endeavor to create my own and if I come up with something usable will post it here. The intended approach would be a Usercontrol that displays a list of dynamically created child controls, see where I can get with that.


Eric



Eric, 
  
 Thanks for you mention that, we are expecting that you post your code here. 
  
 Please let us know if you encouter any problem when you create your own. 
  
 Thanks 
  
 James

Dear Sirs,
Sorry if I revive this old topic, but I have not found anything about it.
I am considering replacing the ActiveX MapObjects in our old VB.Net application with the ThinkGeo component.
Also, I would like to use the ThinkGeo Core component in our new C # application in the future.
So I wanted to know if a dynamic legend object is now available as intended by Eric.

I am a little confused. You mention that" add a legend on it is a good idea ". The Map Suite Explorer I have has a legend. By legend I mean the layer control. The ability to turn layers on and off, change the style, reorder. This is what I was refering to. More of an application legend, than a map legend. I am interested in the application layer control that Map Suite Explorer already has.

In addition, our application must display AutoCAD, Shapefile, ECW layers, connect to OpenStreetMap maps and view moving vehicles. But these functions seem to be handled correctly by the ThinkGeo component.

Thanks in advance
Best Regards

Hi Matteo,

Thanks for interest in our products.

We have LegendAdornmentLayer to render Legend from older version, you can view our samples here: https://github.com/ThinkGeo?utf8=✓&q=legend&type=&language=

CAD, Shapefile, ECW and OpenStreetMap are supported also.

If you want to learn more about our products you can view our website or wiki: https://wiki.thinkgeo.com/wiki/

Any question please feel free to let us know.

Regards,

Ethan