如何在Python中以像素表示(有限)平面上的坐标



我在这些方面很糟糕,所以这个问题可能已经存在,我找不到了。

从API,我在一个限定的周边(目前距离我当前位置1公里半径)接收到一些点,这些点作为坐标(从谷歌地图中提取,如果有任何相关性的话)
从这个点列表中,我想在像素图上显示一些点。我已经画好了地图,我已经有了一些工作变量,比如"中心"one_answers"半径"(我的地图是一个圆圈)
现在我希望我的圆的半径(以像素为单位)等于谷歌地图坐标的1公里(因为我不会收到比这更远的点)。在我的地图中,我想把代表点的像素与它们在"真实"地图上的位置成比例地放在这个范围内。

有什么图书馆可以帮忙吗?这算什么?谢谢

我假设您的十进制坐标为50.3869881,-4.6177269,南北第一。

由于你有一张相当小的地图,我们不需要担心地球的曲率,我们可以假设我们有一张线性地图,所以地图上点的(x,y)坐标将是

x = longitude * a + b
y = latitude * c + d

其中a、b、c、d是常数。棘手的是找出这些常数是什么,这取决于你的纬度

一种技术是使用谷歌地球,它可以让你测量两点之间的距离,你可以说取两个已知坐标的点,找到它们之间的距离和距离。一点点高中几何知识会给你坐标。

另一种技术是使用地图制作者使用的地球椭球体。赤道半径为6378137米,极地半径为6356752米。

更简单的是,将地球视为半径6371000m的完美球体。纬度很容易,通过两极绕一圈,周长为2πr=40030km。将其除以360,1度纬度=111.2公里。对于经度,我们需要做一点三角运算。穿过地球的水平切片的半径为

6371km * cos(lat)

1度的经度将是

6371km * 2 * pi * cos(lat) / 360

其中一些值是

 lat         dist
  0          111.2
 10          109.5
 20          104.5
 30           96.3
 40           85.2
 50           71.5
 60           55.6
 70           38.0
 80           19.3
 90           NA    things don't work at the poles

所以要找到坐标。设lat0,long0是圆心点的坐标,这就是地图上的点0,0。让lat1,long1成为你想要找到的点。首先计算m = 6371km * 2 * pi * cos(lat0) / 360,然后找到坐标dlat = lat1 - lat0dlong = long1 - long0之间的差。这些是以度为单位的,所以乘以111.2km和m得到以km为单位的距离。x = dlong * my = dlat * 111.2。这只是一个近似值,所以情况只能精确到1%。

最新更新