ThinkGeo.com    |     Documentation    |     Premium Support

Polygon Draw on Map

How to draw Polygon on the map from given vertices? I refered your sample codes. I found one sample that mach my requirement DataProvider->Create InMemoryFeatureLayer. Using this example i can display polygon but i could not see map? I dont know much about ThinkGeo. Can u plz  provide me related code?



We have a project in the Code Community, Create Polygon Programatically, that shows how to build polygons from given vertices. I hope this is going to help you.


code.thinkgeo.com/projects/show/createpolygons



I have taken project from given link but this project is window base. Some properties that are used in window base which i could not found in web base application. i.e. OpenAllLayers, CloseAllLayers, etc… 
  
 So can u plz suggest me what should i do to solve this prob? 


Hi, Badal



I guess that you have used the StaticOverlay to load InMemoryFeatureLayer; that's the reason why you couldn't see the map.

The StaticOverlay of map is base overlay by default; so please change the code to use DynamicOverlay to load InMemoryFeatureLayer. Please refer to the code below:



Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));
Map1.CurrentExtent = new RectangleShape(-51, 121, 149, -13);
Map1.MapUnit = GeographyUnit.DecimalDegree;

WorldMapKitWmsWebOverlay overlay = new WorldMapKitWmsWebOverlay();
Map1.CustomOverlays.Add(overlay);

Map1.MapTools.OverlaySwitcher.Enabled = true;

InMemoryFeatureLayer inMemoryLayer = new InMemoryFeatureLayer();
inMemoryLayer.InternalFeatures.Add("Polygon", new Feature(BaseShape.CreateShapeFromWellKnownData("POLYGON((10 60,40 70,30 85, 10 60))")));

inMemoryLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.FillSolidBrush.Color = GeoColor.FromArgb(100, GeoColor.StandardColors.RoyalBlue);
inMemoryLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.StandardColors.Blue;
inMemoryLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
Map1.DynamicOverlay.Layers.Add(inMemoryLayer);

Also you could enable the OverlaySwitcher map control to see what overlays has been added to map. Please refer to the code above.


Thanks,


Khalil




I got error from above code.....Infact I actually want to pass dynamic value form database for polygon 



 


 



Server Error in '/ThinkGeoSample' Application. 


If you use the CustomOverlays collection you may not at the same time use the following properties:  BackgroundOverlay, StaticOverlay, DynamicOverlay or MarkerOverlay.  CustomOverlays was designed to replace these so that you can implement as many overlays as you need in any order.  Trying to use CustomerOverlays and one of the properties above is not allowed as there is not a definitive logical order we could draw them in.  Please reference to the documentation of CustomOverlays property for more information.




Badal, 
  
 Please get the latest DLL Package from the link below: 
 helpdesk.thinkgeo.com/ 
  
 We have removed this exception message a few month ago. So this message won’t occur in the latest one. Please have a try for that. 
  
 Thanks, 
 Khalil

Hi Khalil, 
  
 I have downloaded Free Trial version of your Web Edition 3.0. I have also downloaded DLL - WebEditionEvaluation3.1.299.157DllPackage.zip  from your given link and replace those DLLs in my project. But still I got same error. 
  
 Thanks, 
 Badal

Badal, 
  
 I think you need to download the Daily Development Build whose version is 3.1.460.0 or later. 
 Sorry for the inconvenience to you. 
  
 Thanks, 
 Khalil

Hello Khalil, 
  
 for 3.x, there is no version greater than 3.1.299 in the Daily Development Build download section 
 And to try, I have added the  Daily Development Build whose version is 4.0 and still getting the same  error. 
  
 Thanks, 
 Badal

Badal,


It's weird. Just I have mentioned in the last reply; we have fixed this problem a few months ago. And the version 4.0 is the latest one and we will release that in a few days' time. So I guess that you don't refer to the latest dlls including WebEdition.dll and MapSuiteCore.dll. Anyway, please refer to the code below, and it could work in the version 3.1.299 or later.



Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));
Map1.CurrentExtent = new RectangleShape(-51, 121, 149, -13);
Map1.MapUnit = GeographyUnit.DecimalDegree;

