web-dev-qa-db-ja.com

Firebase Cloud Firestoreのコレクション内の最も近いGeoPointsをクエリする方法は?

新しいFirestore DBを使用すると、GeoPointを保存できます。それらに基づいてクエリする方法はありますか?

たとえば、各コレクションドキュメントがlocation型のgeopointフィールドを取得した場合。任意の座標に最も近い10個のドキュメントを取得するにはどうすればよいですか?

ドキュメントはこれをカバーしていないようです。私はこのようなものを試しました:

someRef.where('location', '>', geopoint).limit(10).get();

明らかにこれはあまり意味がありませんが、私はここでいくつかのものを試していますか????

29
ProblemsOfSumit

ジオクエリはまだ公開されていないため、現在、これを行う方法はありません。

歴史的に、Firebase Realtime Databaseは geohashes というライブラリで GeoFire -を使用していましたが、近い将来に実際のジオクエリを公開する予定があるため、そのライブラリは更新していませんFirestoreへ。似たようなことを自分で行う方法を学ぶには、 このビデオ をご覧ください。

32
Mike McDonald

@problemsofsumitが最初にこの質問をしてから、新しいプロジェクトが導入されました。プロジェクトは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

Cdn経由でリンクできます: https://cdn.jsdelivr.net/npm/[email protected]/dist/geofirestore.min.js

7
ra9r

アルゴリアに半径を指定して地理検索を行わせることができます。必要なのは、必要なドキュメントでトリガーするクラウド機能を構築し、それらをAlgoliaに同期することだけです。

ジオ検索をご覧ください https://www.algolia.com/doc/guides/searching/geo-search/

また、Firebaseのドキュメントでは、Algoliaが複雑な検索の解決策としてここに掲載されています https://firebase.google.com/docs/firestore/solutions/search

3
Troels Lenda

Algoliaのようなサードパーティサービスを使用するのではなく、iOSとFirestoreのGeoFireを複製するAndroidの両方に対応した新しいライブラリを使用します。 GeoFirestore 、完全に文書化され、十分にテストされています。このライブラリはすでに多くのデモプロジェクトで使用しており、完全に機能するようです。

0
Nikhil Sridhar