3

私の結果を得るための例を説明します。現在の位置ノードでサークル内の最も近いユーザーを取得するjs

私はusersテーブルを持っています。各ユーザーは、データベース上の緯度と経度のある場所を持っています。私はfirebaseデータベースを使用しています。 DBは次のようになります。

users { 
    user-id{ 
    location{ 
     latitude 
     longitude 
    } 
    } 
} 

現在の場所を使用して円内のユーザーを探す必要があります。

私はgeolibを調べて、方法isPointInCircleを見つけました。しかしこれを使用して、ユーザーのデータを繰り返し処理し、各ループでこのメソッドを呼び出す必要があります。最寄りの位置を有する配列でなければなりません

findNearestUsers(currentLocation,userLocations); 

結果:私は、この複数の呼び出しを避ける等の唯一のメソッド呼び出しを達成する必要があります。これどうやってするの?ありがとうございます。

+1

https://github.com/firebase/geofire –

+0

はい、私はこれを調べました。しかし、私の要求についての論理を見つけることができません –

+0

補足として、新しいFirestoreは最終的にジオクエリを実装する必要があります。 – cutiko

答えて

1

GeoFireは、すべてのデータおよびフィルタリングクライアント側をダウンロードすることなく、特定のポイントへの近接性に基づいてFirebaseリアルタイムデータベースを照会するための唯一の方法です。その後、

var geoQuery = geoFire.query({ 
    center: [10.38, 2.41], 
    radius: 10.5 
}); 

あなたがattach handlers for items that fall within this range:GeoFireあなたcreate a GeoQuery for a location and a maximum distance

var onKeyEnteredRegistration = geoQuery.on("key_entered", function(key, location, distance) { 
    console.log(key + " entered query at " + location + " (" + distance + " km from center)"); 
}); 

シングル、最も近い項目を見つけるための組み込みの機能はありません。コールバックのdistanceパラメータに基づいて、そのクライアント側を行うことができます。あなたはまだ必要以上に多くのデータを取得していますが、うまくいけばそれはデータベース全体よりも少ないでしょう。

+0

私の遅い返事には申し訳ありません。ご返信ありがとうございます。私はこれでやりましょう –

0

Firebaseリアルタイムデータベース全体を取得せずにローカルで処理する方法はありません。

代わりに、データ型としてジオポイントがあり、SQLのような「クエリ」のサポートが改善された新しいリリースのベータクラウドFirestoreに切り替えることをお勧めします。
Cloud Firestore queries

+0

提案をありがとう。しかし私は私の現在のプロジェクトを試すことはできません。火災基地を使用してほぼ完了したため。私は次のプロジェクトに挑戦します。データベースの代わりに、ジオロケーション機能のために何かを提案できますか? –

+0

Firestoreはジオデータをサポートしていますが、[ジオクエリを現在サポートしていません](https://stackoverflow.com/a/46608540)です。 ** Firebase Realtime Databaseで同じことを実現するための素晴らしい方法です**、それはGeoFireというライブラリです。今日のジオクエリのサポートが今日必要な場合は、[推奨ルート](https://stackoverflow.com/a/46554998)です。 –

関連する問題