Je veux savoir comment épingler 15 annotations au hasard dans un MapView

    let latitude: CLLocationDegrees = 33.606800
    let longitude: CLLocationDegrees = -111.845360
    let location:CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude)

    //map annotation
    let annotation = MKPointAnnotation()
    annotation.coordinate = location
    annotation.title = "Taliesin West"
    annotation.subtitle = "Design"
    map.addAnnotation(annotation) 
4
Mohamed Salah 12 juil. 2016 à 13:56

2 réponses

Meilleure réponse

Pour tous ceux qui veulent la solution :

Premièrement : ajout d'annotations aléatoires en fonction de l'emplacement actuel

Génération des annotations :

func generateAnnoLoc() {

    var num = 0
    //First we declare While to repeat adding Annotation
    while num != 15 {
          num += 1

        //Add Annotation
        let annotation = MKPointAnnotation()
        annotation.coordinate = generateRandomCoordinates(70, max: 150) //this will be the maximum and minimum distance of the annotation from the current Location (Meters)
        annotation.title = "Annotation Title"
        annotation.subtitle = "SubTitle"
        mapView.addAnnotation(annotation)

    }

}

Génération des coordonnées :

func generateRandomCoordinates(min: UInt32, max: UInt32)-> CLLocationCoordinate2D {
    //Get the Current Location's longitude and latitude
    let currentLong = currentLoc.coordinate.longitude
    let currentLat = currentLoc.coordinate.latitude

    //1 KiloMeter = 0.00900900900901° So, 1 Meter = 0.00900900900901 / 1000
    let meterCord = 0.00900900900901 / 1000

    //Generate random Meters between the maximum and minimum Meters
    let randomMeters = UInt(arc4random_uniform(max) + min)

    //then Generating Random numbers for different Methods 
    let randomPM = arc4random_uniform(6)

    //Then we convert the distance in meters to coordinates by Multiplying the number of meters with 1 Meter Coordinate
    let metersCordN = meterCord * Double(randomMeters)

    //here we generate the last Coordinates 
    if randomPM == 0 {
        return CLLocationCoordinate2D(latitude: currentLat + metersCordN, longitude: currentLong + metersCordN)
    }else if randomPM == 1 {
        return CLLocationCoordinate2D(latitude: currentLat - metersCordN, longitude: currentLong - metersCordN)
    }else if randomPM == 2 {
        return CLLocationCoordinate2D(latitude: currentLat + metersCordN, longitude: currentLong - metersCordN)
    }else if randomPM == 3 {
        return CLLocationCoordinate2D(latitude: currentLat - metersCordN, longitude: currentLong + metersCordN)
    }else if randomPM == 4 {
        return CLLocationCoordinate2D(latitude: currentLat, longitude: currentLong - metersCordN)
    }else {
        return CLLocationCoordinate2D(latitude: currentLat - metersCordN, longitude: currentLong)
    }

}

Deuxièmement : ajouter une annotation aléatoire sur toute la terre

code erdekhayser pour obtenir un nombre flottant aléatoire

func randomBetweenNumbers(firstNum: CGFloat, secondNum: CGFloat) -> CGFloat {
    return CGFloat(arc4random()) / CGFloat(UINT32_MAX) * abs(firstNum - secondNum) + min(firstNum, secondNum)
}

Et puis appel :

func generateAnnoLoc() {

    var num = 0
    //First we declare While to repeat adding Annotation
    while num != 15 {
        num += 1

        //Add Annotation
        let annotation = MKPointAnnotation()
        annotation.coordinate = CLLocationCoordinate2D(latitude: CLLocationDegrees(randomBetweenNumbers(-90, secondNum: 90)), longitude: CLLocationDegrees(randomBetweenNumbers(-180, secondNum: 180)))
        //-180 is the minimum of longitude and 180 is the maximum
        //-90 is the minimum of latitude and 90 is the maximum
        annotation.title = "Annotation Title"
        annotation.subtitle = "SubTitle"
        mapView.addAnnotation(annotation)

    }

}

Troisièmement : ajout d'annotations aléatoires dans un pays spécifique

Vous voulez seulement la boîte englobante du pays ou de la ville Vous pouvez la trouver Ici

Cela générera des coordonnées aléatoires en Égypte :

CLLocationCoordinate2D(latitude: CLLocationDegrees(randomBetweenNumbers(22, secondNum: 24.698099)), longitude: CLLocationDegrees(randomBetweenNumbers(31.674179, secondNum: 36.89468))) 
9
Mohamed Salah 10 juin 2019 à 18:50