2015-11-25 19 views
5

Nella questione postato here, l'utente ha chiesto:Trova più vicino longitudine e la latitudine in ordine dalla posizione dell'utente - iOS Swift

Ho una gamma completa di longitudini e latitudini. Ho due variabili doppie con la posizione dei miei utenti. Mi piacerebbe testare la distanza tra le posizioni dei miei utenti contro il mio array per vedere quale posizione è la più vicina. Come faccio a fare questo?

In questo modo si ottiene la distanza tra 2 posizione, ma in lettura per capire come provarlo contro una serie di posizioni.

In risposta, ha ottenuto il seguente codice:

NSArray *locations = //your array of CLLocation objects 
CLLocation *currentLocation = //current device Location 

CLLocation *closestLocation; 
CLLocationDistance smallestDistance = DBL_MAX; // set the max value 

for (CLLocation *location in locations) { 
    CLLocationDistance distance = [currentLocation distanceFromLocation:location]; 

    if (distance < smallestDistance) { 
     smallestDistance = distance; 
     closestLocation = location; 
    } 
} 
NSLog(@"smallestDistance = %f", smallestDistance); 

ho lo stesso problema in un'applicazione su cui sto lavorando, e penso che questo pezzo di codice potrebbe funzionare perfettamente. Comunque, sto usando Swift e questo codice è in Objective-C.

La mia unica domanda è: come dovrebbe apparire in Swift?

Grazie per qualsiasi aiuto. Sono nuovo di tutto questo e vedere questo pezzo di codice in Swift potrebbe essere un grande vantaggio.

risposta

16
var closestLocation: CLLocation? 
var smallestDistance: CLLocationDistance? 

for location in locations { 
    let distance = currentLocation.distanceFromLocation(location) 
    if smallestDistance == nil || distance < smallestDistance { 
    closestLocation = location 
    smallestDistance = distance 
    } 
} 

print("smallestDistance = \(smallestDistance)") 

o come una funzione:

func locationInLocations(locations: [CLLocation], closestToLocation location: CLLocation) -> CLLocation? { 
    if locations.count == 0 { 
    return nil 
    } 

    var closestLocation: CLLocation? 
    var smallestDistance: CLLocationDistance? 

    for location in locations { 
    let distance = location.distanceFromLocation(location) 
    if smallestDistance == nil || distance < smallestDistance { 
     closestLocation = location 
     smallestDistance = distance 
    } 
    } 

    print("closestLocation: \(closestLocation), distance: \(smallestDistance)") 
    return closestLocation 
} 
+0

Ora posso usare questo per confrontare con Objective-C. È utile in più di un modo. Grazie! – tsteve

+0

felice di poterti aiutare! –

14

Per Swift 3 Ho creato questo piccolo pezzo di codice "funzionale":

let coord1 = CLLocation(latitude: 52.12345, longitude: 13.54321) 
let coord2 = CLLocation(latitude: 52.45678, longitude: 13.98765) 
let coord3 = CLLocation(latitude: 53.45678, longitude: 13.54455) 

let coordinates = [coord1, coord2, coord3] 

let userLocation = CLLocation(latitude: 52.23678, longitude: 13.55555) 

let closest = coordinates.min(by: 
{ $0.distance(from: userLocation) < $1.distance(from: userLocation) }) 
Problemi correlati