从 Parse 中查询 GeoPoint 并将其作为 MKAnnotation 添加到 MapKit?

Posted

技术标签:

【中文标题】从 Parse 中查询 GeoPoint 并将其作为 MKAnnotation 添加到 MapKit?【英文标题】:Query a GeoPoint from Parse and add it to MapKit as MKAnnotation? 【发布时间】:2015-06-30 16:38:11 【问题描述】:

我正在尝试查询存储在 Parse 后端的 PFGeoPoints 数组。我在 Parse 中有一个名为“Post”的 PFObject,并为其分配了数据,例如“位置”、“标题”、“消息”等。

从我的应用发布后,所有内容都会发送到 Parse,并正确存储在后端。我在从 Parse 中检索“Post”PFObject 的属性并将它们存储到地图上的 MKAnnotation 时遇到问题。

这是我的 MapViewViewController:

import UIKit
import Parse
import CoreLocation
import MapKit

class MapViewViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate 

@IBOutlet var mapView: MKMapView!

var MapViewLocationManager:CLLocationManager! = CLLocationManager()
var currentLoc: PFGeoPoint! = PFGeoPoint()

var postTitle: String!
var postBody: String!


override func viewDidLoad() 
    super.viewDidLoad()
    mapView.showsUserLocation = true
    mapView.delegate = self
    MapViewLocationManager.delegate = self
    MapViewLocationManager.startUpdatingLocation()
    mapView.setUserTrackingMode(MKUserTrackingMode.Follow, animated: true)


override func viewDidAppear(animated: Bool) 
    var annotationQuery = PFQuery(className: "Post")
    currentLoc = PFGeoPoint(location: MapViewLocationManager.location)
    annotationQuery.whereKey("Location", nearGeoPoint: currentLoc, withinMiles: 10)
    annotationQuery.findObjectsInBackgroundWithBlock 
        (points, error) -> Void in
        if error == nil 
            // The find succeeded.
            println("Successful query for annotations")
            // Do something with the found objects
            //THIS IS WHERE I GET LOST WITH THE PARSE QUERY/ADDING ANNOTATION TO MAP


            //THE FOLLOWING CODE PRINTS THE CORRECT POSTCOUNT STORED IN PARSE
            println("total posts: \(points?.count)")

         else 
            // Log details of the failure
            println("Error: \(error)")
        
    



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


@IBAction func logoutButton(sender: UIBarButtonItem) 
    PFUser.logOut()
    dismissViewControllerAnimated(true, completion: nil)


@IBAction func newPostButton(sender: AnyObject) 
    performSegueWithIdentifier("mainToNewPost", sender: self)

我想查询和检索用户输入的所有信息(PFGeoPoint、标题、正文)的帖子,并将其转换为地图上的 mkannotation。

这是我的 Parse 后端的照片,可以让您更好地了解:

http://i1249.photobucket.com/albums/hh512/zachkhan3/Screen%20Shot%202015-04-22%20at%2012.39.42%20PM.png

【问题讨论】:

嗯,看起来你已经有帖子了,你只需要创建注释 我明白了,我想我在从解析中提取点并将它们转换为注释时感到困惑。 好吧,println("total posts: \(allPosts?.count)") 不清楚,因为 allPosts 没有在任何地方定义,但您需要迭代 points 并从中创建注释 糟糕! 'allPosts' 应该是 'points' - 已修复。我很难弄清楚如何“迭代”这些点并从中创建注释。我想为每个图钉设置标题、正文和位置值。 从一个简单的for循环开始并打印每个点的值,然后在循环中创建注释并设置值,将注释添加到地图(最好创建一个数组或注释,但一步一步) 【参考方案1】:

从您提供的屏幕截图中,我假设您正在查询 Post 对象,它是一个 PFObject。因此,您可以从返回的 posts 数组中访问每个 post 对象。然后,您可以使用每个 post 对象中的 Location 属性,并将注释添加到您的 mapView。

annotationQuery.findObjectsInBackgroundWithBlock 
        (posts, error) -> Void in
        if error == nil 
            // The find succeeded.
            println("Successful query for annotations")
            let myPosts = posts as [PFObject]

            for post in myPosts 
                let point = post["Location"] as PFGeoPoint
                let annotation = MKPointAnnotation()
                annotation.coordinate = CLLocationCoordinate2DMake(point.latitude, point.longitude)
                self.mapView.addAnnotation(annotation)
            
         else 
            // Log details of the failure
            println("Error: \(error)")
        
    

【讨论】:

感谢您的回复!现在我看到它是有道理的,迫不及待地想在下班后尝试一下。如果解决了问题,我会告诉你的! 工作就像一个魅力:) 这对我也有用,有同样的问题,这有帮助:)

以上是关于从 Parse 中查询 GeoPoint 并将其作为 MKAnnotation 添加到 MapKit?的主要内容,如果未能解决你的问题,请参考以下文章

我可以通过 GeoPoint 值查询 Firestore 数据库以查找本地位置吗?

Swift GeoPoint 获取所有用户位置 ios

在 Parse 中保存用户地理点

将数据从 Parse tableview 传递到 WatchKit

从 Logstash 在 Elasticsearch 上使用 geopoint

无法将图像从 PARSE 加载到 PFTableViewCell 的 imageView 属性中