Mapbox iOS setVisibleCoordinates не ведут себя должным образом - PullRequest
2 голосов
/ 21 марта 2019

У меня возникают проблемы с отображением фиксированной карты Ирландии с использованием 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, однако он слишком сильно уменьшен.Как показать одно и то же представление на разных устройствах?

IPad

Iphone 5s

Ответы [ 3 ]

3 голосов
/ 22 марта 2019

Хорошо, у меня это работает. В MGLMapView есть метод камеры, который возвращает камеру, которая максимально увеличивает изображение, пока он все еще отображает указанный вами прямоугольник. Просто убедитесь, что это сделано в методе делегата 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)
2 голосов
/ 21 марта 2019

На сайте 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(&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)
    }
}
0 голосов
/ 22 мая 2019

Это помогает мне увеличить конкретный регион в 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)
...