新しいFirestore DBを使用すると、GeoPointを保存できます。それらに基づいてクエリする方法はありますか?
たとえば、各コレクションドキュメントがlocation
型のgeopoint
フィールドを取得した場合。任意の座標に最も近い10個のドキュメントを取得するにはどうすればよいですか?
ドキュメントはこれをカバーしていないようです。私はこのようなものを試しました:
someRef.where('location', '>', geopoint).limit(10).get();
明らかにこれはあまり意味がありませんが、私はここでいくつかのものを試していますか????
@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
アルゴリアに半径を指定して地理検索を行わせることができます。必要なのは、必要なドキュメントでトリガーするクラウド機能を構築し、それらをAlgoliaに同期することだけです。
ジオ検索をご覧ください https://www.algolia.com/doc/guides/searching/geo-search/
また、Firebaseのドキュメントでは、Algoliaが複雑な検索の解決策としてここに掲載されています https://firebase.google.com/docs/firestore/solutions/search
Algoliaのようなサードパーティサービスを使用するのではなく、iOSとFirestoreのGeoFireを複製するAndroidの両方に対応した新しいライブラリを使用します。 GeoFirestore 、完全に文書化され、十分にテストされています。このライブラリはすでに多くのデモプロジェクトで使用しており、完全に機能するようです。