mongodb - 在 NOSQL 数据库中搜索 GPS 点的最佳方法

标签 mongodb algorithm sorting search gps

我的问题与处理数据库(在我的例子中为 nosql DB MongoDB)中与数据相关的 GPS 点的最佳方法是什么有关,以便仅返回最近的点。

我的数据库中有一组用户。 现在我需要创建一个新的“表”,将用户与 GPS 点关联起来(一个用户可以有更多点)。例如:

User,lat,long
ALFA,40,50
ALFA,30,50
BETA,42,33
...

服务器应该提供一个函数,在给定输入中的位置的情况下,返回与输入附近的点关联的用户列表。 例如:

function nearestUsers(lat,lon){
 var mindif = 10000;
 var closest;

 users = getAllRecordsFromDataBase(); //query for MongoDB that returnst all records of the new table

 for ( i = 0 ; i < users.length; i++){
    if(this.distance(lat,lon,users[i].lat,users[i].lon)>mindif) delete users[i];
 }

 return users;

}

距离函数如下:

function distance(lat1, lon1, lat2, lon2) {
  lat1 = Deg2Rad(lat1);
  lat2 = Deg2Rad(lat2);
  lon1 = Deg2Rad(lon1);
  lon2 = Deg2Rad(lon2);
  var R = 6371;
  var x = (lon2 - lon1) * Math.cos((lat1 + lat2) / 2);
  var y = (lat2 - lat1);
  var d = Math.sqrt(x * x + y * y) * R;
  return d;
}

恐怕对于大数据量来说,这种方法会很慢。哪种方法可以使算法更具可扩展性?有什么建议吗?

考虑到此功能位于使用 MongoDB 的 Node.js 服务器内部,我可以直接通过查询或使用数据库中的某些特殊结构来实现此功能吗?

最佳答案

您可以使用mongodb geospatial indexes and queries 。只需将您的点存储为 GeoJSON 点,并使用 GeoJSON 折线作为 bbox-es 和 $geoWithin 执行查询.

关于mongodb - 在 NOSQL 数据库中搜索 GPS 点的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42646873/

相关文章:

javascript - Node.js:使用 Mongoose 更新文档

mongodb - 在 Pymongo 中创建集合之间的关系并渲染它 Jinja

C算法反转1024x1024矩阵?

javascript - 排序错误的 array.Javascript

php - 尝试使用 php 对数组数组进行排序。拔头发?

jquery - 无法在 openshift 上的 Nodejs 和 mongodb 中进行 POST

mongodb - Robo 3T使用ssh连接mongodb

c - 并行冒泡排序被阻止

algorithm - 图检查三个节点之间是否存在路径

javascript - 在 Javascript 中排序列表