地理坐标(经纬度坐标)和屏幕坐标(xy坐标)间的转换

本文介绍了一种基于两个锚点的地理坐标与屏幕坐标之间的转换算法。通过将地理坐标平面化并利用向量法,实现了地理坐标到屏幕坐标的精确转换,反之亦然。此方法适用于地图应用中坐标系统的快速切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在我们的屏幕上,有一张地图,这张地图经过缩放、平移、旋转,最终地理坐标和屏幕坐标的关系大致如下图所示:

这种关系要怎么描述呢?我们可以假设地图是一张纸,而屏幕是一堵墙。只要我们有两个图钉,我们就能把纸定在墙上。我们把这两个点称为锚点。锚点在屏幕坐标系上的坐标是(x1,y1)和(x2,y2),对应在地理坐标系上的坐标是(lon1,lat1)和(lon2,lat2)。

那现在的问题就变成了,已知两个锚点的坐标,

(1)地理坐标转屏幕坐标:已知任意一点的地理坐标(lon,lat),求它在屏幕上的坐标(x,y)

(2)屏幕坐标转地理坐标:已知任意一点的屏幕坐标(x,y),求它的经纬度坐标(lon,lat)
转换算法
1、地理坐标平面化

首先是地理坐标的平面化转化。在一个小范围内(例如是方圆几公里内),我们可以假设地面是平的,而不是弯的。如果经纬度都用弧度表示,那么1纬度对应的长度是:

1lat_len=R*lat

其中R是地球半径。

而相同经度间的距离会随着纬度的增加而减少,在lat这一纬度下,1经度对应的长度是:

1lon_len=R*lon*cos(lat)

那么,(lon,lat)这个坐标平面化后的坐标就是:(R*lon*cos(lat),R*lat)
2、向量法

由已知点和未知点组成两组向量:

由于坐标系转换是线性变换,所以两组向量有以下特性:

(1)两向量在不同的坐标系中的长度比是相同的。

(2)两向量在不同的坐标系中的夹角是相同的。

根据上面两个特性,我们可列出方程组:

设向量1为(dx1,dy1),(dlon1,dlat1),向量2为(dx2,dy2),(dlon2,dlat2),

其中dx1=x2-x1,dy1=y2-y1,dlon1=lon2-lon1,dlat1=lat2-lat1

dx2=x-x1,dy2=y-y1,dlon2=lon-lon1,dlat2=lat-lat1,

然后k1=norm(dx1,dy1),k2=norm(dlon1,dlat1),k3=norm(dx2,dy2),k4=norm(dlon2,dlat2)

有方程组:

(1)k1/k2 = k3/k4

(2)(dx1*dx2+dy1*dy2)/k1/k3 = (dlon1*dlon2+dlat1*dlat2)/k2/k4(//jll这里是我自己的更改)

通过解上面的方程组,我们就能得到未知和屏幕坐标或未知的地理坐标。

原文链接:https://blog.csdn.net/lweiyue/article/details/102776874

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值