将 MKCircle 半径转换为 ​​CoreGraphics 圆弧半径

发布于 2024-12-18 04:38:31 字数 684 浏览 3 评论 0原文

如何将 MKCircle 的半径(以米为单位)转换为可用于使用 MKOverlayPathView 子类中的核心图形绘制圆的值?

在下面的代码中,半径被硬编码为 50,但我需要它来反映 MKCircle 的半径。

对于位置,我使用 MKMapPointForCooperative() 将 MKCircle 的坐标转换为 MKMapPoint,然后使用 MKOverlayPathView 的 pointForMapPoint: 将 MKMapPoint 转换为点。但是如何将 MKCircle 的半径转换为相对距离呢?

MKCircle *circle = [self circleForLocation:location]; 
CGPoint relativePoint = [self pointForMapPoint:MKMapPointForCoordinate(circle.coordinate)];
float radius = 50;

//Fill
[self applyFillPropertiesToContext:context atZoomScale:zoomScale];
CGContextAddArc(context, relativePoint.x, relativePoint.y, radius, 0, 2*3.1415926535898, 1);
CGContextDrawPath(context, kCGPathFill);

How can I convert an MKCircle's radius (in meters) into a value I can use to draw a circle using core graphics in an MKOverlayPathView subclass?

In the following code the radius is hardcoded to 50 but I need it to reflect the radius of the MKCircle.

For the position I use MKMapPointForCoordinate() to convert the MKCircle's coordinate to an MKMapPoint, then convert the MKMapPoint to a point using MKOverlayPathView's pointForMapPoint:. But how can I convert the MKCircle's radius into a relative distance?

MKCircle *circle = [self circleForLocation:location]; 
CGPoint relativePoint = [self pointForMapPoint:MKMapPointForCoordinate(circle.coordinate)];
float radius = 50;

//Fill
[self applyFillPropertiesToContext:context atZoomScale:zoomScale];
CGContextAddArc(context, relativePoint.x, relativePoint.y, radius, 0, 2*3.1415926535898, 1);
CGContextDrawPath(context, kCGPathFill);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

滿滿的愛 2024-12-25 04:38:31

MKCircle 的 boundingMapRect 的高度和宽度应等于圆的直径:

CGRect boundingRect = [self rectForMapRect:circle.boundingMapRect];
CGFloat radius = boundingRect.size.width / 2;

The height and width of the MKCircle's boundingMapRect should be equal to the circle's diameter:

CGRect boundingRect = [self rectForMapRect:circle.boundingMapRect];
CGFloat radius = boundingRect.size.width / 2;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文