GPS转换 - 像素坐标到GPS坐标

时间:2015-04-28 13:09:11

标签: gps maps coordinate

我正在根据视频数据进行一些移动跟踪。使用一些视频处理(即转换为自上而下的视图),我已经获得了移动路径。我现在需要将路径(x,y)的像素坐标转换为世界坐标(lat,long)。

我在图像中有四个参考点及其相关的纬度和经度点。 (Lat / long - >像素坐标):

(51.606733, -3.986813) -> (246, 399)
(51.607357, -3.987126) -> (407, 781)
(51.607337, -3.987266) -> (838, 781)
(51.606671, -3.987175) -> (1247, 402)

如何使用这些参考点将像素坐标转换为世界坐标?

1 个答案:

答案 0 :(得分:3)

问题

GPS投影到2D表面通常是一个棘手的问题,因为地球的表面是弯曲的,而不是平坦的。但是,如果您提供的样本GPS数据是实际数据(顺便说一下希望斯旺西天气晴朗!)我将假设数据集仅限于一个非常小的区域,因此您可以假设经度是平行的。那么问题就变成了一个简单的代数问题,你只需要两个x1 != x2y1 != y2的参考点。

解决方案

ISO坐标以(纬度,经度)=(y,x)给出,而绘制的坐标以(x,y)给出。我只是想告诉你如何做y(纬度)。我们需要将源(屏幕)的原点映射到目标的原点(世界),并将源的比例映射到世界的比例。我将按如下方式命名这些变量:

screenY0 //Screen origin (pixel corresponding to zero degrees latitude)
worldY0 //World origin (zero degrees latitude)
screenYscale //Screen scale (distance between 2 pixels)
worldYscale //World scale (distance between two latitude lines)
screenYpoint //Screen point (pixel y location)
worldYpoint //World point (latitude on the ground)

我将使用以下坐标对,因为它们距离最远:

(51.606733, -3.986813) -> (246, 399)
(51.607337, -3.987266) -> (838, 781)

我们的公式将如下所示:

screenY0 + screenYscale * screenYpoint = worldY0 + worldYscale * worldYpoint.

我们知道世界起源是0,世界范围是1,所以我们可以将其浓缩为:

screenY0 + screenYscale * screenYpoint = worldYpoint.

我们可以插入我们的值来形成2个联立方程式:

screenY0 + screenYscale * 399 = 51.606733screenY0 + screenYscale * 781 = 51.60733

求解:

screenY0 = 51.606733 - screenYscale * 399screenY0 = 51.607337 - screenYscale * 781

=> 51.606733 - screenYscale * 399 = 51.607337 - screenYscale * 781 
=> screenYscale * 781 - screenYscale * 399 = 51.607337 - 51.606733
=> screenYscale * 382 = 0.000604
=> screenYscale = 0.00000158115

因此,地图上的每个像素代表一定程度的经度0.00000158115。插入以找到原点:

   screenY0 + screenYscale * 399 = 51.606733 
=> screenY0 + 0.00000158115 * 399 = 51.606733 
=> screenY0 + 0.00063087885 = 51.606733
=> screenY0 = 51.606733 - 0.00063087885
=> screenY0 = 51.6061021212

因此,0的像素代表现实世界中的51.6061021212。

我们找到真实世界纬度的公式是:

51.6061021212 + 0.00000158115 * screenYpoint = worldYpoint。

测试

让我们用您的其他参考纬度测试一下:51.606671 - > 402

51.6061021212 + 0.00000158115 * screenYpoint = worldYpoint
51.6061021212 + 0.00000158115 * 402 = 51.606671
51.6061021212 + 0.0006356223 = 51.606671
51.6067377435 = 51.606671

这大致相同;考虑到1度纬度等于111.2km(在地球的平均半径),这相当于约7.4米的误差。

希望这有助于帮助您解决经度问题,即AKA x!如果您有任何问题或希望我澄清,请发表评论。

相关问题