2

我试图在移动时从我的 GeoFire 数据库中检索所有元素。例如:当我四处走动时,我想实时检索我周围元素的位置(移动或不移动)。

如果我使用以下代码:

var geoQuery = geoFire.query({
            center: [52.35500, 4.931000],
            radius: 0.1 //kilometers
});

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

我只在键改变位置(并输入我的查询)时收到更新。是否有可能检索特定范围内的所有元素作为一种快照?并从那里实时监控?

我当然可以查询整个数据库,然后使用

GeoFire.distance(location1, location2)

但这看起来是一个非常昂贵的选择。

4

2 回答 2

2

您可以在移动时调用GeoQuery.updateCriteria(newQueryCriteria)以更新查询的中心。

请注意,您可能还想注册一个key_exited回调。


查看GeoFire API 参考

于 2015-02-28T04:55:00.140 回答
0

您不需要查询整个数据库。您可以将您的位置存储在一个变量中,并在您当前位置(查询中心)发生变化时计算新的距离。

private places: any;

var onKeyEnteredRegistration = geoQuery.on("key_entered", function(key, location, distance) {
  this.places.push({ key, location, distance });
});

var onKeyExitedRegistration = geoQuery.on("key_exited", function(key, location, distance) {
  this.places = this.places.filter(place => place.key !== key);
});

updatePlacesDistance(currentLocation) {
  this.places.map(place => {
    place.distance = GeoFire.distance(currentLocation, place.location);
  });
}
于 2017-07-18T17:34:25.133 回答