Firebase Geofire中心地图从数据库的位置

时间:2017-12-20 13:56:10

标签: swift firebase coordinates geofire

所以我使用Geofire在我的数据库中存储了多个位置。我想将地图置于特定的地图中心。

我想知道是否可以访问firebase数据库,只检索GeoFire保存的坐标作为变量,这样我就可以创建一个CLLocation并将地图置于这个位置的中心位置。这是我的代码。

我在getJobLocation中致电viewDidLoad。这是我想要从Firebase获取作业坐标然后使用这些坐标调用其他方法,即showJobsOnMap

func getJobLocation(jobID: String) {
   ...
}

func centreMapOnLocation(location: CLLocation) {

    let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate, 2000, 2000)
    mapView.setRegion(coordinateRegion, animated: true)
}

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

    let annoIdentifier = "job"
    var annotationView: MKAnnotationView?

    if annotation.isKind(of: MKUserLocation.self) {

        annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "User")
        annotationView?.image = UIImage(named:"currentLocationPin")
    } else if let deqAnno = mapView.dequeueReusableAnnotationView(withIdentifier: "job") {
        annotationView = deqAnno
        annotationView?.annotation = annotation
    } else {
        let MKAV = MKAnnotationView(annotation: annotation, reuseIdentifier: annoIdentifier)
        MKAV.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
        annotationView = MKAV
    }

    if let annotationView = annotationView, let _ = annotation as? JobAnnotation {
        let postsRef = self.dataBaseRef.child("jobs")
        postsRef.observe(.value, with: { (posts) in
            for _ in posts.children {
                annotationView.canShowCallout = true
                annotationView.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
                annotationView.image = UIImage(named: "jobPin")
            }
        })
    }

    return annotationView
}

func showJobsOnMap(location: CLLocation) {
    let circleQuery = geoFire!.query(at: location, withRadius: 2.5)
    _ = circleQuery?.observe(GFEventType.keyEntered, with: { (key, location) in
        if let key = key, let location = location {

            if key == self.job.postID {
                let postsRef = self.dataBaseRef.child("jobs").child(key)
                postsRef.observe(.value, with: { (posts) in
                    for _ in posts.children {

                        let post = Post(snapshot: posts )
                        let jobDate = post.postDateTime
                        let price = post.price
                        let anno = JobAnnotation(coordinate: location.coordinate, jobID: key, jobDate: jobDate, title: "£\(price) - \(jobDate)")
                        self.mapView.addAnnotation(anno)
                    }
                })
            }
        }
    })
}

0 个答案:

没有答案