Python: 寻找某个GPS位置周围圆形的GPS坐标的优雅方法

9

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

这里是一个示例,它是以坐标47,11为中心,半径为1km的圆形。

我需要的是查找圆形坐标的算法,这样我就可以将其用于我的kml文件中,并使用多边形。最好是用Python实现。


1
有趣的问题。你可能会在http://gis.stackexchange.com上更快地得到答案。 - mtrw
3个回答

12

另请参阅将距离添加到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

不错。这个在极地附近稳定吗? - poolie
4
不,这个近似方法非常实用,但你可以看到有一个1/cos(lat)项,因此在极地处会发散。而且它只适用于相对距离在10-100公里以下的情况。 - Stéphane

7

在这里使用“起始点和距离给定的方位角的目标点”公式:

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

以您的中心点作为起点,将半径作为距离,并在0度至360度之间循环一些方位角。这将给您在圆上的点,并且可以在极地工作,因为它在所有地方使用大圆。


我想这就是了。谢谢提供链接。如果你不知道它的确切名称,很难搜索这样的东西...这就是为什么我喜欢这个网站和大家。谢谢。 - otmezger

1
这是一个简单的三角函数问题。在圆心处设置坐标系XOY。从 y = 0 开始,用 x = r 找到你的x值。然后,通过角度 a(以弧度为单位)绕原点旋转半径。你可以用 Xi = r * cos(a)Yi = r * sin(a) 找到圆上下一个点的坐标。重复最后的 2 * Pi / a 次即可。
就是这样。
更新:
考虑到 @poolie 的评论,可以采用以下方法解决问题(假设地球是正确的球体)。考虑通过我们的点(称之为L)的地球最大直径D的横截面。然后,1公里长度的圆的直径成为地球横截面圆的弦(称之为AB)。因此,弧长(AB) = D * Theta,其中 Theta = 2 * sin(|AB| / 2)。此外,很容易找到所有其他尺寸。


这对于笛卡尔直角坐标系是正确的。但是,纬度/经度不是这样的系统。它在小偏移和赤道附近近似于一个系统。但是在长距离上,线条会弯曲,并且它们会在极点处汇聚。 - poolie
@poolie 是的,这不是我的话题。但对于半径为1公里的小圆圈来说,它可能会工作得很好。否则,您可以尝试球形CS,但它比较复杂。 - user1329187

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接