MKMapView - 如何计算半径符合设置

问题描述:

我在MKMapView上画一个圆。但是,如何计算此圆的半径,使其等于用于首先绘制圆的半径的值?MKMapView - 如何计算半径符合设置

func setArea(_ center:CLLocationCoordinate2D, radius:CLLocationDistance) { 

    let area = MKCircle(center:center, radius:radius/LocationViewController.kRadiusInset) 
    mapView.setVisibleMapRect(mapView.mapRectThatFits(area.boundingMapRect), animated:false) 
} 

我试过以下,但它很略高于radius传递给setArea较大的返回值。它计算从地图中心到左边缘的距离。

// getRadius 
let distance = middle.distance(from: edge) 
let middle = CLLocation(latitude: mapView.region.center.latitude, longitude: mapView.region.center.longitude) 
let edge = CLLocation(latitude: mapView.region.center.latitude, longitude: mapView.centerCoordinate.longitude - (mapView.region.span.longitudeDelta * 0.5)) 

let distance = middle.distance(from: edge) 

如果我通过在“4000”米setArea(),然后再把计算地图的半径(比如,内mapViewDidFinishRenderingMap()我得到4010.61219348448

为什么不一致?

我更换了使用的MKCircle与以下内容:

let region = MKCoordinateRegionMakeWithDistance(center, radius * 2, radius * 2) 
mapView.region = region 

这是不准确的。半径== 4000馈入此在设置我的MKMapView的region后,我得到4000.00048143541。这种差异将蔓延到用户界面,但几乎不像我的第一种方法那么快。

任何人都可以靠近吗?