【发布时间】:2023-01-20 20:01:47
【问题描述】:
我想在点击标记时出现一个圆圈的点击功能。 到目前为止,我已经开发了包含相关元素的类,如下面的代码所示:
df = pd.read_csv("survey.csv")
class Circle(MacroElement):
def __init__(self):
for i,row in df.iterrows():
rad = int(df.at[i, 'radius'])
def __init__(self,
popup=None
):
super(Circle, self).__init__()
self._name = 'Circle',
self.radius = rad * 1560
self._template = Template(u"""
{% macro script(this, kwargs) %}
var circle_job = L.circle();
function newCircle(e){
circle_job.setLatLng(e.latlng).addTo({{this._parent.get_name()}});
circle_job.setRadius({{this.radius}});
circle_job.setStyle({
color: 'black',
fillcolor: 'black'
});
};
{{this._parent.get_name()}}.on('click', newCircle);
{% endmacro %}
""") # noqa
for i,row in df.iterrows():
lat =df.at[i, 'lat']
lng = df.at[i, 'lng']
sp = df.at[i, 'sp']
phone = df.at[i, 'phone']
role = df.at[i, 'role']
rad = int(df.at[i, 'radius'])
popup = '<b>Phone: </b>' + str(df.at[i,'phone'])
job_range = Circle()
if role == 'Contractor':
fs.add_child(
folium.Marker(location=[lat,lng],
tooltip=folium.map.Tooltip(
text='<strong>Contact surveyor</strong>',
style=("background-color: lightgreen;")),
popup=popup,
icon = folium.Icon(color='darkred', icon='glyphicon-user'
)
)
)
fs.add_child (
folium.Marker(location=[lat,lng],
popup=popup,
icon = folium.DivIcon(html="<b>" + sp + "</b>",
class_name="mapText_contractor",
icon_anchor=(30,5))
#click_action = js_f
)
)
fs.add_child(job_range)
这有效但不幸的是只考虑了第一个记录。
我怎样才能使这些弹出圆圈调整到给定输入的半径(如 CSV 文档中所示?)?
【问题讨论】:
-
如果最终目标是在地图上绘制标记,然后在弹出窗口打开或单击事件上绘制圆圈,我建议您修改
folium.Marker模板以在此类单击事件中包含 javascript sn-p。然后,javascript 代码将包含一个在弹出窗口打开时绘制圆圈的函数。 -
我不知道该怎么做。我尝试使用 click_action 属性,但它根本不起作用。
-
请参阅提供的答案。
标签: python pandas jinja2 folium