2016-06-22 2 views
2

Я использую mapbox-iOS-SDK 3.2.3 и не может найти никаких свойств или smth, подобных этому, для управления границами карты. Мне нужно ограничить видимую область для пользователя. Возможно ли это в текущей версии SDK?Как ограничить границы карты в картотеке MGLMapView?

+0

Я не уверен, я понимаю, что вы пытаетесь сделать. –

+0

Я хочу установить границы для карты, например, для отображения только одного города. Таким образом, пользователь может масштабировать, панорамировать и делать обычные вещи с помощью этой карты, но только в ограниченной области. – ShurupuS

+0

Теперь у Mapbox есть встроенное решение: https://www.mapbox.com/ios-sdk/examples/constraining-gestures/ – Stonetip

ответ

3

В текущей версии Mapbox нет ничего, что бы выглядело так, как будто оно будет делать то, что вы хотите. Вы могли быть в состоянии получить что-то вроде него

  1. Реализации mapViewRegionIsChanging: или mapView:regionDidChangeAnimated: в картографическом делегате
  2. В этих методах, проверьте текущий регион. Если он находится за пределами желаемой области, сбросьте вид карты на что-то внутри желаемого региона. То есть, как только представление карты начнет перемещаться за пределы региона, верните его обратно.

Это, вероятно, будет работать, но это может сделать представление «заикание», если пользователь пытается прокрутить за пределы целевой области. Я не знаю, что делает ваше приложение, но может быть целесообразно рассмотреть (а), действительно ли это необходимо, и (б) может ли быть лучший способ избежать любой проблемы, которую вы ожидаете, чем ограничивать прокрутку карты.

+0

Хорошо, как я вижу, проблема шире и точно такая же, как в MapKit , Хорошо, я попытаюсь использовать методы делегата для решения этой проблемы. К сожалению, это одно из основных требований к каркасной структуре наших клиентов. Спасибо за вашу помощь! – ShurupuS

+1

Это ракурс с открытым исходным кодом, поэтому вы всегда можете посмотреть на добавление собственных методов делегата (возможно, добавить метод 'toMapViewRegionChange') или другие средства для получения того, что вы хотите. –

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

+0

Я бы предположил, что вместо того, чтобы прыгать обратно в исходное местоположение центра, вы могли бы вернуться обратно достаточно, чтобы оставаться в пределах желаемых границ. Это значительно снизит скачок. –

+0

Согласен. И еще одна хорошая идея - оживить минимальный масштаб просмотра, поэтому клиент может получить опыт переориентации себя. – RobLabs

Смежные вопросы