【问题标题】:Get nearest users within a circle by current location node js通过当前位置节点js获取圈内最近的用户
【发布时间】:2018-04-23 09:41:44
【问题描述】:

我用一个例子来解释,以达到我的结果。

我有一个用户表。每个用户在数据库中都有他们的位置和经度和纬度。我正在使用firebase数据库。所以数据库看起来像:

users {
  user-id{
     location{
        latitude
        longitude
     }
  }
}

我需要使用我当前的位置来查找圈子内的用户。

我查看了 geolib 并找到了一个方法 isPointInCircle 。但是使用这个,我们需要迭代用户数据并且需要在每个循环上调用这个方法。我需要避免这种多次调用并只使用一个方法调用来实现,例如:

findNearestUsers(currentLocation,userLocations);

结果应该是具有最近位置的数组。我怎样才能做到这一点?在此先感谢:)

【问题讨论】:

  • 是的,我已经研究过这个。但我找不到任何关于我的要求的逻辑
  • 附带说明,新的 Firestore 最终应该实现地理查询...

标签: javascript node.js google-maps firebase-realtime-database geolocation


【解决方案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 参数执行该客户端。您仍然会检索到比需要更多的数据,但希望它会少于整个数据库。

【讨论】:

  • 抱歉我的回复晚了。感谢你的回复。让我来处理这个
【解决方案2】:

如果不获取整个数据集并在本地处理,就无法索引和查询 Firebase 实时数据库。

我建议改用新发布的测试版 Cloud Firestore,它甚至具有地理点作为数据类型,并且更好地支持类似 sql 的“where 查询”。
Cloud Firestore queries

【讨论】:

  • 感谢您的建议。但我无法尝试我目前的项目。因为使用firebase几乎完成了。我会尝试我的下一个项目。除了数据库,您可以为地理定位功能提出任何建议吗?
  • 虽然 Firestore 支持地理数据,但它支持 not currently support geo-queries。 有一种在 Firebase 实时数据库上完成相同任务的好方法,它是一个名为 GeoFire 的库。如果您今天需要地理查询支持,那就是recommended route。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
相关资源
最近更新 更多