如何限制mapbox MGLMapView中的地图边界?

时间:2016-06-22 06:54:40

标签: ios swift mapbox

我使用mapbox-iOS-SDK 3.2.3并且无法找到任何属性或smth来控制地图边界。我需要限制用户的可见区域。在当前的SDK版本中是否可以使用?

2 个答案:

答案 0 :(得分:3)

当前版本的Mapbox没有任何内置功能,看起来它可以满足您的需求。您可能能够通过

获得类似的内容
  1. 在地图视图委托
  2. 中实施mapViewRegionIsChanging:mapView:regionDidChangeAnimated:
  3. 在这些方法中,检查当前区域。如果它在所需区域之外,请将地图视图重置为所需区域内的某些内容。也就是说,只要地图视图开始移动到该区域之外,就让它返回。
  4. 这可能会起作用,但它可能会使观看结果不稳定。如果用户试图滚动到目标区域之外。我不知道你的应用程序做了什么,但是可能值得考虑(a)这是否真的有必要以及(b)是否有更好的方法可以避免出现任何问题而不是限制地图视图滚动。 / p>

答案 1 :(得分:2)

我从@Tom Harrington接受了这个想法并实现了该委托,其目的是在将用户保持在已知的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移动到巴尔博亚公园以北太远。你看到的口吃是真实的,但可以接受。

enter image description here