2
votes

Mapbox iOS setVisibleCoordinates ne se comporte pas comme prévu

J'ai du mal à afficher une carte fixe de l'Irlande à l'aide de Mapbox sous iOS sur différentes tailles d'écran. MGLMapView.setVisibleCoordinates semble être ce dont j'ai besoin, mais il ne se comporte pas comme prévu. Je m'attends à passer une coordonnée en bas à gauche et une coordonnée en haut à droite et que cela définisse un rectangle à afficher quelle que soit la taille de l'écran.

mapView.setVisibleCoordinates ([CLLocationCoordinate2D (latitude: 50.347676, longitude: -11.444362), CLLocationCoordinate2D (latitude: 56.375322, longitude: -4.128659)], nombre: 2, edgePadding: UIEdgeInsets.zero, animé: UIEdgeInsets.zero)

J'ai aussi essayé

mapView.setVisibleCoordinateBounds (MGLCoordinateBounds (sw: CLLocationCoordinate2D (latitude: 50.347676, longitude: -11.444362), ne: CLLocationCoordinate2D (latitude: 56.375322, longitude: -4.128659)), edgePadding: UIEzeroIns. )

Aux mêmes résultats que ceux indiqués ci-dessous. Comme vous pouvez le voir, la disposition de l'iPhone 5s est parfaite, mais je m'attends à ce que le code ci-dessus affiche la même vue sur l'ipad, mais il est trop dézoomé. Comment puis-je afficher la même vue sur tous les appareils?

 iPad

 Iphone 5s


0 commentaires

3 Réponses :


2
votes

Il y a un exemple sur le site Web de Mapbox qui fait exactement (je pense) ce que vous voulez. J'ai pris la liberté d'insérer vos coordonnées, etc. comme ci-dessous. Les liens sont interrompus, je vais donc publier le code.

MODIFICATION: Modification de l'interdiction du défilement, du panoramique et du zoom.

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)
    }
}


3 commentaires

Cela ne fonctionne pas tout à fait mais je comprends la théorie. L'iPad est toujours trop zoomé et l'iPhone est trop zoomé. Pourriez-vous partager le lien à partir duquel vous l'avez obtenu dans un commentaire?


Je pense que vous l'avez obtenu grâce au didacticiel "Restreindre le panoramique de la carte à une zone". Ma carte n'est pas déplaçable ou zoomable du tout, elle devrait donc être simplement une vue fixe montrant l'Irlande. Je cherche toujours ...


Ah d'accord, j'ai mal compris. Si vous voulez juste une vue statique de l'Irlande - pas de défilement, pas de zoom, cela devrait simplement être un cas de réglage de la vue et des propriétés respectives. Je vais modifier ma réponse. EDIT: Je viens de vérifier sur une application de test et cela fonctionne à la fois sur iPad et iPhone pour moi.



6
votes

Ok, j'ai fait fonctionner ça. Il existe une méthode de caméra sur le MGLMapView qui renverra une caméra qui zoomera aussi loin que possible tout en affichant un rectangle que vous spécifiez. Assurez-vous simplement que cela est fait dans la méthode déléguée 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 commentaires

C'est une bonne solution.



0
votes

Cela m'aide à zoomer sur une région particulière dans 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)


0 commentaires