ThinkGeo.com    |     Documentation    |     Premium Support

Problem with Show Legend AdornmentOverlay

Good day, I’m new in using MVC and can not figure out what’s wrong with my code? Please tell what’s wrong with my code below and also experiencing error with JScript and using v7.0 of Mapsuite: Thanks!



 Microsoft JScript runtime error: Unable to get value of the property ‘toUpperCase’: object is null or undefined



Code:

ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(@“C:\MVC\KSA.shp”);

worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.Green));

worldLayer.Open(); 

RectangleShape rect = worldLayer.GetBoundingBox();

worldLayer.Close();


 // Create a legend item for the title.

LegendItem title = new LegendItem();

title.TextStyle = new TextStyle(“Map Legend”, new GeoFont(“Arial”, 10, DrawingFontStyles.Bold), new GeoSolidBrush

GeoColor.SimpleColors.Black));


 // Create a legend item for the borders. This example uses a modified LineStyle.

LegendItem legendItem1 = new LegendItem();

LineStyle stateBorderStyle = new LineStyle();

stateBorderStyle.OuterPen.DashStyle = LineDashStyle.Dash;

stateBorderStyle.OuterPen.Width = 2;

stateBorderStyle.OuterPen.Color = GeoColor.FromArgb(255, 156, 155, 154);


 legendItem1.ImageStyle = stateBorderStyle;

legendItem1.TextStyle = new TextStyle(“Borders”, new GeoFont(“Arial”, 8), new GeoSolidBrush(GeoColor.SimpleColors.Black));



LegendItem legendItem2 = new LegendItem();

legendItem2.ImageStyle =AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(255, 167, 204, 149));

legendItem2.TextStyle = new TextStyle(“Desserts”, new GeoFont(“Arial”, 8), new GeoSolidBrush(GeoColor.SimpleColors.Brown));


 // Create A legend item for the airports. This example uses a .png file.

LegendItem legendItem3 = new LegendItem();

legendItem3.ImageStyle = new PointStyle(new GeoImage(@"…\Resources\airport_small_size3.png"));

legendItem3.TextStyle = new TextStyle(“Airports”, new GeoFont(“Arial”, 8), new GeoSolidBrush(GeoColor.SimpleColors.Black));


 // Create the LegendAdornmentLayer and add the LegendItems.

LegendAdornmentLayer legendLayer = new LegendAdornmentLayer();

legendLayer.BackgroundMask = AreaStyles.CreateLinearGradientStyle(new GeoColor(255, 255, 255, 255), new GeoColor(255, 230, 230, 230), 90, GeoColor.SimpleColors.Black);

legendLayer.LegendItems.Add(legendItem1);

legendLayer.LegendItems.Add(legendItem2);

legendLayer.LegendItems.Add(legendItem3);

legendLayer.Height = 125;

legendLayer.Title = title;

legendLayer.Location = AdornmentLocation.LowerLeft;


 AdornmentOverlay adornmentOverlay = new AdornmentOverlay(“MapL”);

adornmentOverlay.Layers.Add(“LengendLayer”, legendLayer);


 

 Html.ThinkGeo().Map(“Map1”, new System.Web.UI.WebControls.Unit(100, System.Web.UI.WebControls.UnitType.Percentage), 510)

.MapUnit(GeographyUnit.DecimalDegree) 

.MapBackground(new BackgroundLayer(new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"))))

.CustomOverlays(overlays => 

{  


ShapeFileFeatureLayer citiesLayer = new ShapeFileFeatureLayer(@“C:\MVC\all_poi.shp”);

citiesLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.PointType = PointType.Character;

citiesLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.CharacterFont = new GeoFont(“Riyadh Xplorer”, 18);

citiesLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.CharacterIndex = 49;

citiesLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.CharacterSolidBrush = new GeoSolidBrush(GeoColor.StandardColors.Red); citiesLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.SymbolPen = new GeoPen(GeoColor.FromArgb(255, GeoColor.StandardColors.Black), 1); 

citiesLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

citiesLayer.DrawingMarginPercentage = 100;



overlays.LayerOverlay().Layer(worldLayer).IsBaseOverlay(false);

overlays.LayerOverlay(“StaticOverlay”).IsBaseOverlay(false).Layer(“CitiesLayer”, citiesLayer);


overlays.AdormentOverlay(“MapL”).Layer(“LengendLayer”, legendLayer);


 })


{


 })


 .Render(); 


 } 




Hello I have identified the problem and was able to make it work, but the show legend disappearing everytime move /pan the map. 

I found a topic: LegendAdornmentLayer is Moving and Popping up; with the same problem, but the forum said it’s already fixed the problem with the lastest version. I currently using VS2010 MVC 3  and using the MapSuite v7.



I used the workaround javascript provided in the code and I working ok.



Please into the matter… Thanks!




Hi Manolo, 



Thanks for your post and welcome to Map Suite Forums! 



This bug is a bit of complex to fix in a short time and glad to hear the walk around work and here is another workaround for your information 



could you please try to use the LayerOverlay to replace the AdornmentOverlay before its’ fixed?  



overlays.LayerOverlay("AdormentOverlay").IsBaseOverlay(false).Layer("adormentLayer",legendLayer); 



Best Regards, 



Summer 


Thanks Summer, when I use the layeroverlay it show multiple legend on the map. Hope you will solve the bug in the future… 
  
 Thanks again! 
 Manolo  
  


Hi Manolo,  
  
 You are always welcome and we will fix the bug once we have enough resource, if you have any more question , please feel free to let us know. 
  
 Best Regards 
  
 Summer

Hi Manolo, 



Sorry for the waiting. Now, this issue have been fixed since the development dll packages(7.0.315.0 or higher). please got it and have a double check. And here is the code for you to test.



Hope it helps for you. 

Regards, 

Troy

DisplayALegend.txt (2.88 KB)

Hello, 
  
 I am also getting the following javascript error: 
  
 Unhandled exception at line 170, column 17 in localhost:44301/parser_GeoResource.axd 
 0x800a138f - JavaScript runtime error: Unable to get property ‘toUpperCase’ of undefined or null reference 
  
 I have used the “DisplayALegend.txt” code above almost verbatim and I’m still getting the error.  I’m running ThinkGeo 8.0 in MVC. 
  
 Am I possibly missing a javascript file? If so, which one? 
  
 Thanks, 
 Brian 


Hi Brian, 
  
 Please open our HowDoISamples project, copy the code in DisplayALegend.txt and replace it to BackgroundMapsController.cs, then directly run the project and view Display a Simple Map. 
  
 If you still met the same exception, that meant this caused by some environment reason but not the code reason. 
  
 Please make sure this first. 
  
 Regards, 
  
 Don