在Python folium的FastMarkerCluster中使用自定义标记?

时间:2019-03-09 21:39:39

标签: python-3.x folium

我可以使用MarkerCluster将数据添加到叶片图上,并根据每个点的参数更改标记的参数。

###Toy Example 1###


import pandas as pd
import numpy as np
import folium
import folium.plugins as plugins

lats = np.asarray([-54.4, -54.5, -54.6])
longs = np.asarray([-69.5, -69.5, -69.5])
data = np.asarray([70, 90, 5])
colour = np.asarray(['green', 'orange', 'red'])

dummy = [list(a) for a in zip(lats, longs, data, colour)]

dummy2 = pd.DataFrame(dummy, columns=['lat', 'lng', 'data', 'colour'])

dmap = folium.Map(location = [-54.5, -69.5], zoom_start = 7)

mc=plugins.MarkerCluster()

for a, row in dummy2.iterrows():
    folium.CircleMarker(location=[row[0],row[1]],
                        radius=row[2], color=row[3], fill=True).add_to(mc)

mc.add_to(dmap)

dmap

由于我的用例有成千上万的点,因此我想对FastMarkerCluster执行与上述类似的操作。我要实现这一目标最远的是:

###Toy Example 2###

callback = """\
function (row) {
    var marker;
    marker = L.circle(new L.LatLng(row[0], row[1]), {color:'red'});
    return marker;
};
"""

lats = np.asarray([-54.4, -54.5, -54.6])
longs = np.asarray([-69.5, -69.5, -69.5])
data = np.asarray([70, 90, 5])
colour = np.asarray(['green', 'orange', 'red'])

dummy = [list(a) for a in zip(lats, longs)]

dummy2 = pd.DataFrame(dummy, columns=['lat', 'lng'])

dmap = folium.Map(location = [-54.5, -69.5], zoom_start = 7)

plugins.FastMarkerCluster(dummy, callback=callback).add_to(dmap)

dmap

我可以设想将{radius: row[2], color: row[3]}添加到回调中以获得所需的功能。但是,如果将data和/或colour数组添加到dummy中(如玩具示例1),则会得到TypeError: must be real number, not numpy.str_。如果我在玩具示例2中使用dummy2,则会得到TypeError: must be real number, not str

对此表示任何帮助,我们将不胜感激。 F 干杯, -R

1 个答案:

答案 0 :(得分:1)

现在,这已在github上的Folium master分支中解决,这要感谢那里的Conegmo。出现了一个问题,其中列名被读取为数据的一部分。目前,使用以下方法安装Folium意味着我发布的所有虚拟示例都可以使用。

pip install git+https://github.com/python-visualization/folium.git