ThinkGeo.com    |     Documentation    |     Premium Support

WPF EllipseShape issue

 Hello ThinkGeo,


 


I am Drawing EllipseShape with 2.5 radius measured in miles and output of the map is rendered circle shape as  oval shape.Our map projections are in DecimalDegree.


double centerX = -74.34768;


double centerY = 40.51231;


 

    PointShape ptCenter = new PointShape(centerX, centerY);


EllipseShape circleShape=null


      circleShape = new EllipseShape(ptCenter, 2.5,GeographyUnit.DecimalDegree,DistanceUnit.Mile);


 


PS: What I observed was drawing -   EllipseShape(ptCenter, 2.5) -  with out specifying 


distanceUnit.Mile  and ,GeographyUnit.DecimalDegree draws correctly .I want to specify radius with miles.


Appreciate your help on this and I send screen output as attachment to forumsupport@thinkgeo.com



 Hi GS,


 
Every shape's x coordinate will be stretched in high latitude if the GeographyUnit and DIstanceUnit do not match. When you set the pointshape as (0,0), the shape will be drawn as a circle, and the bigger the latitude is, the more flat the shape will be.
 
Thanks,
 
Edgar
 

 


 


 


Thanks fo the reply.


  


I understand what you are  saying...but how would by point shape circle will display if I set 0, 0?? In the attached example...I'm using ThinkGeo cloud with DecimalDegree projection and here is an attached example that I stated before as EllipseShape rendering as Oval shape and not as Circle. When you run  the example... you can see label rendered as "Oval" ,and zoom deeper   to see the stated problem.


 Clearly, there is a issue here ....while rendering Elllipse shape radius(2.5) and with combination of distanceunit (DistanceUnit.Miles).


 


 


 



001_SimpleEllipse_Radius.txt (4.21 KB)

 GS,


Sorry, I didn't say it clearly, but this is not an issue, like I said in my last reply, if the GeographyUnit does not match the DistanceUnit, the drawing ellepse should be oval, the constructor EllipseShape(PointShape point, double radius) returns an ellipse that the GeographyUnit and DistanceUnit are the same and match the map unit, so it draws a circle when you use this constructor. Here are the drawing shapes in different latitude.


centerX = 0, centerY = 0



 


centerX = 0, centerY = 40



 


centerX = 0, centerY = 80



 


Regards,


Edgar



 


 Edgar,


 


Thanks for detail info with screenshots.


 


circleShape = new EllipseShape(ptCenter, dRadius,GeographyUnit.DecimalDegree,DistanceUnit.Mile);


 My requirement:Using DecimalDegree projections....I want to render circle shape irrespective of x or y position and with  radius 2.5  in miles ...how should I achieve this??Please I need your  team help on this...In our app...this is very critical functionality to re-solve it.


 So if you see observe my attached code ..... GeographyUnit.DecimalDegree and DistanceUnit. Miles are not same, and that's why its drawing oval instead of a circle based on pointshape x and y positions???do you see any issue in my code??


 


 



GS, 
  
 Sorry to tell you that the ellipse will not be drawn as a circle in your scenario, because your map unit is decimal degree, e.g. at 85° N, it needs 0.414° to represent 2.5 miles, but at 89° N, it needs 2.06°. So the ellipse’s shape must be changed base on the x and y positions. If you want it to be a circle, you can get the degree length of 2.5 miles, which is 0.03593° at (0°, 0°), and change the constructor to new EllepseShape(centerpoint, 0.03593);, but its real coordinates will get more and more inaccurate when the latitude value goes up. 
  
 Hope it helps, 
  
 Edgar



Edgar,


 


Thanks for this...I  know Ellipseshape with DecimalDegrees were not converting right ...while specifying in DistanceUnit in Miles,  and that's why I want to confirm on this. 


 


 What other options do I have to achieve my requirement??? Does thinkgeo have some kind of conversion methods to convert radian 2.5 to  0.35??Because,  our radian factor is very dynamic and its not always 2.5...Just curious.


 





GS,


 
In your scenario, you can try this method:
 
double degreeLength = DecimalDegreesHelper.GetLongitudeDifferenceFromDistance(2.5, DistanceUnit.Mile, 40.51231); // result is 0.036
 
Hope it helps,
 
Edgar



Edgar,


This is what I was targeting to find. Thank you very much.


One last question on this:


 


I was using what you recommend for GetLongitudeDifferenceFromDistance() . So, do I  need to  use GetLatitudeDifferenceFromDistance() also for this???





GS,


 
Actually, we suggest you to use the GetLongitudeDifferenceFromDIstance(), like I said in my previous replies, the return value will change according to the latitude value, so it will be more accurate in your scenario. But in method GetLatitudeDifferenceFromDIstance(), no matter what longitude is, the return value will not change, we noticed this and obsoleted the API: public static double GetLatitudeDifferenceFromDistance(double distance, DistanceUnit distanceUnit, double longitude), and replaced it with the new one: public static double GetLatitudeDifferenceFromDistance(double distance, DistanceUnit distanceUnit).
 
 
Regards,
 
 
Edgar

Edgar,


 Good to know that and Thanks.


 


 



Hello GS, 
  
 You are welcome, please feel free to let us know your questions. 
  
 Regards, 
  
 Gary