我需要将公里数转换为弧度。这是正确的公式吗? 在MongoDB中我需要radars for nearsphere。
如果我需要将5公里转换为弧度,我会这样做:
5/6371
我得到了这个结果(看起来是否正确):
0.000784806153
更新
这不是数学问题,我真的需要知道我是否正在进行从公里到弧度的正确计算,以便能够使用MongoDB进行地理空间查询。
答案 0 :(得分:3)
你是对的。 在球面几何中,您将距离除以球体的半径。 请注意你应该保留单位。因此,如果以千米为单位计算球体半径,则应使用以千米为单位的距离。如果你使用里程,那么你应该以英里为单位使用地球半径(约为3,963.2)。
答案 1 :(得分:3)
我来到这里,感到困惑,然后我看了一些可汗学院的视频,在那一点上更有意义,然后我能够真正看到来自其他来源的方程式,以进一步教育自己。
这是我的思路。
我看到一个关于弧度的图表,我首先想到地理定位点的半径这是错误的。
相反,想象一下地球完全切成两半,只关注其中一半。
distance = earth radius / radians
因此有一些非常简单的代数......
radians = distance / earth radius
<强>公里强>
radians = distance in km / 6371
<强>英里强>
radians = distance in mi / 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 }
];
但教育似乎不是浪费时间。
答案 2 :(得分:1)
要转换:
到弧度的距离:将距离除以球体(例如地球)的半径,以与距离测量相同的单位。
弧度到距离:将弧度测量值乘以要转换距离的单位制中球体(例如地球)的半径。
例如:如果要以弧度转换5英里,则需要将距离(5英里)除以球体的半径(也以英里为单位),即3959。那么5/3959是0.0012629451 ...
谢谢
答案 3 :(得分:0)
地球的赤道半径约为 3,963.2英里 s或 6,378.1公里。
注意:1 KM = 0.621371英里
以下是一些简单的计算公式:
100公里为英里:(100 * 0.621371)
辐射100公里: 100 / 6378.1
辐射的100英里: 100 / 3963.2
因此,如果您具有公里中的数据,则必须使用(100 / 6378.1);对于英里数据,可以使用 (100 / 3963.2)