【问题标题】:How to set MKMapView region to zoom to the accuracy of the userLocation?如何设置 MKMapView 区域以缩放到 userLocation 的准确性?
【发布时间】:2020-12-31 01:11:41
【问题描述】:

我有一个按钮,点击后应该会转到用户的当前位置。地图应以该坐标为中心并放大或缩小其位置,以便精确圆在屏幕上完全可见。这在 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。这将地图以预期的大致位置居中,但它没有设置正确的缩放级别,如下所示。第一个屏幕截图是运行代码的结果——你看不到精确圆,因为它放大得太远了。在第二个屏幕截图中,我手动缩小到所需区域以显示整个圆圈。 (忽略与用户位置无关的图钉。)

【问题讨论】:

  • let meters = max(location.horizontalAccuracy, location.verticalAccuracy, 250),那里的垂直精度在做什么?

标签: ios mapkit mkmapview cllocation


【解决方案1】:

至少

  • verticalAccuracy 是高度的精度,不应包含在纬度/经度跨度计算中。因为在您的示例中它是负面的,所以它不会影响结果,但在这里根本不适用。

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

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

产生:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多