猫鼬 - 两个坐标之间的最小距离(不是 GEOJson 数据)

Mongoose - Least distance between two co-ordinates (Not GEOJson Data)

操作员将从建筑物列表中选择一个。

然后从前端点击它。

建筑物列表存储在 MongoDB 数据库中,每个建筑物都有一个 x,y 点,显示距原点 0 的距离。

该列表存储在 MongoDB 数据库中并通过节点访问。

每个建筑物都有一个 x,y 坐标 -- 仅作为样本,不是 geojson 数据

赞 101,203 等

Mongoose 函数将:

  1. 操作员单击按钮并使用坐标

  2. 该函数将搜索建筑物列表,return 最接近提供的建筑物 --- 不是最接近 0 原点的建筑物。

关于如何使用 Mongoose 有什么建议吗?

谢谢! 凯伦

这真的只是一道数学题。 考虑一组具有这些 x,y 坐标的建筑文档:

var r =   [
    {_id:1, x:7, y:11}
    ,{_id:2, x:15, y:10}
    ,{_id:3, x:10, y:9}
    ,{_id:4, x:1, y:8}
    ,{_id:5, x:3, y:7}
    ,{_id:6, x:16, y:5}
    ,{_id:7, x:4, y:3}
    ,{_id:8, x:7, y:3}
    ,{_id:9, x:6, y:1}
    ,{_id:10, x:21, y:1}
];

一个按钮被点击并产生点6,5:

var P = {x:6, y:5};

要找到最近的建筑物,只需使用勾股定理迭代和计算距离即可:

db.foo.aggregate([
    //  Don't have to worry about absolute value of x-x1 thanks to                                         
    //  pow(2) making it positive                                                                          
    //  dist = sqrt((x-x1)^2 + (y-y1)^2)                                                                   
    {$addFields: {dist: {$sqrt: {$add:[{$pow:[{$subtract:['$x',P.x]},2]}, {$pow:[{$subtract:['$y',P.y]},2]}]}} }},
    {$sort: {'dist':1}},
    {$limit: 1}
]);

{ "_id" : 8, "x" : 7, "y" : 3, "dist" : 2.23606797749979 }

删除 $limit 或将其更改为更大的数字以查看下一个最近的建筑物。