《地理坐标(经纬度坐标)和屏幕坐标(xy坐标)间的转换》的读后笔记

今天读了一下《地理坐标(经纬度坐标)和屏幕坐标(xy坐标)间的转换》,觉得内容很好,特摘录和附上自己的解释。

背景

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

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

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

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

(2)屏幕坐标转地理坐标:已知任意一点的屏幕坐标(x,y),求它的经纬度坐标(lon,lat)

lon 表示 longitude (纬度)
lat 表示 latitude (经度)
x,y 表示屏幕上的只是一个任意位置的坐标点

转换算法

1、铺垫内容-地理坐标平面化

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

1 纬度方向长度 = R ⋅ l a t 1 纬度方向长度 = R \cdot lat 1纬度方向长度=Rlat

注意:此处的 lat 指的不是我们常用的纬度度数,而是纬度弧度。半径乘以弧度才能得到弧长!
度数 360 = 弧度 2 π \frac{度数}{360}=\frac{弧度}{2π} 360度数=2π弧度
故 弧度 = 度数 ⋅ π 180 \cdot \frac{ \pi }{180} 180π

其中 R R R 是地球半径。 而相同经度间的距离会随着纬度的增加而减少,

在这里插入图片描述

l a t lat lat 这一纬度下,1经度方向对应的长度是:

1 经度方向长度 = R ⋅ cos ⁡ ( l a t ) ⋅ l o n 1 经度方向长度= R \cdot \cos{(lat)} \cdot lon 1经度方向长度=Rcos(lat)lon

上式中的 R ⋅ cos ⁡ ( l a t ) R \cdot \cos{(lat )} Rcos(lat) 就是上图中的某一纬度下的切面的半径,然后在半径乘以弧度。

那么,(lon,lat)这个坐标平面化后的坐标就是: ( R ⋅ l o n ⋅ cos ⁡ ( l a t ) , R ⋅ l a t ) (R \cdot lon \cdot \cos{(lat)},R \cdot lat) (Rloncos(lat),Rlat)

故,此坐标可以作为我们在某一个小的平面范围内的类似于x、y的坐标

由于我们是假定在小范围内纬度是不变的,故此时若我们有两个经度不同的点,求经度长度的差时,应该遵循:

d l e n l o n = R ⋅ l o n 2 ⋅ c o s ( l a t ) − R ⋅ l o n 1 ⋅ c o s ( l a t ) = R ( l o n 2 − l o n 1 ) ⋅ c o s ( l a t ) dlen_{lon} = R \cdot lon_2 \cdot cos (lat) - R \cdot lon_1 \cdot cos (lat) = R(lon_2 - lon_1 )\cdot cos (lat) dlenlon=Rlon2cos(lat)Rlon1cos(lat)=R(lon2lon1)cos(lat)

其实上式中的求纬度长度差时用到的 l a t lat lat,使用 l a t 1 lat_1 lat1或者是 l a t 2 lat_2 lat2都对,因为我们在计算经度长度时视作一致。

如果求一个纬度长度差与经度长度差比值的话:

d l e n l a t d l e n l o n = R ⋅ l a t 2 − R ⋅ l a t 1 R ( l o n 2 − l o n 1 ) ⋅ c o s ( l a t ) \frac{dlen_{lat}}{dlen_{lon}} = \frac{R \cdot lat_2-R \cdot lat_1}{R(lon_2 - lon_1 )\cdot cos (lat)} dlenlondlenlat=R(lon2lon1)cos(lat)Rlat2Rlat1

好,我们上下同时除以 R R R,可得

= l a t 2 − l a t 1 ( l o n 2 − l o n 1 ) ⋅ c o s ( l a t ) = \frac{lat_2- lat_1}{(lon_2 - lon_1 )\cdot cos (lat)} =(lon2lon1)cos(lat)lat2lat1

又因为前面提到过,我们计算经度长度时视纬度为不变的,故我们随意地,把 l a t 2 lat_2 lat2 代给 l a t lat lat .

= l a t 2 − l a t 1 ( l o n 2 − l o n 1 ) ⋅ c o s ( l a t 2 ) = \frac{lat_2- lat_1}{(lon_2 - lon_1 )\cdot cos (lat_2)} =(lon2lon1)cos(lat2)lat2lat1

这里需要注意的是: l a t 2 − l a t

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值