gpt4 book ai didi

Swift Parse 将 MapView 中的注释保存为 PFGeoPoint

转载 作者:行者123 更新时间:2023-11-30 12:18:03 26 4
gpt4 key购买 nike

我有一个应用程序,让用户在 MapView 上选择其品牌所在的位置。当他们点击 map 上的某个位置时,它会创建一个带有标题和副标题的注释。我现在要做的就是当用户点击“下一步”按钮时将此注释转换为 PFGeoPoint,以便可以将其保存到 Parse 中,然后进行查询并显示在 map 上以供每个用户查看。

以下代码允许用户为其位置创建注释:

//Annotations
func longpress(gestureRecognizer: UIGestureRecognizer){

let touchPoint = gestureRecognizer.location(in: self.map)

let coordinate = map.convert(touchPoint, toCoordinateFrom: self.map)

let annotation = MKPointAnnotation()


if isAnnotated == true {

annotation.coordinate = coordinate

annotation.title = PFUser.current()?.username

annotation.subtitle = (PFUser.current()?.username)! + " is based here!"

//removes annotation
let allAnnotations = self.map.annotations
self.map.removeAnnotations(allAnnotations)

//adds annotation
self.map.addAnnotation(annotation)

print("REMOVED")

isAnnotated = false

} else {

annotation.coordinate = coordinate

annotation.title = PFUser.current()?.username

annotation.subtitle = (PFUser.current()?.username)! + " is based here!"

//removes annotation
let allAnnotations = self.map.annotations
self.map.removeAnnotations(allAnnotations)

//adds annotation
self.map.addAnnotation(annotation)

print("ANNOTATION ADDED")

isAnnotated = true

}
}

我现在需要的是将注释保存为 PFGeoPoint,但是我不太确定如何去做。看来 PFGeoPoint 想要 CLLocation 形式的位置,但我不知道如何将注释转换为该形式。如果需要的话,我可以提供迄今为止将其保存到 Parse 的代码,但它确实很困惑,因为我不知道如何将注释转换为可以保存到 Parse 的格式。任何帮助深表感谢。谢谢!

编辑 - 这是我的代码,我现在只需要一种方法来保存包含注释坐标的 geoPoint 变量作为“next”函数下的 PFGeoPoint

    import UIKit
import Parse
import MapKit
import CoreLocation

class BrandLocation: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {

var activityIndicator = UIActivityIndicatorView()

var isAnnotated = false

@IBOutlet var map: MKMapView!

var locationManager = CLLocationManager()

//QUESTIONABLE
var currentLoc: PFGeoPoint! = PFGeoPoint()

//QUESTIONABLE
var MapViewLocationManager:CLLocationManager! = CLLocationManager()

//ANNOTATION DECLARED
let annotation = MKPointAnnotation()

//Defines geoPoint as nil
var geoPoint : CLLocationCoordinate2D! = nil


func createAlert(title: String, message: String) {

let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)

alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { (action) in

alert.dismiss(animated: true, completion: nil)

}))

self.present(alert, animated: true, completion: nil)


}


//THIS IS WHERE PFGEOPOINT IS SAVED
@IBAction func next(_ sender: AnyObject) {

activityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
activityIndicator.center = self.view.center
activityIndicator.hidesWhenStopped = true
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray
view.addSubview(activityIndicator)
activityIndicator.startAnimating()
UIApplication.shared.beginIgnoringInteractionEvents()

let brandLocation = PFObject(className: "location")


//this is the main problem, I'm not sure how to take the coordinates I've defined in the geoPoint variable and now save them as a PFGeoPoint
geoPoint = PFGeoPoint(location: )

geoPoint["brandLocation"] = self.map.annotations

// let geopoint: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)

brandLocation["annotationTitle"] = self.map.annotations

brandLocation["annotationSubtitle"] = self.map.annotations

brandLocation.saveInBackground { (succes, error) -> Void in

self.activityIndicator.stopAnimating()
UIApplication.shared.endIgnoringInteractionEvents()

if error != nil {

self.createAlert(title: "Could not update profile", message: "There was a problem updating your profile")

print(":(((")

} else {

self.createAlert(title: "Profile Updated", message: "Profile details successfully updated")

print("MAPPED")

self.performSegue(withIdentifier: "toUserFeed", sender: self)

}

}

// self.performSegue(withIdentifier: "toUserFeed", sender: self)

}


