9

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

这是我需要的一个例子。它是一个以1km坐标为半径的圆47,11

我需要的是查找圆坐标的算法,因此我可以在我的 kml 文件中使用多边形来使用它。非常适合python。

4

3 回答 3

10

另请参阅向 GPS 坐标添加距离,了解纬度/经度和短程距离之间的简单关系。

这有效:

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
于 2013-04-08T23:12:46.497 回答
6

在此处使用“从起点给定距离和方位的目标点”公式:

http://www.movable-type.co.uk/scripts/latlong.html

以您的中心点为起点,以您的半径为距离,并在从 0 度到 360 度的多个方位上循环。这会给你一个圆圈上的点,并且会在两极工作,因为它在任何地方都使用大圆圈。

于 2013-04-09T07:27:18.157 回答
1

这是一个简单的三角问题。

将坐标系 XOY 设置在圆心。从 开始y = 0并找到您的x价值x = ra然后只需按角度(以弧度为单位)围绕原点旋转半径。您可以使用 , 找到您在圆上的下一个点的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)。此外,很容易找到所有其他维度。

于 2013-04-09T09:15:26.183 回答