使用 GeoFire 按半径查询位置
Query Location by Radius with GeoFire
我知道这是一个基本问题,但我还是遇到了很多麻烦。
我有一个存储社区事件的 Firebase 数据库。每个事件节点都有一个名为 eventPlace 的地理位置节点(使用 GeoFire 创建)(请参见下面的屏幕截图)。
使用 GeoFire(和 javascript),我将如何查询整个数据库并获取某个 location/radius 内的所有事件?考虑到数据的存储方式,这可能吗?或者我是否需要将所有位置节点移动到一个公共节点(eventPlaces??)并查询该单个父节点?
请注意,我不是在寻求实时数据。这些位置是以前存储的,不会经常更改。
提前致谢...
就目前而言,geofire
有点用作进行地理查询的索引,并提供所需文档的键(将存储在单独的 "collection" 中)。
您应该使用 geofire
和一个单独的 "collection"(称之为 eventPlaces)
var firebaseRef = firebase.database().ref('eventPlaces');
var geoFire = new GeoFire(firebaseRef);
现在您可以将它用作您的事件的索引,并且可以像这样向它添加项目。
geoFire.set('-K_Pp-3RBJ58VkHGsL5P', [40.607765, -73.758949]);
您的 Firebase RTDB 现在将如下所示:
{
'events': {
'-K_Pp-3RBJ58VkHGsL5P': {
// All your data here
}
},
'eventPlaces': {
'-K_Pp-3RBJ58VkHGsL5P': {
'g': 'dr5x186m7u',
'l': [40.607765, -73.758949]
}
}
}
所以最后,当您对 geoFire
进行查询时:
geoFire.query({
center: [40.607765, -73.758949],
radius: 10
}).on('key_entered', (key, location, distance) => {
console.log(key + ' entered query at ' + location + ' (' + distance + ' km from center)');
});
您最终会返回文档的密钥,为此您可以对该单个文档执行正常的 Firebase 查询。
我知道这是一个基本问题,但我还是遇到了很多麻烦。
我有一个存储社区事件的 Firebase 数据库。每个事件节点都有一个名为 eventPlace 的地理位置节点(使用 GeoFire 创建)(请参见下面的屏幕截图)。
使用 GeoFire(和 javascript),我将如何查询整个数据库并获取某个 location/radius 内的所有事件?考虑到数据的存储方式,这可能吗?或者我是否需要将所有位置节点移动到一个公共节点(eventPlaces??)并查询该单个父节点?
请注意,我不是在寻求实时数据。这些位置是以前存储的,不会经常更改。
提前致谢...
就目前而言,geofire
有点用作进行地理查询的索引,并提供所需文档的键(将存储在单独的 "collection" 中)。
您应该使用 geofire
和一个单独的 "collection"(称之为 eventPlaces)
var firebaseRef = firebase.database().ref('eventPlaces');
var geoFire = new GeoFire(firebaseRef);
现在您可以将它用作您的事件的索引,并且可以像这样向它添加项目。
geoFire.set('-K_Pp-3RBJ58VkHGsL5P', [40.607765, -73.758949]);
您的 Firebase RTDB 现在将如下所示:
{
'events': {
'-K_Pp-3RBJ58VkHGsL5P': {
// All your data here
}
},
'eventPlaces': {
'-K_Pp-3RBJ58VkHGsL5P': {
'g': 'dr5x186m7u',
'l': [40.607765, -73.758949]
}
}
}
所以最后,当您对 geoFire
进行查询时:
geoFire.query({
center: [40.607765, -73.758949],
radius: 10
}).on('key_entered', (key, location, distance) => {
console.log(key + ' entered query at ' + location + ' (' + distance + ' km from center)');
});
您最终会返回文档的密钥,为此您可以对该单个文档执行正常的 Firebase 查询。