Использовать настраиваемые маркеры в FastMarkerCluster в Python folium?

#python-3.x #folium

#python-3.x #folium

Вопрос:

Я могу добавлять данные на карту 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_ . Если я использую dummy2 в игрушечном примере 2, я получаю TypeError: must be real number, not str .

Любая помощь по этому вопросу очень ценится. приветствую, -R

Комментарии:

1. Медленно продвигаюсь. По-видимому, folium считывает заголовки фрейма данных как часть данных, вот почему я получаю ошибки типа, которые я делаю. Согласно предложению @Conegmo здесь , преобразование фрейма данных Pandas в массив Numpy позволяет обойти эту проблему, если все данные являются числовыми. Передача ему любых нечисловых данных (например, ‘color’ в моих примерах) выдает ошибку типа.

2. Приятно слышать, что вы добиваетесь прогресса и что Conegmo открыта для внесения изменений. Это станет приятным дополнением к folium

Ответ №1:

Теперь эта проблема решена в ветке Folium master на github благодаря Conegmo вон там. Возникла проблема, из-за которой имена столбцов считывались как часть данных. На данный момент установка Folium с использованием следующего означает, что все фиктивные примеры, которые я опубликовал, будут работать.

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