r语言 - 从任意笛卡尔坐标转换到UTM?



在我的研究中,我们在田野中设置了一个10m x 10m的直角网格(以1m的比例跟踪网格内的动物位置)。

然后我们收集了一些赌注的GPS数据。

所以,我有一些x, y值及其相应的UTM东纬度/北纬和许多,许多没有GPS数据的x, y值。

使用有GPS数据的参考点,我想构建一个脚本,我可以输入其他x, y值并获得UTM Easings/Northings作为输出。

我发现了很多关于UTM和lat/long之间转换的信息,但到目前为止还没有找到关于如何在GPS值之间转换到任意笛卡尔坐标的信息。

示例参考数据:

x_coord y_coord Northing     Easting
10      10      4740481.089  709795.318
20      20      4740494.122  709790.115
20      30      4740497.928  709780.943
10      40      4740492.745  709767.865
30      20      4740503.329  709793.934

我希望能够输入一个值,如(22,37),并获得北/东值。

任何帮助或指导将不胜感激!

你的问题的答案很复杂,但不是无法解决的。最简单的解决方案是使用GIS。你可以画出你有GPS数据的点,然后在已知的参考点之间添加线和点来填补空白。

下一个方法是在GIS中从头开始绘制(使用线)您的整个网格,靠近您的调查位置。然后把你的GPS定位到正确的位置。你可以移动和旋转网格,直到它适合GPS点。

使用这两种方法,您可以在GIS中查询本地网格上每个方格的国家网格值。

替代步骤是数学的,对于多个点建议使用电子表格。为了将本地坐标转换为国家坐标,必须首先确定两者之间的角度差。假设您有一个基线,两端都有两个GPS读数,从较大的读数中减去较小的读数,得到直角三角形的两条边(x和y)的长度,然后使用公式tan的-1 (y/x)次方来计算角度的差异。

现在你有了角度的差异,你需要将所有的局部网格(笛卡尔)坐标转换为极坐标(距离和角度),基于你的局部网格0,0。对于每个网格点,使用公式距离=√(x方+ y方)角度= tan-1 (y/x)

一旦你有了每个点的角度,你只需加上或减去(适当的)本地网格和国家网格之间的角度差。

校正角度后,您可以将网格点转换回x,y数据,使用公式x=距离× cos(角度)y=距离× sin(角度)

这些值可能相对于你的第一个点0,0,所以你可能需要将它们添加到你的GPS读数中,以获得最终的国家电网读数。

你可以看到为什么数学方法需要一个电子表格,如果你这样做的多个数据点。我试过了,它可以工作(当使用某个品牌的电子表格时,需要将度转换为弧度并再转换回来,这增加了复杂性)。

所以,对未来野外工作的建议——不要只使用GPS,也要使用磁罗盘。理想情况下,沿着罗盘点(如南北向、东西向)建立网格。如果你不能,用指南针来确定两者之间的角度差异。如果你不需要一个局部网格,不要使用一个,使用基线和极坐标代替,因为它将节省大量的计算。熟悉GIS,它会在底层为你做所有的数学工作。

最新更新