我的问题与处理数据库(在我的例子中为 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/