#ios #mapbox #mapbox-gl
#iOS #mapbox #mapbox-gl
Вопрос:
У меня возникли некоторые проблемы с отображением фиксированной карты Ирландии с помощью Mapbox в ios на разных размерах экрана. Похоже, что MGLMapView.setVisibleCoordinates — это то, что мне нужно, но он ведет себя не так, как я ожидал. Я ожидаю передать нижнюю левую координату и верхнюю правую координату и определить прямоугольник для отображения независимо от размера экрана.
mapView.setVisibleCoordinates([CLLocationCoordinate2D(latitude: 50.347676, longitude: -11.444362), CLLocationCoordinate2D(latitude: 56.375322, longitude: -4.128659)], count: 2, edgePadding: UIEdgeInsets.zero, animated: false)
Я также пробовал
mapView.setVisibleCoordinateBounds(MGLCoordinateBounds(sw: CLLocationCoordinate2D(latitude: 50.347676, longitude: -11.444362), ne: CLLocationCoordinate2D(latitude: 56.375322, longitude: -4.128659)), edgePadding: UIEdgeInsets.zero, animated: false)
К тем же результатам, что и показано ниже. Как вы можете видеть, макет iphone 5s идеален, но я ожидаю, что приведенный выше код покажет тот же вид на ipad, однако он слишком сильно уменьшен. Как я могу показать один и тот же вид на разных устройствах?
Ответ №1:
Хорошо, у меня это получилось. В MGLMapView есть метод camera, который возвращает камеру, которая увеличивает масштаб настолько, насколько это возможно, при этом все еще отображая указанный вами прямоугольник. Просто нужно убедиться, что это сделано в didFinishLoading
методе делегирования.
let northeast = CLLocationCoordinate2D(latitude: 55.499130, longitude: -5.945938)
let southwest = CLLocationCoordinate2D(latitude: 51.133369, longitude: -10.531064)
let ireland = MGLCoordinateBounds(sw: southwest, ne: northeast)
let camera = mapView.camera(mapView.camera, fitting: ireland, edgePadding: UIEdgeInsets.zero)
mapView.setCamera(camera, animated: false)
Комментарии:
1. Это хорошее решение.
Ответ №2:
На веб-сайте Mapbox есть пример, который делает именно то (я думаю), что вы хотите. Я взял на себя смелость вставить ваши координаты и т.д., Как показано ниже. Ссылки прерываются, поэтому я опубликую код.
РЕДАКТИРОВАТЬ: изменено, чтобы запретить прокрутку, панорамирование и масштабирование.
import Mapbox
class ViewController: UIViewController, MGLMapViewDelegate {
private var ireland: MGLCoordinateBounds!
override func viewDidLoad() {
super.viewDidLoad()
let mapView = MGLMapView(frame: view.bounds)
mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
mapView.delegate = self
let northeast = CLLocationCoordinate2D(latitude: 56.375322, longitude: -4.128659)
let southwest = CLLocationCoordinate2D(latitude: 50.347676, longitude: -11.444362)
var box = [northeast, southwest]
mapView.setVisibleCoordinates(amp;box, count: 2, edgePadding: UIEdgeInsets.init(top: 20.0, left: 20.0, bottom: 20.0, right: 20.0), animated: false)
mapView.isScrollEnabled = false
mapView.allowsZooming = false
view.addSubview(mapView)
}
}
Комментарии:
1. Это не совсем работает, но я понимаю теорию. ipad по-прежнему слишком уменьшен, а iphone увеличен слишком сильно. Не могли бы вы поделиться ссылкой, по которой вы ее получили, в комментарии?
2. Я думаю, вы поняли это из руководства «Ограничить панорамирование карты областью». Моя карта вообще не является подвижной или масштабируемой, поэтому она должна быть просто фиксированным видом, показывающим Ирландию. Я все еще в поиске…
3. Ах, ладно, я неправильно понял. Если вам просто нужен статический вид Ирландии — без прокрутки, без масштабирования, это должен быть просто случай настройки вида и соответствующих свойств. Я исправлю свой ответ. РЕДАКТИРОВАТЬ: Только что проверил в тестовом приложении, и у меня оно работает как на iPad, так и на iPhone.
Ответ №3:
Это помогает мне увеличить определенную область в Mapbox
self.mapView.centerCoordinate = CLLocationCoordinate2D(latitude: lat, longitude: long)
self.mapView.zoomLevel = 13
self.mapView.centerCoordinate = CLLocationCoordinate2D(latitude: lat, longitude: long)
self.mapView.setCenter(CLLocationCoordinate2D(latitude: lat, longitude: long, animated: true)