Показывать места в Firebase, когда пользователь рядом

Я пытаюсь, чтобы моя карта отображалась из Firebase в радиусе полумили от моего пользователя, но я еще не совсем там. Может ли кто-нибудь помочь?

Это то, что я делаю сейчас:

1) Заполните карту и tableView данными из моей базы данных Firebase в моем viewDidLoad:

var posts = [Post]()

    override func viewDidLoad() {
        super.viewDidLoad()

        // Set up Map
        mapView.delegate = self
        mapView.userTrackingMode = MKUserTrackingMode.follow

        // Setup TableView
        tableView.delegate = self
        tableView.dataSource = self

        //Pulls TableData for UITableView
        DataService.ds.REF_VENUE.observe(.value, with: { (snapshot) in

            self.posts = [] // THIS IS THE NEW LINE
            if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {
                for snap in snapshot {
                    if let postDict = snap.value as? Dictionary<String, AnyObject> {
                        let key = snap.key
                        let post = Post(postKey: key, postData: postDict)
                        self.posts.append(post)
                    }

                    //Populates Map with annotations.
                    if let locationDict = snap.value as? Dictionary<String, AnyObject> {

                        let lat = locationDict["LATITUDE"] as! CLLocationDegrees
                        let long = locationDict["LONGITUDE"] as! CLLocationDegrees
                        let title = locationDict["NAME"] as! String
                        let center = CLLocationCoordinate2D(latitude: lat, longitude: long)
                        _ = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.20, longitudeDelta: 0.20))

                        let annotation = MKPointAnnotation()
                        annotation.coordinate = CLLocationCoordinate2DMake(lat, long)
                        annotation.title = title.capitalized
                        self.mapView.addAnnotation(annotation)


                    }
                }
            }
            self.tableView.reloadData()
        })
    }

2) Тогда мой tableView настроен нормально: posts[indexPath.row], вытягивая из класса, который был специально создан для него.

Но, возвращаясь к проблеме, все местоположения обнаруживаются. Карта перенаселена всеми местами. Может ли кто-нибудь помочь!

1 ответ

Решение

Поэтому я не могу провести вас через код, так как я не разработчик IOS. Но для этого вам нужно создать какие-то геолокационные запросы.

В вашем случае вы хотите фильтровать данные по их радиусу. (круговой запрос)

Для этого вам нужно иметь центр (возможно, местоположение вашего пользователя или результат поиска местоположений) и расстояние от каждого местоположения до центра.

Если у вас есть это, то запрос будет выглядеть так:

if (distance <= radius) {
  // location is in radius
}

Я только что создал библиотеку javaScript для этого, поэтому, возможно, это поможет вам (вы можете узнать, как рассчитать расстояние между двумя точками): https://github.com/Orlandster1998/geo-on-fire/blob/master/src/gof-utils.js#L215

или здесь документы: https://github.com/Orlandster1998/geo-on-fire/wiki/Basic-usage

Теперь, если у вас есть много данных для запроса, вам определенно следует использовать более продвинутый подход с геохэшингом.

Другие вопросы по тегам