如何限制 mapbox MGLMapView 中的地图边界?
How to limit map bounds in mapbox MGLMapView?
我正在使用 mapbox-iOS-SDK 3.2.3
,但找不到任何类似的属性或类似的东西来控制地图边界。我需要限制用户的可见区域。在当前的 SDK 版本中可以吗?
当前版本的 Mapbox 中没有任何内置功能看起来可以满足您的要求。您可能可以在
之前得到类似的东西
- 在地图视图委托中实施
mapViewRegionIsChanging:
或 mapView:regionDidChangeAnimated:
- 在那些方法中,检查当前区域。如果它在所需区域之外,请将地图视图重置为所需区域内的某个内容。也就是说,一旦地图视图开始移出区域,就让它返回。
这可能会起作用,但如果用户试图滚动到目标区域之外,它可能会使视图 "stutter"。我不知道你的应用程序做了什么,但可能值得考虑 (a) 这是否真的有必要,以及 (b) 是否有比限制地图视图滚动更好的方法来避免你期望的任何问题。
我从 中吸取了想法并实现了委托,目的是查看在将用户保持在已知 Mapbox 范围内的同时有多少卡顿或动画卡顿。我赞成他的回答,但也想分享这个例子。
这里是 Swift 委托,填写 mapViewRegionIsChanging
的委托
- 主要目标是测试体验是否仍令客户满意(是)
- 委托能否在不频繁调用委托的情况下将用户适当地保持在范围内? (还有待验证)
- 使用 Balboa Park 作为方形 Mapbox
MGLCoordinateBounds
- 仅检查客户是否向北滚动太远
- 概念太远了被一些公差检查了,
epsilon
在四个方面检查越界应该很简单
func mapViewRegionIsChanging (mapView: MGLMapView) {
let viewBounds = mapView.visibleCoordinateBounds
// Set the map's bounds to Balboa Park, San Diego
let boundsBalboaPark = MGLCoordinateBounds(
sw: CLLocationCoordinate2D(latitude: 32.71942, longitude: -117.15914),
ne: CLLocationCoordinate2D(latitude: 32.74093, longitude: -117.13374))
let deltaNorth = viewBounds.ne.latitude - boundsBalboaPark.ne.latitude
let epsilon = 0.025 // Magic number for tolerance of how far 'north' we allow (in degrees); Q.E.D meters
if( deltaNorth > epsilon) {
mapView.setVisibleCoordinateBounds(boundsBalboaPark, animated: true)
}
}
此动画显示将 mapView 移到巴尔博亚公园以北太远的地方。您看到的口吃是真实的,但可以接受。
我正在使用 mapbox-iOS-SDK 3.2.3
,但找不到任何类似的属性或类似的东西来控制地图边界。我需要限制用户的可见区域。在当前的 SDK 版本中可以吗?
当前版本的 Mapbox 中没有任何内置功能看起来可以满足您的要求。您可能可以在
之前得到类似的东西- 在地图视图委托中实施
mapViewRegionIsChanging:
或mapView:regionDidChangeAnimated:
- 在那些方法中,检查当前区域。如果它在所需区域之外,请将地图视图重置为所需区域内的某个内容。也就是说,一旦地图视图开始移出区域,就让它返回。
这可能会起作用,但如果用户试图滚动到目标区域之外,它可能会使视图 "stutter"。我不知道你的应用程序做了什么,但可能值得考虑 (a) 这是否真的有必要,以及 (b) 是否有比限制地图视图滚动更好的方法来避免你期望的任何问题。
我从
这里是 Swift 委托,填写 mapViewRegionIsChanging
的委托- 主要目标是测试体验是否仍令客户满意(是)
- 委托能否在不频繁调用委托的情况下将用户适当地保持在范围内? (还有待验证)
- 使用 Balboa Park 作为方形 Mapbox
MGLCoordinateBounds
- 仅检查客户是否向北滚动太远
- 概念太远了被一些公差检查了,
epsilon
在四个方面检查越界应该很简单
func mapViewRegionIsChanging (mapView: MGLMapView) { let viewBounds = mapView.visibleCoordinateBounds // Set the map's bounds to Balboa Park, San Diego let boundsBalboaPark = MGLCoordinateBounds( sw: CLLocationCoordinate2D(latitude: 32.71942, longitude: -117.15914), ne: CLLocationCoordinate2D(latitude: 32.74093, longitude: -117.13374)) let deltaNorth = viewBounds.ne.latitude - boundsBalboaPark.ne.latitude let epsilon = 0.025 // Magic number for tolerance of how far 'north' we allow (in degrees); Q.E.D meters if( deltaNorth > epsilon) { mapView.setVisibleCoordinateBounds(boundsBalboaPark, animated: true) } }
此动画显示将 mapView 移到巴尔博亚公园以北太远的地方。您看到的口吃是真实的,但可以接受。