[解決済み] firestoreでジオ "near "クエリを実行するには?
2023-03-18 15:29:02
質問
firebase の新しい firestore データベースは、位置情報ベースのジオクエリをネイティブにサポートしていますか? 例えば、10マイル以内の投稿を検索したり、50件の最寄りの投稿を検索したりできますか?
リアルタイムのfirebaseデータベースのために、geofireのような既存のプロジェクトがあるようですが、それらをfirestoreに適応させることは可能でしょうか?
どのように解決するのですか?
UPDATE: Firestore は現在、実際の GeoPoint クエリをサポートしていません。そのため、以下のクエリは正常に実行されますが、緯度によってのみフィルタリングされ、経度によってではないため、近くにない結果が多数返されます。最良の解決策は geohashes . 似たようなことを自分でやるには、次のものを見てください。 ビデオ .
これは、バウンディングボックス less than greater than クエリを作成することで可能です。 効率に関しては、私は言及することができません。
なお、~1マイルの緯度/経度オフセットの精度は見直す必要がありますが、ここでは手っ取り早い方法を紹介します。
SWIFT 3.0 バージョン
func getDocumentNearBy(latitude: Double, longitude: Double, distance: Double) {
// ~1 mile of lat and lon in degrees
let lat = 0.0144927536231884
let lon = 0.0181818181818182
let lowerLat = latitude - (lat * distance)
let lowerLon = longitude - (lon * distance)
let greaterLat = latitude + (lat * distance)
let greaterLon = longitude + (lon * distance)
let lesserGeopoint = GeoPoint(latitude: lowerLat, longitude: lowerLon)
let greaterGeopoint = GeoPoint(latitude: greaterLat, longitude: greaterLon)
let docRef = Firestore.firestore().collection("locations")
let query = docRef.whereField("location", isGreaterThan: lesserGeopoint).whereField("location", isLessThan: greaterGeopoint)
query.getDocuments { snapshot, error in
if let error = error {
print("Error getting documents: \(error)")
} else {
for document in snapshot!.documents {
print("\(document.documentID) => \(document.data())")
}
}
}
}
func run() {
// Get all locations within 10 miles of Google Headquarters
getDocumentNearBy(latitude: 37.422000, longitude: -122.084057, distance: 10)
}
関連
-
[解決済み】Firebaseのdevとprodの環境を分ける。
-
[解決済み】Firebase App '[DEFAULT]' が作成されていない - Flutter と Firebase で Firebase.initializeApp() を呼び出す。
-
[解決済み] アプリを別のFirebaseアカウントに転送する
-
[解決済み] Firebaseメッセージング、Server Keyはどこで入手できますか?
-
[解決済み] タイプ 'List<dynamic>' はタイプ 'List<Widget>' のサブタイプではありません。
-
[解決済み] どうしたら解決できますか?Error: Firebase プロジェクトのリストアップに失敗しました。詳細はfirebase-debug.logを参照してください。
-
[解決済み] 他の関数に影響を与えずに、いくつかの関数をCloud Functions for Firebaseにデプロイするには?
-
[解決済み] firebase cliからアプリを切り替えるには?
-
[解決済み] Firebaseストレージとアクセス制御・許可・オリジン
-
[解決済み] Cloud FunctionsとFirebase Functionsの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Firebase v3 updateProfile メソッド
-
[解決済み】Firebaseのdevとprodの環境を分ける。
-
[解決済み] Firebase Cloud MessagingのAPI KEYはどこにありますか?
-
[解決済み] プロバイダの取得ができない com.google.firebase.provider.FirebaseInitProvider
-
[解決済み] Firebaseメッセージング、Server Keyはどこで入手できますか?
-
[解決済み] タイプ 'List<dynamic>' はタイプ 'List<Widget>' のサブタイプではありません。
-
[解決済み] Firebaseストレージとアクセス制御・許可・オリジン
-
[解決済み] FirebaseアプリでCloud Storageにある全ファイルのリストを取得するには?
-
[解決済み] .firebase/hostingの目的は何ですか?ALPHANUM.cache
-
[解決済み] Firebaseストレージアーティファクト