Afficher une liste de points sur une carte + iOS 17

Bonjour,
Avec IOS 17 et les changement dans SwiftUI, je ne maitrise plus bien l’affichage de points sur une carte.

Dans l’exemple ci-après seul le premier point du tableau s’affiche, je suppose que j’ai une erreur dans la boucle.

import SwiftUI
import MapKit

struct PointsModel:Identifiable {
    var id:UUID = UUID()
    var nom:String
    var coordonnee:CLLocationCoordinate2D
    var logo:String
}

struct ContentView: View {
    @State private var positionCamera:MapCameraPosition = .region(.userRegion)
    
     private var listePoints:[PointsModel] = [PointsModel(
        nom: "chateau",
        coordonnee: CLLocationCoordinate2D(
                    latitude: 47.4698,
                    longitude: 0.5593),
        logo: "house"),
        
        PointsModel(nom: "Cathédrale",
             coordonnee: CLLocationCoordinate2D(
             latitude: 47.4705766813,
             longitude: -0.554865612818),
            logo: "house.circle.fill"),
       
            PointsModel(nom: "aeroport",
            coordonnee: CLLocationCoordinate2D(
            latitude: 47.5635,
            longitude: -0.3157),
            logo: "airplane")]
    
    var body: some View {
        Map(initialPosition: positionCamera) {
            ForEach(listePoints) { point in
                Annotation(point.nom, coordinate: point.coordonnee) {
                    Image(systemName: point.logo)
                        .cornerRadius(3.0)
                        .padding(2)
                        .background(.red)                 
                }
            }
        }
        .mapControls {
            MapCompass()
            MapPitchToggle()
            MapUserLocationButton()
            
        }
        
    }
}

// //Retourne l'emplacement de la carte à afficher
extension CLLocationCoordinate2D {
    static var userLocation:CLLocationCoordinate2D {
        return .init(latitude: 47.478419, longitude: -0.563166)
    }
}

//definition de detail de la carte
extension MKCoordinateRegion {
    static var userRegion:MKCoordinateRegion {
        return .init(center: .userLocation, 
                     latitudinalMeters: 500,
                     longitudinalMeters: 10000)
    }
}

#Preview {
    ContentView()
}

Hello Titastus,

Je découvre aussi MapKit, qui est carrément top. Dans ton objet Map, les points d’intérêts sont à faire avec des objets Marker. sachant que coordinate est de type CLLocationCoordinate2D

Map() {
            Marker("Home", coordinate: home)  
        }

Annotation fonctionne aussi, mais je crois comprendre que l’esprit est différent.
Sinon, ce qui fait que cela déconne, c’est ton initialPosition. Tu lui. impose un affichage. enlève et il va te cadrer la map pour afficher tous les points demandés.

J’espère que cela te débloquera

@State private var positionCamera:MapCameraPosition = .automatic

Bonjour,
Modification de ma position camera sur automatique
Merci @sylvain

Il me reste maintenant à découvrir comment relier GPS au nouveau Map pour faire un suivi utilisateur et tous mes exemples d’IOS 16 seront fonctionnel

Mais comme toi j’aime beaucoup.

1 « J'aime »