【问题标题】:How to populate an array with information from JSON File and calculate distance?如何使用 JSON 文件中的信息填充数组并计算距离?
【发布时间】:2016-08-19 16:26:12
【问题描述】:

我这里有一个 JSON 文件:

     {
      "People": [{
       "A1": "New York",
       "B1": "ShoppingMall1",
       "C1": "43.0757",
       "D1": "23.6172"
       },
       {
       "A1": "London",
       "B1": "ShoppingMall2",
       "C1": "44.0757",
       "D1": "24.6172"
       }, {
       "A1": "Paris",
       "B1": "ShoppingMall3",
       "C1": "45.0757",
       "D1": "25.6172"
       }, {
       "A1": "Bern",
       "B1": "ShoppingMall4",
       "C1": "41.0757",
       "D1": "21.6172"
       }, {
       "A1": "Sofia",
       "B1": "ShoppingMall5",
       "C1": "46.0757",
       "D1": "26.6172"

       }
       ]
       }

我必须从这个 JSON 文件中获取购物中心的名称和坐标,并将它们填充到一个数组中。我想在表格视图单元格中使用这个数组。主要思想是计算用户当前位置周围最近的购物中心。这里我计算用户的当前位置。

@IBAction func LocateMe(sender: AnyObject) {
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestWhenInUseAuthorization()
manager.startUpdatingLocation()




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

   }
   let distanceMeters = userlocation.distanceFromLocation(CLLocation(latitude: ??,longitude: ??))
let distanceKilometers = distanceMeters / 1000.00
let roundedDistanceKilometers = String(Double(round(100 * distanceKilometers) / 100)) + " km"

但我不知道如何获取所有购物中心的坐标并进行比较。我也不知道如何将它们填充到我需要用于表格视图单元格的数组中。我是 swift 的新手,我如果有人可以帮助我,我会很高兴。

【问题讨论】:

    标签: ios json location


    【解决方案1】:

    我一直在研究你的问题,这是我的结果,

    首先我建议你使用一个JSON framework,比如SwiftyJSON,但我不使用任何一个,因为我不知道你是否愿意,所以

    首先我们需要使用这段代码加载我们的 json

    let pathForPlist = NSBundle.mainBundle().pathForResource("JSON", ofType: "json")!
    let JSONData = NSData(contentsOfFile: pathForPlist)
    

    在我们需要解析这些数据并转换为 JSONObject 之后

    let JSONObject = try NSJSONSerialization.JSONObjectWithData(JSONData!, options: NSJSONReadingOptions.MutableContainers) as! [String:AnyObject]
    

    并使用 Dictionary 中的初始化程序正确转换为 Objects,注意我们使用 NSJSONReadingOptions.MutableContainers,因为我们的 json 是一个字典数组

    这是完整的代码,请注意,我为您的数据类型定义了一个名为 ObjectShop 的类,以帮助稍后进行计算

    import UIKit
    import MapKit
    
    class ObjectShop
    {
        var A1 = ""
        var B1 = ""
        var C1 = ""
        var D1 = ""
    
        init?(dict:[String:AnyObject])
        {
            A1 = dict["A1"] as! String
            B1 = dict["B1"] as! String
            C1 = dict["C1"] as! String
            D1 = dict["D1"] as! String
        }
    
        func getCoordenate2D() -> CLLocationCoordinate2D
        {
            return CLLocationCoordinate2D(latitude: Double(self.C1)!, longitude: Double(self.D1)!)
        }
    }
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
            let pathForPlist = NSBundle.mainBundle().pathForResource("JSON", ofType: "json")!
            let JSONData = NSData(contentsOfFile: pathForPlist)
            do
            {
                var objects = [ObjectShop]()
                let JSONObject = try NSJSONSerialization.JSONObjectWithData(JSONData!, options: NSJSONReadingOptions.MutableContainers) as! [String:AnyObject]
                print(JSONObject)
                for dic in JSONObject["People"] as! [[String:AnyObject]] {
                    print(dic)
                    let objc = ObjectShop(dict: dic)
                    objects.append(objc!)
                }
    
                for object in objects {
                    print(object.getCoordenate2D())
                }
            }
            catch _
            {
    
            }
    
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
    
    }
    

    希望对你有帮助,如果有任何问题,请告诉我

    【讨论】:

    • 您好,感谢您的代码,我在代码中使用了 Swifty Json。你能给我一个电子邮件地址或其他什么东西,我可以将我的代码发送给你以进行审查,因为我是 Swift 的新手,我真的很想完成它,但我得到了奇怪的错误。我无法理解而不是打印如何将其发送到表格视图单元格
    • @IvanSosev 您可以通过此邮件 rmelian2014@gmail.com 与我联系,或者您可以在 GitHub 上创建一个新的存储库,我可以查看并修复您的代码
    • 我给你发了邮件,因为我不知道如何使用github :(
    • 主要挑战是如何获取最终值而不是打印以将数据上传到表格视图单元格
    • 你在哪个 viewController 中有表格?
    猜你喜欢
    • 1970-01-01
    • 2018-08-03
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多