//VIEW DID LOAD
override func viewDidLoad() {
super.viewDidLoad()

view.backgroundColor = UIColor.black

self.navigationController?.isNavigationBarHidden = true

self.tabBarController?.tabBar.isHidden = true

navigationController?.navigationBar.barTintColor = UIColor.black

locationManager.delegate = self

locationManager.desiredAccuracy = kCLLocationAccuracyBest

locationManager.requestWhenInUseAuthorization()

locationManager.startUpdatingLocation()


let uipgr = UITapGestureRecognizer(target: self, action: #selector(BrandLocation.longpress(gestureRecognizer:)))

//uipgr.minimumPressDuration = 1

//uipgr.numberOfTapsRequired = 1

map.addGestureRecognizer(uipgr)

}

override func viewDidAppear(_ animated: Bool) {



}


//Setting up map & location zoom
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

let userLocation: CLLocation = locations[0]

let latitude = userLocation.coordinate.latitude

let longitude = userLocation.coordinate.longitude

let latDelta: CLLocationDegrees = 0.05

let lonDelta: CLLocationDegrees = 0.05

let span = MKCoordinateSpan(latitudeDelta: latDelta, longitudeDelta: lonDelta)

let location = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)

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

self.map.setRegion(region, animated: true)

locationManager.stopUpdatingLocation()


}

//Annotations
func longpress(gestureRecognizer: UIGestureRecognizer){

let touchPoint = gestureRecognizer.location(in: self.map)

let coordinate = map.convert(touchPoint, toCoordinateFrom: self.map)


//DECLARED ABOVE
//let annotation = MKPointAnnotation()

//WORKING ON GEOPOINT
// currentLoc = PFGeoPoint(location: MapViewLocationManager.location)

//Declares and defines geoPoint

let latitude = annotation.coordinate.latitude

let longitude = annotation.coordinate.longitude

self.geoPoint = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)


if isAnnotated == true {

annotation.coordinate = coordinate

annotation.title = PFUser.current()?.username

annotation.subtitle = (PFUser.current()?.username)! + " is based here!"

//removes annotation
let allAnnotations = self.map.annotations
self.map.removeAnnotations(allAnnotations)

//adds annotation
self.map.addAnnotation(annotation)

print("REMOVED")

isAnnotated = false

} else {

annotation.coordinate = coordinate

annotation.title = PFUser.current()?.username

annotation.subtitle = (PFUser.current()?.username)! + " is based here!"

//removes annotation
let allAnnotations = self.map.annotations
self.map.removeAnnotations(allAnnotations)

//adds annotation
self.map.addAnnotation(annotation)

print("ANNOTATION ADDED")

isAnnotated = true

}
}

最佳答案

使用注释坐标来设置地理点。

let latitude = annotation.coordinate.latitude
let longitude = annotation.coordinate.longitude
let geopoint: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)

为您保存功能

for annotation in self.map.annotations {
//get location of all annotation
let latitude = annotation.coordinate.latitude
let longitude = annotation.coordinate.longitude
let geoPoint = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)

//save in Parse object
let brandLocation = PFObject(className: "location")
brandLocation["annotationTitle"] = annotation.annotationTitle
brandLocation["annotationSubtitle"] = annotation.annotationSubtitle
brandLocation["geoPoint"] = geoPoint
brandLocation.saveInBackground { (succes, error) -> Void in

....

}
}

关于Swift Parse 将 MapView 中的注释保存为 PFGeoPoint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45152452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com