我在这些方面很糟糕,所以这个问题可能已经存在,我找不到了。
从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 - lat0
、dlong = long1 - long0
之间的差。这些是以度为单位的,所以乘以111.2km和m得到以km为单位的距离。x = dlong * m
,y = dlat * 111.2
。这只是一个近似值,所以情况只能精确到1%。