如何从 PFGeopoint -(Parse.com 和 Swift)检索位置并使用 Xcode 6.2 在地图上显示 [英] how to retrive location from a PFGeopoint - (Parse.com and Swift) and show it on the map with Xcode 6.2

查看:20
本文介绍了如何从 PFGeopoint -(Parse.com 和 Swift)检索位置并使用 Xcode 6.2 在地图上显示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对此有一些答案,但与不同的问题有关,并且都在objective-c中.我用这个保存在用户的解析类位置"位置:

There are some answer on this, but related to different problems and all in objective-c. I save in a parse class "Position" positions of users with this:

var locationManager = CLLocationManager()

var lat = locationManager.location.coordinate.latitude
var lon = locationManager.location.coordinate.longitude

let myGeoPoint = PFGeoPoint(latitude: lat, longitude:lon)
let myParseId = PFUser.currentUser().objectId //PFUser.currentUser().objectId

println("****** this is my geoPoint: (myGeoPoint)")

func sendPosition(userOfPosition: User) {

let takePosition = PFObject(className: "Position")

 takePosition.setObject(myParseId, forKey: "who") //who
 takePosition.setObject(myGeoPoint, forKey: "where")
                                        takePosition.saveInBackgroundWithBlock(nil)

                                }


  sendPosition(currentUser()!)

这是我的结果:

然后我想在地图上显示它们,但是如何显示?不明白如何从where"列检索纬度和经度,下面的代码不起作用:

then I want to show them on map, but how? don't understand how to retrive latitude and longitude from "where" column the code below doesn't work:

   import UIKit
    import MapKit

    class MapViewController: UIViewController {


    @IBOutlet weak var mapView: MKMapView!

    var locationManager : CLLocationManager!


    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.



        var locationManager = CLLocationManager()

        var lat = locationManager.location.coordinate.latitude
        var lon = locationManager.location.coordinate.longitude

        let location = CLLocationCoordinate2D(latitude: lat, longitude: lon)
        let span = MKCoordinateSpanMake(0.05, 0.05)
        let region = MKCoordinateRegionMake(location, span)
        mapView.setRegion(region, animated: true)

        let anotation = MKPointAnnotation()
        anotation.setCoordinate(location)
        anotation.title = "my title"
        anotation.subtitle = " my subtitle"

        mapView.addAnnotation(anotation)

        println("****** Welcome in MapViewController")



        //MARK: (471) Crossing Positions
        //*******************************************************

        let myGeoPoint = PFGeoPoint(latitude: lat, longitude:lon)
        let myParseId = PFUser.currentUser().objectId //PFUser.currentUser().objectId

        println("****** this is my geoPoint from map view controller: (myGeoPoint)")


//        
//        var inspector = PFQuery(className:"GameScore")
//                inspector.saveInBackgroundWithBlock {
//                    (success: Bool, error: NSError?) -> Void in
//                    if (success) {
//                        // The object has been saved.
//                        var the = inspector.objectId
//                    } else {
//                        // There was a problem, check error.description
//                    }
//                }
//        
//        
//        


        func filterByProximity() {
            PFQuery(className: "Position")
                .whereKey("where", nearGeoPoint: myGeoPoint, withinKilometers: 500.0)     //(474)
            .findObjectsInBackgroundWithBlock ({
                objects, error in
                if let proximityArray = objects as? [PFObject] {
                    println("****** here the proximity matches: (proximityArray)")
                    for near in proximityArray {
                        println("here they are (near)")
                        if let position = near["where"] as! PFGeoPoint {
                        let theirLat = position.latituide
                        let theirLon = position.longitude
                    }

                        let theirLat = near["where"].latitude as Double
                        let theirlong = near["where"].longitude as Double
                        let location = CLLocationCoordinate2DMake(theirLat, theirlong)
                        let span = MKCoordinateSpanMake(0.05, 0.05)
                        let region = MKCoordinateRegionMake(location, span)
                        self.mapView.setRegion(region, animated: true)
                        let theirAnotation = MKPointAnnotation()
                        theirAnotation.setCoordinate(location)
                        self.mapView.addAnnotation(anotation)

                    }
                }
            })
        }

        filterByProximity()


//        //update my position
//        
//        func exists() {
//        PFQuery(className:"Position")
//            .whereKey("who", containsString: myParseId)
//            .findObjectsInBackgroundWithBlock({
//            thisObject, error in
//                if let result = thisObject as? [PFObject] {
//                    println("here the result: (result)")
//                    
//                    let gotTheId = result[0].objectId
//                    println("ecco l'id singolo (gotTheId)")
//
//                            //******** update function ********
//                            var query = PFQuery(className:"Position")
//                            query.getObjectInBackgroundWithId(gotTheId) {
//                                (usingObject: PFObject?, error: NSError?) -> Void in
//                                if error != nil {
//                                    println(error)
//                                } else if let objectToupdate = usingObject {
//                                    println("else occurred")
//                                    objectToupdate["where"] = myGeoPoint
//                                    println("position should be updated")
//                                    objectToupdate.saveInBackgroundWithBlock(nil)
//                                    println("position should be saved")
//
//                                }
//                            }
//                            //******** end update function ********
//                }
//            })
//        }
//        
//        exists()

        //*******************************************************




    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }




}

第一次回答后更新

尝试检查选项,但有此消息:在没有向下铸造双倍之后:

tried to check for optionals, but have this message: after not down casting the double:

推荐答案

这奏效了.既是选项的问题,也是变量的问题,我用错了:

this worked. Was both a matter of optionals, and a matter of variables, I was using the wrong ones:

        //MARK: (471) Crossing Positions
        //*******************************************************

        let myGeoPoint = PFGeoPoint(latitude: lat, longitude:lon)
        let myParseId = PFUser.currentUser().objectId //PFUser.currentUser().objectId
        var radius = 100.0

        println("****** this is my geoPoint from map view controller: (myGeoPoint)")


        //MARK: *** let's look for other users ***

        var nearArray : [CLLocationCoordinate2D] = []

        func filterByProximity() {
            PFQuery(className: "Position")
                .whereKey("where", nearGeoPoint: myGeoPoint, withinKilometers: radius)     //(474)
                .findObjectsInBackgroundWithBlock ({
                    objects, error in
                    if let proximityArray = objects as? [PFObject] {
//                        println("****** here the proximity matches: (proximityArray)")
                        for near in proximityArray {
//                            println("here they are (near)")

                            let position = near["where"] as? PFGeoPoint

                            var theirLat = position?.latitude       //this is an optional
                            var theirLong = position?.longitude     //this is an optional
                            var theirLocation = CLLocationCoordinate2D(latitude: theirLat!, longitude: theirLong!)

                            nearArray.append(theirLocation)

                            if nearArray.isEmpty {
                                println("*** ERROR! anyone close by ***")
                            } else
                            {
                                for person in nearArray {

                                    let span = MKCoordinateSpanMake(2.50, 2.50)
                                    let region = MKCoordinateRegionMake(theirLocation, span)
                                    self.mapView.setRegion(region, animated: true)

                                    let theirAnotation = MKPointAnnotation()
                                    theirAnotation.setCoordinate(theirLocation)
                                    theirAnotation.title = near["who"] as String

                                    self.mapView.addAnnotation(theirAnotation)
                                }

                            }



                        }
                        println("****** in a radius of (radius) there are (nearArray.count) bikers ******")

                    }
                })
        }

        filterByProximity()

这篇关于如何从 PFGeopoint -(Parse.com 和 Swift)检索位置并使用 Xcode 6.2 在地图上显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