Mapkit Annotation

Bonjour tout le monde,


 


J'ai une petite question en rapport avec FireBase/Swift/Mapkit


 


J'ai une database constituée de la sorte (voir image)


 


ref : nom


key : autochild


child : xxx


 


 


Pour chaque nouvelle, je récupère la latitude et la longitude (image : LocationLat et LocationLong)


 


de manière isoler, pas de souci, j'arrive à  récupérer les informations et à  les attribuer à  la mapkit via LocationManager/annotation/setRegion...


 


seulement, je souhaite maintenant mettre l'ensemble des annotations sur une seule carte.


 


Vous l'auriez compris, ce que je voudrais, c'est pouvoir, dans une Array (est-ce la meilleure solution ??), récupérer tous les LocationLat et tous les LocationLong pour ensuite les traduire et les placer sur la carte par le procédé que lorsqu'il ne s'agit que d'une seule annotation.


 


J'espère avoir été clair dans mes explications.


 


Merci à  tous pour votre aide et excellent weekend ::)


 


 


FIR.JPG 23.2K
Mots clés:

Réponses

  • CéroceCéroce Membre, Modérateur
    octobre 2016 modifié #2
    Euh non, je n'ai pas compris. Serais-tu en train de parler de "clustering" des annotations ?

    (Voir par ex. ceci: https://github.com/yinkou/OCMapView)
  • rollanorollano Membre
    octobre 2016 modifié #3

    Salut Céroce


    En faite, à  chaque fois qu'une nouvelle ligne est ajoutée a mon database, les childs comprennent deux élément (Longitude et Latitude)


     


    c'est précisément ces deux élément que je veux récupérer pour placer sur une carte. j'arrive individuellement mais ensemble non.


  • ton lien est introuvable


  • Joanna CarterJoanna Carter Membre, Modérateur

    ton lien est introuvable




    Je l'ai corrigé. Réessayer le.
  • Joanna CarterJoanna Carter Membre, Modérateur
    octobre 2016 modifié #6


    Salut Céroce

    En faite, à  jaque fois qu'une nouvelle ligne est ajoutée a mon database, les childs comprennent deux élément (Longitude et Latitude)


    Je ne comrends pas. Une ligne a quatres éléments - commencement lat/long et fin lat/long
  • CéroceCéroce Membre, Modérateur
    Je crois avoir compris.

    Je ne connais pas FireBase, donc je vais faire comme si ça te renvoyait une struct de type Homeless:

    struct Homeless {
    let adresse: String
    let codePostal: String
    // etc.

    let latitude: Double
    let longitude: Double
    }
    Pour ajouter une annotation à  un carte, il faut seulement qu'un objet se conforme au protocole MKAnnotation.
    J'aurais bien fait une extension à  Homeless, mais malheureusement, MKAnnotation hérite du protocole NSObject.
    Du coup, je crée une classe pour ça:


    class HomelessAnnotation: NSObject, MKAnnotation {
    var coordinate: CLLocationCoordinate2D

    init(homeless: Homeless) {
    self.coordinate = CLLocationCoordinate2DMake(homeless.latitude, homeless.longitude)

    super.init()
    }
    }
    Je ne programme toujours pas Swift au quotidien, aussi les remarques des gens plus expérimentés seront les bienvenues.


  • Je l'ai corrigé. Réessayer le.





  • Je crois avoir compris.


    Je ne connais pas FireBase, donc je vais faire comme si ça te renvoyait une struct de type Homeless:



    struct Homeless {
    let adresse: String
    let codePostal: String
    // etc.

    let latitude: Double
    let longitude: Double
    }

    Pour ajouter une annotation à  un carte, il faut seulement qu'un objet se conforme au protocole MKAnnotation.

    J'aurais bien fait une extension à  Homeless, mais malheureusement, MKAnnotation hérite du protocole NSObject.

    Du coup, je crée une classe pour ça:


    class HomelessAnnotation: NSObject, MKAnnotation {
    var coordinate: CLLocationCoordinate2D

    init(homeless: Homeless) {
    self.coordinate = CLLocationCoordinate2DMake(homeless.latitude, homeless.longitude)

    super.init()
    }
    }

    Je ne programme toujours pas Swift au quotidien, aussi les remarques des gens plus expérimentés seront les bienvenues.

     




     


     


    effectivement mes éléments sont sous cette forme. 


     


    cela renvois tous les points ?  car je ne sais pas s'il considère la notion de autochild (key)



  • Je ne comrends pas. Une ligne a quatres éléments - commencement lat/long et fin lat/long




     


    Y'a bien plus que 4. y'a une 20ten. Mais la c'est juste les deux qui m'intéresse


     


    voulez vous voir le code complet ? ou l'image du résultat ?

  • Joanna CarterJoanna Carter Membre, Modérateur




    Je l'ai recorrigé. Réessayer le. En même temps, tu aurais pu le corriger toi-même, ce n'était qu'une parenthèse superflue à  la fin.


  • Je l'ai recorrigé. Réessayer le. En même temps, tu aurais pu le corriger toi-même, ce n'était qu'une parenthèse superflue à  la fin.




    désoler j'ai pas regarder l'adresse.

  • Bonjour,


    Bon j'ai réussi à  récupérer les données en Array... Comment faire pour les définir sur mes annotations ?


     


    ArrayLat [48.829772863582548, 48.829727559395913, 48.829388213442932, 48.932644883216291, 48.932663019007052, 48.829236766681923, 48.827753411651429]


    ArrayLong [2.3948154319100028, 2.3948130849771152, 2.3943063033215841, 2.28122647851918, 2.2805309939058769, 2.3943699489902701, 2.3927869275234568]


  • Joanna CarterJoanna Carter Membre, Modérateur

    {
    for i in 0..<7
    {
    let lat = ArrayLat[i]

    let long = ArrayLong[i]

    let coord = CLLocationCoordinate2D(latitude: lat, longitude: long)

    ...
    }
    }
  • tu es..... MAGNIFIQUE


     


    merci beaucoup pour ton aide


     


    voila le code final, en espérant que cela aidera d'autre



    for i in 0 ..< homelessAllLat.count {
    let homelessArrayLat = homelessAllLat[i]

    let homelessArrayLong = homelessAllLong[i]

    //let coord = CLLocationCoordinate2D(latitude: lat, longitude: long)

    let homelessMissionNonValideeCoordinate = CLLocationCoordinate2D(latitude: homelessArrayLat, longitude: homelessArrayLong)

    let annotationAutre = MKPointAnnotation()

    annotationAutre.coordinate = homelessMissionNonValideeCoordinate

    annotationAutre.title = "Title RO"

    annotationAutre.subtitle = "Subtitle RO"

    //annotationAutre

    self.homelessAnnotation.append(annotationAutre)

    accueilMapKit.addAnnotations(homelessAnnotation)

    }
  • LeChatNoirLeChatNoir Membre, Modérateur

    Tu devrais sortir cette instruction du for :


    accueilMapKit.addAnnotations(homelessAnnotation)


     


    Avec 2 annotations, ça se voit pas mais si tu en a plus....




  • Tu devrais sortir cette instruction du for :


    accueilMapKit.addAnnotations(homelessAnnotation)


     


    Avec 2 annotations, ça se voit pas mais si tu en a plus....




     


     


    En effet, je vais en avoir plusieurs.


     


    Du coup je le sors du for.


     


    Merci pour ta remarque

Connectez-vous ou Inscrivez-vous pour répondre.