2016-08-16 67 views
0

我需要查找我當前位置周圍最近的城市。你會建議我如何在我的項目中將座標填充到數組中,以及如何計算我的位置和距離我最近的位置之間的距離。我必須顯示(KM)和城市名稱的距離,以便用戶可以選擇最適合他的城市。我還需要從json文件中調用我的代碼中的座標和名稱 我的JSON文件是:如何將經度緯度從JSON文件填充到數組中

{ 
"City A": { 
    "Position": { 
     "Longitude": 9.96233, 
     "Latitude": 49.80404 
    } 
}, 
"City B": { 
    "Position": { 
     "Longitude": 6.11499, 
     "Latitude": 50.76891 
    } 
}, 
"City C": { 
    "Position": { 
     "Longitude": 6.80592, 
     "Latitude": 51.53548 
    } 

和我的功能至今:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

    let userlocation:CLLocation = locations[0] as CLLocation 

    manager.stopUpdatingLocation() 

    let location = CLLocationCoordinate2D(latitude: userlocation.coordinate.latitude, longitude: userlocation.coordinate.longitude) 

    let span = MKCoordinateSpanMake(0.5, 0.5) 

    let region = MKCoordinateRegion(center: location, span: span) 

    Mapview.setRegion(region, animated: true) 
    let locations = ["42.6977,23.3219","43.6977,24.3219"] 

    let distanceMeters = userlocation.distanceFromLocation(CLLocation(latitude: 42.6977,longitude: 23.3219)) 
    let distanceKilometers = distanceMeters/1000.00 
    let roundedDistanceKilometers = String(Double(round(100 * distanceKilometers)/100)) + " km" 
    // var distanceMeter = NSString(format: "\(distanceKilometers)km") 

回答

0

假設JSON文件是在應用程序包,被命名爲cities.json首先創建一個自定義的結構City

struct City { 
    let name : String 
    let location : CLLocation 
} 

然後在你的控制器聲明數組cities

var cities = [City]() 

要填充數組反序列化JSON和提取數據

guard let url = NSBundle.mainBundle().URLForResource("cities", withExtension: "json"), jsonData = NSData(contentsOfURL: url) else { return } 

do { 
    let jsonObject = try NSJSONSerialization.JSONObjectWithData(jsonData, options: []) as! [String:AnyObject] 
    for (cityName, position) in jsonObject { 
    let coordinates = position["Position"] as! [String:CLLocationDegrees] 
    let longitude = coordinates["Longitude"]! 
    let latitude = coordinates["Latitude"]! 
    let location = CLLocation(latitude: latitude,longitude: longitude) 
    let city = City(name: cityName, location: location) 
    cities.append(city) 
    // print(cities) 
    } 
} catch let error as NSError { 
    print(error) 
} 

要找到你可以通過距離

數組排序最近的位置
let nearestCity = cities.sort({ userLocation.distanceFromLocation($0.location) < userLocation.distanceFromLocation($1.location) }).first 
+0

感謝您的示例,但您如何將用戶當前位置與其他位置進行比較? –

+0

我更新了答案。 – vadian

+0

你會檢查爲什麼我在這裏得到一個錯誤: 讓nearestCity = cities.sort({userLocation.distanceFromLocation($ 0.location)