如何偏移地图中心

Posted

技术标签:

【中文标题】如何偏移地图中心【英文标题】:How to offset Map center 【发布时间】:2021-05-26 16:24:38 【问题描述】:

我有一个带有地图预览的应用,点击它后会全屏显示动画:

由于mapView底部的半透明条,我通过调用mapView.setVisibleMapRect(mapView.visibleMapRect, edgePadding: UIEdgeInsets(top: 0, left: 0, bottom: 50, right: 0), animated: false)设法偏移了地图的中心 地图完成后:

mapView.showsUserLocation = true
    
let regionRadius: CLLocationDistance = 700
let region = MKCoordinateRegion(center: location.coordinate, latitudinalMeters: regionRadius, longitudinalMeters: regionRadius)
mapView.setRegion(region, animated: true)

现在我想扩展mapView 以填满整个屏幕。 好消息是地图缩放和位置保持不变,只是框架扩展,完全符合预期(userPosition 仍然居中,但不可见,因为它就在半透明面板顶部的后面,只需比较地图):

不好的是,我希望地图中心位于蓝色框和半透明面板之间。问题是,当我尝试偏移地图以在地图新可见区域的中心显示用户位置时。 我需要再次使用函数setVisibleMapRect(据我了解)来设置新的edgePadding。但是我测试的所有内容都以地图放大或缩小结束,当我在展开和折叠状态之间跳转时,我越来越缩小。

所以我搜索了一种方法来稍微偏移地图以正确显示用户位置,例如mapView.setEdgePadding(UIEdgeInsets(...), animated: true) 或者我需要一种方法来根据当前缩放级别和新框架计算正确的MKMapRect,这样我就可以使用setVisibleMapRect 函数而不更改地图缩放级别。

我想要的结果:

【问题讨论】:

【参考方案1】:

如果您希望用户更加动态地居中,请考虑

mapView.setUserTrackingMode(.followWithHeading, animated: animated)

mapView.setUserTrackingMode(.follow, animated: animated)

这可以改变缩放级别。

如果您只想设置用户位置的中心,请尝试

var region  = mapView.region
region.center = userLocation
mapView.setRegion(region, animated: true)

这不应该改变缩放级别

【讨论】:

问题是不在地图中心显示用户位置。我需要告诉地图,它的视图的一部分是可见的,应该在其中定义中心。 你有没有试过“如果你想设置用户位置的中心,只尝试一次”之后的部分? 是的,我已经有了这个。我更新了我的问题以获取更多信息。 我是否理解正确,您给地图的像素更少,而 mapView 使地图 content 更小,因此您看到的区域与以前相同?

以上是关于如何偏移地图中心的主要内容,如果未能解决你的问题,请参考以下文章

如何更改/偏移Mapbox GL JS中的摄像机中心点?

如何正确偏移 MKMapRect

加载百度地图之后 中心为位置有点偏移

为移动目标 lat/lng 和缩放级别的动画偏移地图片段的中心

解决百度地图中心偏移到左上角

百度地图缩放偏移