使用firebase提高经纬度数据搜索效率的方法?
我在firebase中有一个名为使用firebase提高经纬度数据搜索效率的方法?,firebase,search,firebase-realtime-database,Firebase,Search,Firebase Realtime Database,我在firebase中有一个名为users的表,该表如下所示: 该表的结构如下: users |_ uid1 |_ latitude: ... longitude: ... name: ... uid2 |_ latitude: ... longitude: ... name: ... 我想编写一个名为getUserByLocation的云函数,示例请求url为http
users
的表,该表如下所示:
该表的结构如下:
users
|_
uid1
|_
latitude: ...
longitude: ...
name: ...
uid2
|_
latitude: ...
longitude: ...
name: ...
我想编写一个名为getUserByLocation
的云函数,示例请求url为https://someurl/getUserByLocation?latitude=40.45654&longitude=-86.68468
,以一对纬度
和经度
为原点,然后转到users
表查找10英里内的所有用户,然后将其返回。这看起来并不难,事实上,我有一些有效的方法:
latLower
,latUpper
,longLower
和longUpper
,然后像这样画一个圆圈:
经度
也在范围内(介于longLower
和longUpper
之间),则应返回此用户用户位置
,其中每个子项都是由GeoFire管理的用户密钥和位置。您可以使用它更有效地查询某个位置的半径,并检索边界内用户的ID–但是,您必须为找到的每个用户ID获取用户数据
const geofire = require('geofire');
const geoFire = new geofire(admin.database().ref('user-location'));
const geoQuery = geoFire.query({ center, radius });
let keyListener = null;
let keyLocations = {};
return new Promise((res, rej) => {
geoQuery.on('ready', function () {
console.log(keyLocations);
keyListener.cancel();
geoQuery.cancel();
res();
});
keyListener = geoQuery.on('key_entered', (key, coordinates, distance) => {
keyLocations[key] = { coordinates, distance };
});
});
不管是谁投了我一票。。。。有什么原因吗?我不在乎声誉,但否决票会让这个问题被更少的人看到,至少让我知道它有什么问题?拜托,这是一个结构合理的问题你听说过GeoFire吗@Callam不,我没有,我会先看一看,如果我对此有疑问,我会发布在这个网站上。但如果最终这是解决我问题的可行方案,我会让你知道的,谢谢!我试过了,但我认为我不能在云计算功能中使用它。我不认为在客户端使用它是一个好主意,我正在编写一个移动设备应用程序,所以它将expensive@K.Wu我已经实现了一个搜索引擎,它使用GeoFire来查询一个位置,然后通过请求每个孩子来分别过滤密钥。您可以通过请求和筛选批次的子项来对结果进行分页。在云函数中使用GeoFire有什么困难?