21

我需要将公里转换为弧度。这是正确的公式吗?我需要 MongoDB 中近球的弧度。

如果我需要将 5 公里转换为弧度,我会这样做:

5/6371

我得到了这个结果(看起来是否正确):

0.000784806153

更新

这不是数学问题,我真的需要知道我是否在从公里到弧度进行正确的计算,以便能够使用 MongoDB 进行地理空间查询。

4

4 回答 4

13

公里到弧度或距离和弧度的转换

我到了这里,很困惑,然后我看了一些可汗学院的视频,那时它更有意义,然后我能够实际查看其他来源的方程式来进一步教育自己。

这是我的思路。

  1. 我看到一个关于弧度的图表,我首先认为来自地理位置点的半径是错误的

  2. 相反,想象地球被完美地切成两半,然后只关注其中的一半。

在此处输入图像描述

  1. 现在把那一半面向你,看看数学图。

在此处输入图像描述

  1. 将数学图想象为从地球中心根据弧长测量地球边缘,毕竟地球是弯曲的,所以任何测量结果都会在地球表面弯曲。
  2. 弧度就像圆中的度数,弧长实际上是数学图中 A 和 B 之间的距离。
  3. 对你来说,鸟瞰图上它是一条直线,但实际上它只是沿地球边缘的 3d 空间中的一条曲线。
  4. 尤里卡!一个灯泡在我脑海里闪过。

distance = earth radius * radians

因此,使用一些非常简单的代数...

radians = distance / earth radius

公里 radians = distance in km / 6371

radians = distance in mi / 3959

有时候想一想很有趣。

仔细检查... https://www.translatorscafe.com/unit-converter/en/length/7-89/kilometer-Earth%E2%80%99s%20equatorial%20radius/

现在关于 Mongo v3.2 特别在 node.js 中使用 mongoose

尽管我尽了最大的努力,但 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 }
  ];

但教育似乎从来都不是浪费时间。

于 2018-03-10T18:54:08.977 回答
3

你是对的。在球面几何中,您将距离除以球体的半径。请注意,您应该保留这些单位。因此,如果您以千米为单位计算球体半径,那么您应该使用以千米为单位的距离。如果您使用英里,那么您应该使用以英里为单位的地球半径(大约:3,963.2)。

于 2015-11-25T11:59:32.143 回答
3

地球的赤道半径约为3,963.2 英里6,378.1 公里

注:1 公里 = 0.621371 英里

下面是一些简单的计算公式:

100 公里为英里: (100 * 0.621371)

100 公里到辐射 : 100 / 6378.1

100 英里到辐射 : 100 / 3963.2

因此,如果您有公里数据,那么您必须使用(100 / 6378.1),而对于英里数据,您可以使用 (100 / 3963.2)

于 2019-03-08T09:23:17.747 回答
1

转换

与弧度的距离:用与距离测量相同的单位将距离除以球体(例如地球)的半径。
弧度到距离:将弧度测量值乘以要转换为距离的单位系统中的球体(例如地球)的半径。

例如:如果您想将 5 英里转换为弧度,那么我们需要将距离(5 英里)除以球体的半径(也以英里为单位),即 3959。那么 5/3959 就是 0.0012629451...

谢谢

于 2018-08-03T18:14:14.547 回答