我用一个例子来解释我的结果。
我有一个用户表。每个用户在数据库中都有自己的纬度和经度位置。我使用的是firebase数据库。数据库看起来像:
$ cat Makefile
PACKAGE = foo
$(PACKAGE).egg: a b
@echo "Making $@..."
@touch $@
a b:
@touch $@
.PHONY: test_egg
test_egg:
ifeq ($(wildcard $(PACKAGE).egg),)
$(error $(PACKAGE).egg not found, please build it first)
else
@echo "Test the egg..."
endif
$ make test_egg
Makefile:10: *** foo.egg not found, please build it first. Stop.
$ make foo.egg
Making foo.egg...
$ make test_egg
Test the egg...
$ touch a b
$ make test_egg
Test the egg...
我需要使用当前位置查找圈内的用户。
我已查看geolib并找到方法isPointInCircle。但是使用它,我们需要迭代用户数据,并需要在每个循环上调用此方法。我需要避免这种多次调用,只需要调用一个方法就可以实现:
users {
user-id{
location{
latitude
longitude
}
}
}
结果应该是具有最近位置的数组。我怎样才能做到这一点?在此先感谢:)
答案 0 :(得分:1)
GeoFire是基于与特定点的接近度来查询Firebase实时数据库的唯一方法,无需下载所有数据和过滤客户端。
使用GeoFire,create a GeoQuery
for a location and a maximum distance:
var geoQuery = geoFire.query({
center: [10.38, 2.41],
radius: 10.5
});
然后你attach handlers for items that fall within this range:
var onKeyEnteredRegistration = geoQuery.on("key_entered", function(key, location, distance) {
console.log(key + " entered query at " + location + " (" + distance + " km from center)");
});
没有用于查找单个最近项的内置功能。您可以根据回调中的distance
参数来执行客户端操作。您仍然需要检索超出需要的数据,但希望它不会超过整个数据库。
答案 1 :(得分:0)
如果没有在本地获取整个数据集和流程,就无法索引和查询Firebase实时数据库。
我建议切换到新发布的测试版云端防火墙,它甚至将地理位置作为数据类型,并更好地支持类似sql的“查询位置”。
Cloud Firestore queries