5

सवाल उपयोगकर्ताओं से पूछा here पोस्ट में:उपयोगकर्ता स्थान से निकटतम देशांतर और अक्षांश सरणी में खोजें - आईओएस स्विफ्ट

मैं एक सरणी देशांतर और अक्षांश से भरा है। मेरे पास मेरे उपयोगकर्ता स्थान के साथ दो डबल चर हैं। मैं अपने सरणी के खिलाफ अपने उपयोगकर्ता के स्थानों के बीच की दूरी का परीक्षण करना चाहता हूं यह देखने के लिए कि कौन सा स्थान निकटतम है। मैं यह कैसे करु?

यह 2 स्थान के बीच की दूरी प्राप्त करेगा लेकिन समझने के लिए कि मैं इसे स्थानों की एक सरणी के विरुद्ध कैसे परीक्षण करूंगा।

जवाब में, वह निम्नलिखित कोड मिल गया:

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

मैं मैं पर काम कर रहा हूँ एक आवेदन में ठीक उसी समस्या है, और मुझे लगता है कि कोड के इस टुकड़े पूरी तरह से काम कर सकते हैं। हालांकि, मैं स्विफ्ट का उपयोग कर रहा हूं, और यह कोड उद्देश्य-सी में है।

मेरा एकमात्र सवाल यह है कि इसे स्विफ्ट में कैसे देखना चाहिए?

किसी भी मदद के लिए धन्यवाद। मैं इन सबके लिए नया हूं, और स्विफ्ट में कोड का यह टुकड़ा देखकर एक बड़ा पैर हो सकता है।

उत्तर

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

या एक समारोह के रूप:

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

अब मैं इस का उपयोग कर सकते के साथ तुलना करने के लिए उद्देश्य सी। यह एक से अधिक तरीकों से सहायक है। धन्यवाद! – tsteve

+0

खुश मैं मदद कर सकता था! –

14

लिए स्विफ्ट 3 मैं "कार्यात्मक" कोड का यह छोटा टुकड़ा बनाया है:

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) }) 
संबंधित मुद्दे