web-dev-qa-db-ja.com

FireStoreでGeoFireを使用する方法はありますか?

GeoFireはRealtime Databaseと緊密に結合されていますが、地理クエリはFirestoreへの移行を検討している多くのアプリの一般的な機能依存関係です。 Firestore環境の場所のハッシュ/取得を複製する方法はありますか?

51
urgentx

素晴らしいニュース。 iOSとAndroidの両方のライブラリがあり、GeoFire for Firestoreを複製します。ライブラリは GeoFirestore と呼ばれます。完全なドキュメントがあり、十分にテストされています。現在、アプリで使用していますが、見事に機能します。このコードはGeoFireのコードと非常によく似ているため、数分で習得できます。

17
Nikhil Sridhar

Edit(2019年7月1日):私が最初に以下の答えを書いたとき、ネイティブの地理クエリがCloud Firestoreにすぐに来ると楽観的でしたが、明らかにそうでした起こらない。まだ長期計画にありますが、現時点では、コミュニティが構築したライブラリを使用するか、 GeoHashes または S2 Geometry ライブラリを使用して独自のライブラリを作成するのが最善の選択肢です。

Realtime DatabaseのGeoFireライブラリはGeoHashesを使用して構築されており、これらのライブラリのロジックをCloud Firestoreに移植するのは比較的簡単です。


Cloud Firestoreチームのサムはこちら。 SUPERCILEXが言ったように、Cloud FirestoreはGeoPointデータタイプを既にサポートしています。製品にネイティブのジオクエリを追加するために一生懸命取り組んでいます。

ネイティブのジオクエリが近づいているため、GeoFireをCloud Firestoreに移植しません。代わりに、ネイティブクエリをより早く取得するようにエンジニアリングの努力をリダイレクトします。

現在ジオクエリが必要で、独自のライブラリを構築したくない場合は、Realtime Databaseを使用してください。

54
Sam Stern

頭に浮かぶソリューションは、Googleが presence で提案しているように、地理クエリのためだけにリアルタイムデータベースを追加し、2つのデータベースをCloud Functionsと同期することです。

私の場合、あまり同期する必要さえありません。 Realtime Databaseにuidとその場所のリストを保持し、すべての地理クエリを実行します。

11
urgentx

元のポスターが最初にこの質問をしてから、新しいプロジェクトが導入されました。プロジェクトはGEOFirestoreと呼ばれます。

このライブラリを使用すると、円内のクエリドキュメントのようなクエリを実行できます。

  const geoQuery = geoFirestore.query({
    center: new firebase.firestore.GeoPoint(10.38, 2.41),
    radius: 10.5
  });

GeoFirestoreはnpm経由でインストールできます。 Firebaseを個別にインストールする必要があります(GeoFirestoreへのピア依存関係であるため):

$ npm install geofirestore firebase --save
7
ra9r

Cloud Firestoreはネイティブでジオポイントをサポートしています。サポートされている データ型 を参照してください。そして、データの設定とクエリにも使用できる GeoPoint クラスがあります。

query.whereEqualTo("location", GeoPoint(lat, long))
1
SUPERCILEX