我有一组十进制表示法的GPS坐标,我正在寻找一种方法来找到每个位置周围可变半径的圆坐标。
Here is an example我所需要的。它是围绕坐标1km
的{{1}}半径的圆。
我需要的是用于查找圆圈坐标的算法,因此我可以使用多边形在我的kml文件中使用它。理想的python。
答案 0 :(得分:7)
另请参阅Adding distance to a GPS coordinate了解lat / lon和短程距离之间的简单关系。
这有效:
import math
# inputs
radius = 1000.0 # m - the following code is an approximation that stays reasonably accurate for distances < 100km
centerLat = 30.0 # latitude of circle center, decimal degrees
centerLon = -100.0 # Longitude of circle center, decimal degrees
# parameters
N = 10 # number of discrete sample points to be generated along the circle
# generate points
circlePoints = []
for k in xrange(N):
# compute
angle = math.pi*2*k/N
dx = radius*math.cos(angle)
dy = radius*math.sin(angle)
point = {}
point['lat']=centerLat + (180/math.pi)*(dy/6378137)
point['lon']=centerLon + (180/math.pi)*(dx/6378137)/math.cos(centerLat*math.pi/180)
# add to list
circlePoints.append(point)
print circlePoints
答案 1 :(得分:5)
在此处使用“目的地点给定距离和从起点开始承载”的公式:
http://www.movable-type.co.uk/scripts/latlong.html
以中心点为起点,半径为距离,并在0度到360度的多个轴承上循环。这将给你一个圆圈上的点,并将在极地工作,因为它在任何地方使用大圆圈。
答案 2 :(得分:1)
这是一个简单的三角学问题。
将坐标系XOY设置在圆心处。从y = 0
开始,使用x
找到您的x = r
值。然后只需按角度a
(以弧度为单位)围绕原点旋转半径。您可以使用Xi = r * cos(a)
,Yi = r * sin(a)
找到圆圈上下一个点的坐标。重复上一次2 * Pi / a
次。
就是这样。
<强>更新强>
考虑@poolie的评论,可以通过以下方式解决问题(假设地球是正确的球体)。考虑一下地球的横截面,其最大直径D
通过我们的点(称之为L
)。我们的圆长1公里的直径然后变成地球横截面圆的和弦(称之为AB
)。因此,弧AB
的长度变为(AB) = D * Theta
,其中Theta = 2 * sin(|AB| / 2)
。此外,很容易找到所有其他维度。