如果我有一条由起点和终点坐标定义的线,那么在考虑地球曲率的情况下,如何在该线上获得 n 个等距点?
我正在寻找一种算法和/或实现此功能的 python 库。
使用geolib, GeographicLib 的 python 实现,我能够做到这一点:
from geographiclib.geodesic import Geodesic
number_points = 10
gd = Geodesic.WGS84.Inverse(35, 0, 35, 90)
line = Geodesic.WGS84.Line(gd['lat1'], gd['lon1'], gd['azi1'])
for i in range(number_points + 1):
point = line.Position(gd['s12'] / number_points * i)
print((point['lat2'], point['lon2']))
输出:
(35.0, -7.40353472481637e-21)
(38.29044006500327, 7.8252809205988445)
(41.01134777655358, 16.322054184499173)
(43.056180665524245, 25.451710440063902)
(44.328942450747135, 35.08494460239694)
(44.76147256654079, 45.00000000000001)
(44.328942450747135, 54.91505539760305)
(43.05618066552424, 64.54828955993611)
(41.01134777655356, 73.67794581550085)
(38.290440065003274, 82.17471907940114)
(34.99999999999999, 90.0
您可以使用 pyproj 的 Geod 类中的 npts 方法。见 https://jswhit.github.io/pyproj/pyproj.Geod-class.html
给定一个初始点和终点(由 python floats lon1,lat1 和 lon2,lat2 指定),返回一个经度/纬度对列表,描述沿初始点和终点之间的测地线等间距的 npts 中间点。
强调我的,因为我一开始就错过了。
首先,您创建一个 Geod 实例,指定您希望它使用的椭球体。然后就可以调用该方法了。
from pyproj import Geod
geod = Geod("+ellps=WGS84")
points = geod.npts(lon1=-89.6627,
lat1=39.7658,
lon2=147.2800,
lat2=-42.8500,
npts=100
)
points
现在是起点和终点之间的测地线上的元组列表:
[(-91.27649937899028, 39.21278457275204),
(-92.86468478264302, 38.6377120347621),
(-94.42723159402209, 38.04136774269571),
(-95.96421169120758, 37.42453136174509),
(-97.47578514283185, 36.78797425216882),
...