如何解决如何设置MKMapView区域以缩放到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。这会使地图按预期的大致居中放置在中心位置,但未设置正确的缩放级别,如下所示。第一个屏幕截图是运行代码的结果-您看不到精度圈,因为它放大了太多。在第二张屏幕截图中,我已手动缩小到所需区域以显示整个圆圈。 (忽略与用户位置无关的图钉。)
解决方法
至少
-
verticalAccuracy
是海拔高度的精度,不应包含在纬度/经度跨度计算中。因为在您的示例中它为负,所以它不会影响结果,但是在此根本不适用。 -
您应该将精度乘以2,因为
horizontalAccuracy
是围绕用户的估计用户位置的圆的半径,并且您可能希望它包含整个圆。我还将在这个圆圈周围添加一些边距(我用了25%),以使其视觉上可以呼吸:let meters = max(location.horizontalAccuracy * 2 * 1.25,250)
结果是:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。