我需要将公里转换为弧度。这个公式正确吗?我需要在 MongoDB 中使用 nearsphere(附近球体)时要用到弧度。
如果我需要将5公里转换为弧度,我会这样做:
5/6371
我得到了这个结果(看起来正确吗):
0.000784806153
更新
这不是一个数学问题,我确实需要知道我从千米转换到弧度的计算是否正确,以便能够在MongoDB中执行地理空间查询。
我需要将公里转换为弧度。这个公式正确吗?我需要在 MongoDB 中使用 nearsphere(附近球体)时要用到弧度。
如果我需要将5公里转换为弧度,我会这样做:
5/6371
我得到了这个结果(看起来正确吗):
0.000784806153
更新
这不是一个数学问题,我确实需要知道我从千米转换到弧度的计算是否正确,以便能够在MongoDB中执行地理空间查询。
我来到这里时感到困惑,后来我看了一些可汗学院的视频,在那时它变得更加清晰,然后我能够实际查看其他来源的方程式以进一步自我教育。
以下是我的思路。
我看到一个关于弧度的图表,我首先想到地理位置点的半径,这是错误的。
相反,想象地球被完美地切成两半,只关注其中一半。
距离 = 地球半径 * 弧度
因此通过一些非常简单的代数运算...
弧度 = 距离 / 地球半径
公里弧度 = 公里距离 / 6371
英里弧度 = 英里距离 / 3959
有时思考过程很有趣。
尽管我尽了最大努力,但mongo在2d索引上的$geoNear查询上无法像文档中记录的那样正确工作。 从未工作过
let aggregate = [
{
$geoNear: {
near: { type: 'Point', coordinates: lonLatArray },
spherical: false,
distanceField: 'dist.calculated',
includeLocs: 'dist.location',
maxDistance: distanceInMeters / (6371 * 1000),
query: {
mode: 'nearme',
fcmToken: { $exists: true }
}
}
},
{ $skip: skip },
{ $limit: LIMIT }
];
然而,当我改用2dsphere索引时,它完美地运行了。
let aggregate = [
{
$geoNear: {
near: { type: 'Point', coordinates: lonLatArray },
spherical: true,
distanceField: 'dist.calculated',
includeLocs: 'dist.location',
maxDistance: distanceInMeters,
query: {
mode: 'nearme',
fcmToken: { $exists: true }
}
}
},
{ $skip: skip },
{ $limit: LIMIT }
];
但教育似乎从来不会浪费时间。
您是正确的。 在球面几何中,我们将距离除以球体半径。注意要保持单位一致。如果您使用千米计算球体半径,则应使用千米作为距离单位。如果您使用英里,则应使用地球半径(约为3,963.2英里)作为距离单位。
因此,如果您的数据以千米为单位,则必须使用(100 / 6378.1),而对于英里数据,您可以使用(100 / 3963.2)。100千米转英里:(100 * 0.621371)
100千米转弧度:100 / 6378.1
100英里转弧度:100 / 3963.2
转换:
距离到弧度: 将距离按照相同单位除以球体的半径(例如地球)。
弧度到距离: 将弧度乘以球体的半径(例如地球),以想要转换成的距离的单位系统为准。
例如: 如果你想将5英里转换成弧度,则需要将距离(5英里)按照相同单位除以球体的半径(也是英里),即3959。然后5/3959等于0.0012629451...
谢谢