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

GPS转换-像素坐标到GPS坐标,gps,maps,coordinate,Gps,Maps,Coordinate,我正在根据视频数据进行一些运动跟踪。通过一些视频处理(即转换为自顶向下视图),我获得了一条运动路径。我现在需要将路径的像素坐标(x,y)转换为世界坐标(lat,long) 我在图像中有四个参考点及其相关的纬度和经度点。(横向/纵向->像素坐标): 如何使用这些参考点将像素坐标转换为世界坐标?问题 GPS投影到2D表面通常是一个棘手的问题,因为地球表面是弯曲的,而不是平坦的。但是,如果您提供的示例GPS数据是实际数据(顺便说一句,希望斯旺西的天气愉快!),我将假设数据集仅限于一个非常小的区域,因此

我正在根据视频数据进行一些运动跟踪。通过一些视频处理(即转换为自顶向下视图),我获得了一条运动路径。我现在需要将路径的像素坐标(x,y)转换为世界坐标(lat,long)

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

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

问题 GPS投影到2D表面通常是一个棘手的问题,因为地球表面是弯曲的,而不是平坦的。但是,如果您提供的示例GPS数据是实际数据(顺便说一句,希望斯旺西的天气愉快!),我将假设数据集仅限于一个非常小的区域,因此您可以假设经线是平行的。然后问题就变成了一个简单的代数问题,您只需要两个参考点,其中
x1!=x2和y1!=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.606733
screenY0+screenYscale*781=51.60733

解决:

screenY0=51.606733-screenYscale*399
screenY0=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*屏幕点=世界点。


测试 让我们用另一个参考纬度来测试一下: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米的误差


希望这能帮助你解决经度问题,也就是x!如果您有任何问题或希望我澄清,请留下评论。

您找到解决问题的方法了吗?我发现这个答案非常棒,谢谢您。有什么诀窍来处理定向问题吗?代表地图的图像顺时针旋转几度,因此坐标不匹配。。。提前谢谢!如果我没有弄错,pixelY=(latitudeStart+1*latitudeInput)/(yStart+yScale)?也谢谢你详细的回答
51.6061021212 + 0.00000158115 * screenYpoint = worldYpoint
51.6061021212 + 0.00000158115 * 402 = 51.606671
51.6061021212 + 0.0006356223 = 51.606671
51.6067377435 = 51.606671