我参加聚会可能有点晚了,但我对其他被这个问题困扰的人有另一个建议。我建议使用pyproj包的Geod类,它可以进行大地测量和大圆计算。我们可以使用它来获取一段 LineString 的前后方位角。然后对于每一块,我们在一端添加一个小的多边形标记(或类似的东西)。
from pyproj import Geod
# loop your lines
for line in lines.itertuples():
# format coordinates and draw line
loc = [[j for j in reversed(i)] for i in line.geometry.coords]
folium.PolyLine(loc, color="red").add_to(m)
# get pieces of the line
pairs = [(loc[idx], loc[idx-1]) for idx, val in enumerate(loc) if idx != 0]
# get rotations from forward azimuth of the line pieces and add an offset of 90°
geodesic = Geod(ellps='WGS84')
rotations = [geodesic.inv(pair[0][1], pair[0][0], pair[1][1], pair[1][0])[0]+90 for pair in pairs]
# create your arrow
for pair, rot in zip(pairs, rotations):
folium.RegularPolygonMarker(location=pair[0], color='red', fill=True, fill_color='red', fill_opacity=1,
number_of_sides=3, rotation=rot).add_to(m)
我希望有人会发现这个片段有帮助。祝你有美好的一天!=)