如何设置 MKMapView 区域缩放到 userLocation 的精度?

How to set MKMapView region to zoom to the accuracy of the userLocation?

我有一个按钮,点击后应该会转到用户的当前位置。地图应以该坐标为中心并放大或缩小其位置,以便准确度圆圈在屏幕上完全可见。这在 iOS 14 上尤为重要,他们可能不会授予访问其精确位置的权限,在这种情况下圆圈非常大。

目前我有:

if let location = mapView.userLocation.location {
    let meters = max(location.horizontalAccuracy, location.verticalAccuracy, 250)
    mapView.setRegion(MKCoordinateRegion(center: location.coordinate, latitudinalMeters: meters, longitudinalMeters: meters), animated: true)
}

运行 此代码现在已禁用精度,horizontalAccuracy 为 9633,verticalAccuracy 为 -1。这会按预期将地图居中放置在它们的大致位置上,但它不会设置正确的缩放级别,如下所示。第一个屏幕截图是 运行 代码的结果 - 您看不到精确的圆圈,因为它放大得太远了。在第二张截图中,我手动缩小到所需区域以显示整个圆圈。 (忽略与用户位置无关的 pin。)

至少

  • verticalAccuracy是高度的准确度,不应包含在latitude/longitude跨度计算中。因为它在你的例子中是负的,所以它不影响结果,但它在这里根本不适用。

  • 您应该将精度乘以二,因为 horizontalAccuracy 是围绕用户估计的用户位置的圆的半径,您可能希望它包含整个圆。我还会在这个圆圈周围添加一些边距(我使用了 25%)以使其在视觉上呼吸:

    let meters = max(location.horizontalAccuracy * 2 * 1.25, 250)
    

结果: