python:寻找围绕某个GPS位置的圆圈的GPS坐标的优雅方式

时间:2013-04-08 19:00:57

标签: python dictionary math gps coordinates

我有一组十进制表示法的GPS坐标,我正在寻找一种方法来找到每个位置周围可变半径的圆坐标。

Here is an example我所需要的。它是围绕坐标1km的{​​{1}}半径的圆。

我需要的是用于查找圆圈坐标的算法,因此我可以使用多边形在我的kml文件中使用它。理想的python。

3 个答案:

答案 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)。此外,很容易找到所有其他维度。