ThinkGeo.com    |     Documentation    |     Premium Support

How to draw complex shapes

Hi all,



I’m new to this and I have a problem which I can’t solve.



Based on the sample codes, most of the shapes are based on images; which is not what I want.



I’ve a complicated shape created in C#. The shape is drawn by using Geometry (System.Windows.Media). And the  shape will move based on the coordination provided by the input.



I would like to bring that shape into the layers, but I’m clueless which API to use.



Any suggestions?



Thank You.

Hi Joseph, 
  
 System.Windows.Media.Geometry is a shape based on screen coordinate, it cannot be converted to world coordinate exception you provide something like world file for it. 
  
 You can tried to add Geometry as child control to our marker.content, but you need to adjust its xoffset and yoffset. This can help you locate your shape on map, it can move follow map pan. 
  
 The other problem is, when you zoom in/out, the shape won’t follow map zoom because it’s not created by world coordinate. 
  
 Regards, 
  
 Don

Hi Don,



I solve the issue, by providing the points to the PolyShape. Like you said another issue is the map zoom. 



Is there any suggestion for not allow the symbol remain the same when the map is zoom?



Regards,

Joseph

Hi Joseph, 
  
 I think you need to convert symbol to our shape, which is better for show on map. 
  
 If you want to make symbol follow map zoom, you have to write your logic, which work for resize the symbol follow the changing scale.  
  
 I think it’s a hard work, and we don’t have related API and sample. 
  
 Regards, 
  
 Don

Ok, I’ve solve the problem of zooming. Actually it should be scaling. Etc, once declare the symbol as PolyShape. And then scale according to the zoom. 
  
 Next step is how do I get the zoom level in order to customize the scale…

Hi Joseph, 
  
 By default we have 20 zoom levels, you can get related scale like this: 
  
 new ZoomLevelSet().ZoomLevel01.Scale 
  
 And for currently scale you can get or set it here: 
  
 Map1.CurrentScale 
  
 Wish that’s helpful. 
  
 Regards, 
  
 Don