[swift] GeoFireを使用した位置情報書き込み、読み込み

目次

GeoFireを使用した位置情報書き込み、読み込み

特定の位置からある範囲の位置情報検索モジュール「GeoFire」を使った位置情報書き込み、読み込み

GeoFireのインストール方法は以下を参照
[swift] Firebase3.x.x + GeoFire2.x.x Install方法(位置範囲検索メソッド)

位置情報書き込み

*例ではlocationInfoという場所にデータを保存している

        let latitude: CLLocationDegrees = 1.304843 //Singapore
        let longitude: CLLocationDegrees = 103.831824 //Singapore
        let key: String = "unique Key"
        let geofireRef = FIRDatabase.database().reference().child("locationInfo")
        let geoFire = GeoFire(firebaseRef: geofireRef)
        geoFire.setLocation(CLLocation(latitude: latitude, longitude: longitude), forKey: key){ (error) in
            if (error != nil) {
                print("An error occurred: \(error)")
            } else {
                print("Saved location successfully!")
            }
        }

位置情報検索

*locationInfoから10km範囲で位置検索を実施
*検索が終了するとquery.observeReadyWithBlockが呼ばれる。
*検索で返ってくるデータは保存したKeyとCLLocation

            let latitude: CLLocationDegrees = 1.304843 //Singapore
            let longitude: CLLocationDegrees = 103.831824 //Singapore
            let radius:Double = 10.0 //km
            let geofireRef = FIRDatabase.database().reference().child("courseStart")
            let geoFire = GeoFire(firebaseRef: locationInfo)
            let center = CLLocation(latitude: latitude, longitude: longitude)
            let query = geoFire.queryAtLocation(center, withRadius: radius)
            query.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in                
                print("Key '\(key)' entered the search area and is at location '\(location)'")
            })
            
            query.observeReadyWithBlock({
                //終了時の処理...
            })

Not a valid geo location for a huge radiusエラー

位置検索で検索半径を23km以上に設定すると

Not a valid geo location for a huge radius

というエラーが発生するので、検索範囲を23km以内にしておくこと

もしパフォーマンスが劣化したら、、

[firebase] GeoFireのパフォーマンス劣化と対処方法

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です