从以毫米为单位的距离计算坐标

时间:2018-10-16 15:06:26

标签: c math latitude-longitude

我正在写一个软件,负责记录某些机器零件的位置。

现在是这种情况:

  • 机器上固定有1个RTK固定GPS接收器(精度为+/- 2cm)。使用2个不同的位置来计算标题
  • 机器上有2条手臂(左右手臂),可以彼此独立地向外或向内旋转
  • 机器上有固定位置的1条手臂(中臂)

我已经拥有的东西:

一个软件,用于计算手臂外部位置的位置(这就像一个护身符)。这将生成一个shapefile作为日志文件,其中可以看到手臂的位置,并且对每个标题都适用。

问题是:

该算法使用以mm为单位的增量X和增量Y距离来计算臂的位置。 我的假设是经度0.00000001在X轴(source)上等于1.1毫米。男孩,我怎么了...

使用shapefile查看器测量生成的shapefile时,它将返回2.19米,而不是计算出的3.25米。请注意,这位于纬度52.810146939(北半球)上。

这样的问题:

有人知道如何形成一个以纬度或经度为起点,距离为单位[mm],然后返回校正后的纬度或经度的公式吗?或者如何计算相对增量坐标值以将其与原始坐标相加?

我有一段代码:

Armlocations->leftarm.locationX = ownLocation.locationX + MM_TO_COOR(deltaX);
Armlocations->leftarm.locationY = ownLocation.locationY + MM_TO_COOR(deltaY);

deltaX和deltaY是应加到坐标上的距离(以毫米为单位)。宏MM_TO_COOR是这样的:

#define COOR_TO_MM(x)   ((x) * 110000000)
#define MM_TO_COOR(x)   ((x) / 110000000)

问题不在于编程->我明白了这一点,但更多地涉及到数学。

1 个答案:

答案 0 :(得分:0)

我确定这是不合适的地方,使用https://gis.stackexchange.com可能更合适。

关于纬度,每度总是(大约)111公里,因此.00000001°(1E-8°)实际上在y方向应为1.1 mm。

经度的关系确实取决于您当前的纬度:在这里,每度的因数是111 km乘以cos(纬度)。在您的情况下,这将(在球形地球上)使系数为0.60445804192912,从而导致每度67.1公里或每1E-8°0.671毫米。在我们的earch上,该值在极点处被展平,但略有不同,但应该大致相同(但是,我无法确定误差有多大。)

您确定您的GPS设备具有几毫米的高分辨率吗?