从 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 数据库以查找本地位置吗?
将数据从 Parse tableview 传递到 WatchKit