ThinkGeo.com    |     Documentation    |     Premium Support

How to compute the radius of a circle

Hi Tsui,


I construct a circle shape based on Polygon outring vertices. Then I need to find the radius of such a circle. I am not sure whether polygon.OutRing.GetDistanceTo method or other API method can be used to achieve this purpose.

 Could you shed light on this? Thanks a lot.


Regards,


Franklin


 


 



Franklin,


Thanks for your post; I just copied my feedback from the other thread here for this should be the place to answer.
 
Could you let me know how you construct a circle shape from a polygon shape? As I understand, when you construct it, the radius should be known, maybe I misunderstood something here.
 
Any all, following code snippet should get the radius for a circle, of course, you can use the Height instead of Width, and they should be exactly the same for circle.
 

EllipseShape circle;
double radius = circle.GetBoundingBox().Width / 2;

 
Any more questions or concerns please do not hesitate to let me know.
 
Thanks.
 
Yale

Hi Yale, 
  
   What will be the unit for the radius thus calculated? In my case, the circle is generated by a polygon.outring.vertices with equal polygon edge length. When the polygon vertices have sufficient quantity, the shape is a circle. So I guess probably the Poly.OutRing.GetBoundingBox.Width may serve the purpose. 
 However, the radius thus calculated is very small: 0.0166 (km?) . Something is wrong. 
  
 Franklin 
  


 Hi Franklin,


 


I guess you are using decimal degree as the unit of the map, right? If that is the case, then the number 0.0166 you got is in lon/lat unit too. Its actual length could be up to 1.85 kilometers (if it’s on the equator).


 


Here is some code that may help you to calculate the transverse radius:


RectangleShape boundingBoxOfCircle = circle.GetBoundingBox();


 


double y = (boundingBoxOfCircle.UpperLeftPoint.Y + boundingBoxOfCircle.LowerLeftPoint.Y) / 2;


double minX = boundingBoxOfCircle.LowerLeftPoint.X;


double maxX = boundingBoxOfCircle.LowerRightPoint.X;


 


PointShape point1 = new PointShape(minX, y);


PointShape point2 = new PointShape(maxX, y);


 


double length = DecimalDegreesHelper.GetDistanceFromDecimalDegrees(point1, point2, DistanceUnit.Kilometer);


double radius = length / 2;


 


Regards,


Tsui



Hi Tsui, 
  
    The method works fine. Thanks very much. 
  
 Regards, 
  
 Franklin

You are welcome. 
 Just let us know if you have any other issues. 
  
 Regards, 
 Tsui