ios - 如何在 iOS map 上叠加圆圈

标签 ios objective-c maps mapkit

我有半径和位置。

这就是我试图获取圆的边界矩形的方式。

- (MKMapRect)boundingMapRect{

    CLLocationCoordinate2D tmp;
    MKCoordinateSpan radiusSpan = MKCoordinateRegionMakeWithDistance(self.coordinate, 0, self.radius).span;
    tmp.latitude = self.coordinate.latitude - radiusSpan.longitudeDelta;
    tmp.longitude = self.coordinate.longitude - radiusSpanSpan.longitudeDelta;

    MKMapPoint upperLeft = MKMapPointForCoordinate(tmp);
    MKMapRect bounds = MKMapRectMake(upperLeft.x, upperLeft.y, self.radius * 2, self.radius * 2);

    return bounds;
}

MKMapRectMake(...) 似乎想要以 map 点为单位测量宽度和高度。如何将半径转换为该值?

最后我是这样渲染的:

MKMapRect theMapRect = [self.overlay boundingMapRect];
CGRect theRect = [self rectForMapRect:theMapRect];
CGContextAddEllipseInRect(ctx, theRect);
CGContextFillPath(ctx);

最终 map 上的半径似乎不等于米,而且距离似乎测量不正确。怎样做才是对的?

如果有任何提示,我将不胜感激。

最佳答案

您应该改用 MKCircle。做这样的事情:

CLLocationDistance fenceDistance = 300;
CLLocationCoordinate2D circleMiddlePoint = CLLocationCoordinate2DMake(yourLocation.latitude, yourLocation.longitude);
MKCircle *circle = [MKCircle circleWithCenterCoordinate:circleMiddlePoint radius:fenceDistance];
[yourMapView addOverlay: circle];

并采用下面的 MKMapViewDelegate 方法并执行如下操作:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay

{
     MKCircleView *circleView = [[[MKCircleView alloc] initWithCircle:(MKCircle *)overlay] autorelease];
     circleView.fillColor = [[UIColor redColor] colorWithAlphaComponent:0.9];
     return circleView;
 }

关于ios - 如何在 iOS map 上叠加圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16428918/

相关文章:

ios - 调用异步 API 时如何等待某些操作完成

android - 使用 react 抽屉导航在 iOS 上 react native 崩溃

ios - Firebase Messenger 发送通知,但 iOS 设备未收到任何消息

ios - 计算后 SKRoutingService 不缩放到路由

iOS 在位于 subview 中的 uitextfield 外部点击时隐藏键盘?

javascript - Google Maps API javascript V3 未捕获类型错误 : Type error

c# - 找出矩形内的长/纬度

go - 如何将数据添加到 Golang 中的 map map ?

ios - UICollectionView 单元格不设置移动动画

c++ - 使用 MoMu STK 进行音频合成