使用GeoFire通过Radius查询位置

问题描述 投票:1回答:1

我知道这是一个基本问题,但我仍然遇到很多麻烦。

我有一个存储社区活动的Firebase数据库。每个事件节点都有一个名为eventPlace的地理位置节点(使用GeoFire创建)(请参见下面的屏幕截图)。

使用GeoFire(和javascript),我如何查询整个数据库并获取某个位置/半径内的所有事件?考虑到数据的存储方式,这是否可行?或者我是否需要将所有位置节点移动到公共节点(eventPlaces ??)并查询该单个父节点?

请注意,我不是在寻求实时数据。这些位置先前存储过,不会经常更改。

提前致谢…

enter image description here

node.js firebase geofire
1个回答
2
投票

现在,geofire可以作为开启地理查询的索引,并提供您想要的文档的密钥(将存储在单独的“集合”中)。

你应该使用geofire和一个单独的“集合”(称之为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查询。

© www.soinside.com 2019 - 2024. All rights reserved.