WorldMapKitWmsWebOverlay overlay = new WorldMapKitWmsWebOverlay();
Map1.CustomOverlays.Add(overlay);

Map1.MapTools.OverlaySwitcher.Enabled = true;

InMemoryFeatureLayer inMemoryLayer = new InMemoryFeatureLayer();
inMemoryLayer.InternalFeatures.Add("Polygon", new Feature(BaseShape.CreateShapeFromWellKnownData("POLYGON((10 60,40 70,30 85, 10 60))")));

inMemoryLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.FillSolidBrush.Color = GeoColor.FromArgb(100, GeoColor.StandardColors.RoyalBlue);
inMemoryLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.StandardColors.Blue;
inMemoryLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.Layers.Add(inMemoryLayer);
layerOverlay.IsBaseOverlay = false;
Map1.CustomOverlays.Add(layerOverlay);

Thanks,

Zhang



Zhang, 
  
 Thanks a lot, above code is run successfully. But I got a below error when i pass actual longitude and latitude parameter in polygon. 
 Error:  
  "wellKnownTex:   
   Parameter name: The shape you provided does not pass our simple validation." 
  
 My Code: 
  
  if (!IsPostBack) 
         { 
             Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF")); 
             Map1.CurrentExtent = new RectangleShape(-51, 121, 149, -13); 
             Map1.MapUnit = GeographyUnit.DecimalDegree; 
  
             WorldMapKitWmsWebOverlay overlay = new WorldMapKitWmsWebOverlay(); 
             Map1.CustomOverlays.Add(overlay); 
  
             Map1.MapTools.OverlaySwitcher.Enabled = true; 
             string str = @"-123.719128131866 38.9237365722656,-123.718741893768 38.9240369796753,-123.717840671539 38.9246377944946 
                          -123.716681957245 38.9249811172485,-123.715952396393 38.9250240325928,-123.71470785141 38.9244661331177, 
                          -123.714021205902 38.9233932495117,-123.713463306427 38.9217624664307,-123.713463306427 38.920389175415, 
                          -123.713720798492 38.9191875457764,-123.713677883148 38.9175996780396,-123.713935375214 38.9161405563354, 
                          -123.715179920197 38.9148960113525,-123.71693944931 38.9145526885986,-123.719256877899 38.914252281189, 
                          -123.720844745636 38.9144668579102,-123.722818851471 38.9145097732544,-123.724492549896 38.914252281189, 
                          -123.726037502289 38.9135227203369,-123.728097438812 38.9131364822388,-123.72989988327 38.9127502441406, 
                          -123.730929851532 38.91335105896,-123.73101568222 38.9144668579102,-123.730243206024 38.9153680801392, 
                          -123.728912830353 38.9162693023682,-123.727153301239 38.9170846939087,-123.725265026093 38.9179430007935, 
                          -123.723248004913 38.9191875457764,-123.721445560455 38.9208183288574,-123.720587253571 38.922534942627, 
                          -123.719814777374 38.9232215881348,-123.719128131866 38.9237365722656"; 
             //string str = "-10 60,40 70,30 85, -10 60"; 
             InMemoryFeatureLayer inMemoryLayer = new InMemoryFeatureLayer(); 
             inMemoryLayer.InternalFeatures.Add("Polygon", new Feature(BaseShape.CreateShapeFromWellKnownData("POLYGON(("+str+"))"))); 
  
             inMemoryLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.FillSolidBrush.Color = GeoColor.FromArgb(100, GeoColor.StandardColors.RoyalBlue); 
             inMemoryLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.StandardColors.Blue; 
             inMemoryLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; 
  
             LayerOverlay layerOverlay = new LayerOverlay(); 
             layerOverlay.Layers.Add(inMemoryLayer); 
             layerOverlay.IsBaseOverlay = false; 
             Map1.CustomOverlays.Add(layerOverlay); 
 }

Hi, Badal



I find that you omit one comma at the sixth number; so the error occurs. Please refer to the code in the attachment.



Thanks,

Khalil



2014-CreateAnInMemoryFeatureLayer.zip (2.64 KB)

Thank a lot Khalil. Problem is resolved. 
  
 Thanks, 
 Badal

You are welcome. Let us know if you have more questions.