【问题标题】:python: elegant way of finding the GPS coordinates of a circle around a certain GPS locationpython:找到围绕某个 GPS 位置的圆的 GPS 坐标的优雅方法
【发布时间】:2019-03-03 18:27:42
【问题描述】:

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

Here is an example 我需要什么。它是一个以1km 为半径的圆,以坐标47,11 为中心。

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

【问题讨论】:

标签: python dictionary math gps coordinates


【解决方案1】:

另请参阅Adding distance to a GPS coordinate,了解纬度/经度和短程距离之间的简单关系。

这行得通:

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/cos(lat) 项,所以它在两极发散。此外,它仅适用于 10-100 公里以下的相对距离。
【解决方案2】:

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

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

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

【讨论】:

  • 我想就是这样。感谢您的链接。如果您不完全知道它的名称,就很难搜索到这些东西……这就是我喜欢这个网站和你们所有人的原因。谢谢。
【解决方案3】:

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

将坐标系 XOY 设置在圆心。从y = 0 开始,使用x = r 找到您的x 值。然后只需将半径围绕原点旋转角度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)。此外,很容易找到所有其他维度。

【讨论】:

  • 这对于笛卡尔直线 xy 系统是正确的。但是,纬度/经度不是这样的系统。对于小偏移量和赤道附近,它近似于一个。但是在很长的距离上,线条会弯曲,并且会在两极处会聚。
  • @poolie 是的,这不是我的话题。但是对于半径为 1 公里的小圆圈,它可能工作得很好。否则,您可以尝试球形 CS,但它会更复杂。
猜你喜欢
  • 1970-01-01
  • 2013-04-29
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
相关资源
最近更新 更多