Folium PolyLine 未显示在地图上 - Jupyter 笔记本中使用 python 3.6 (anaconda) 的 folium 0.7.0

问题描述 投票:0回答:2

我有一张使用以下代码生成的纽约市社区的 folium 地图:

m = folium.Map(location=[40.7035, -73.990], 
               zoom_start=16.5,
               tiles='cartodbpositron')

然后,我尝试使用

folium.PolyLine()
在地图上添加连接点的线,但即使我在调用
m._children
时看到它们已列出,它们也不会显示在地图上。

这是创建线条的代码,其中 G 是一个 networkx 图:

for x, y in G.edges():
    points = [nx.get_node_attributes(G, 'loc')[x], nx.get_node_attributes(G, 'loc')[y]]
    egde = folium.PolyLine(locations=points, weight=5, color='red')
    edge.add_to(m)

样本

point
:

[(-73.986635, 40.703988), (-73.988683, 40.702674)]

m.children
的输出(前几行):

OrderedDict([('cartodbpositron',
              <folium.raster_layers.TileLayer at 0x12279feb8>),
             ('poly_line_ae5785771a2148c5a8559cb0085b10a4',
              <folium.vector_layers.PolyLine at 0x122892128>),
             ('poly_line_ee73b495559940d484064e8c8492eda5',
              <folium.vector_layers.PolyLine at 0x1229734a8>),
             ('poly_line_415a7ed70a2a425e876c8a6711408a6a', ...

知道我可能做错了什么吗?

python visualization geospatial networkx folium
2个回答
1
投票

这有点奇怪,folium polyline 期望坐标为

[latitude, longitude]
格式,而一般接受的格式是
[longitude, latitude]

举个例子: 我假设您正在使用 OSRM 来获取几何图形。

OSRM 几何图形以

[[longitude,latitude],...]
的形式返回坐标。

如果直接将它们与 folium 一起使用,则不会显示折线。

使用以下函数反转几何坐标:

def reverse_lon_lat(x):
    a = [[p[1], p[0]] for p in x]
    return a

并绘制您想要的折线。


0
投票

这是因为 folium 需要

[latitude, longitude]
格式的坐标。如果您在
[longitude, latitude]
中有数据,那么您可以使用以下辅助函数。

PATHC = [
    [90.422974, 23.825237],
    [90.419884, 23.82084],
    [90.410957, 23.816757],
    [90.404778, 23.812046],
    [90.402031, 23.803879],
    [90.401001, 23.792884],
    [90.398941, 23.780946],
    [90.395851, 23.770578],
    [90.394821, 23.762723],
    [90.394478, 23.759267],
]
PATHC = list(map(lambda x: [x[1], x[0]], PATHC))
© www.soinside.com 2019 - 2024. All rights reserved.