9

我在 Jupyter Notebook Server 4.2.1 上使用 Python 2.7.11 运行 Folium 0.2.1'

我正在尝试在地图上绘制线条,这些线条有一个箭头来传达方向

import folium

#DFW, LGA coordinates
coordinates=[(32.900908, -97.040335),(40.768571, -73.861603)]

m = folium.Map(location=[32.900908, -97.040335], zoom_start=4)

#line going from dfw to lga
aline=folium.PolyLine(locations=coordinates,weight=2,color = 'blue')
m.add_children(aline)

在此处输入图像描述 有没有办法在线条上添加箭头?

4

2 回答 2

5

您可以使用常规多边形标记在终点绘制三角形...

folium.RegularPolygonMarker(location=(32.900908, -97.040335), fill_color='blue', number_of_sides=3, radius=10, rotation=???).add_to(m)

您必须使用一些三角函数来计算三角形指向正确方向的旋转角度。任何此类标记的初始点都指向正东。

于 2017-09-04T15:21:34.590 回答
1

我参加聚会可能有点晚了,但我对其他被这个问题困扰的人有另一个建议。我建议使用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)

我希望有人会发现这个片段有帮助。祝你有美好的一天!=)

于 2021-08-18T14:43:41.630 回答