使用以下代码,我尝试将文本添加到我的 folium FastMarkerCluster 标记中。下面的代码生成一个地图,但添加文本没有成功。文本包含为与每个经纬度对相对应的字符串。
我相信这个问题与包含文本列的 df 是 pandas 系列对象有关。据我了解,在这种情况下应该如何指定“df.columnname”。然而,这没有用。我还尝试将专栏变成列表,但这种方法也没有成功。任何指点真的很感激。
xlat = guns2013['latitude'].tolist()
xlon = guns2013['longitude'].tolist()
locations = list(zip(xlat, xlon))
map2 = folium.Map(location=[38.9, -77.05], tiles='CartoDB dark_matter',
zoom_start=1)
marker_cluster = MarkerCluster().add_to(map2)
for point in range(0, len(locations)):
folium.Marker(locations[point],
popup='guns2013.texts'[point]).add_to(marker_cluster)
map2
我尝试过这个,最终你可以将弹出窗口从 python 传递到
callback
函数,如下所示:
some_map = folium.Map(location=[df['latitude'].mean(),
df['longitude'].mean()],
zoom_start=9)
callback = ('function (row) {'
'var marker = L.marker(new L.LatLng(row[0], row[1]), {color: "red"});'
'var icon = L.AwesomeMarkers.icon({'
"icon: 'info-sign',"
"iconColor: 'white',"
"markerColor: 'green',"
"prefix: 'glyphicon',"
"extraClasses: 'fa-rotate-0'"
'});'
'marker.setIcon(icon);'
"var popup = L.popup({maxWidth: '300'});"
"const display_text = {text: row[2]};"
"var mytext = $(`<div id='mytext' class='display_text' style='width: 100.0%; height: 100.0%;'> ${display_text.text}</div>`)[0];"
"popup.setContent(mytext);"
"marker.bindPopup(popup);"
'return marker};')
some_map.add_child(FastMarkerCluster(df[['latitude', 'longitude','use_code_name']].values.tolist(), callback=callback))
果然,答案来了。也许这可以帮助面临同样问题的人。如果文本没有被映射,请检查包含它的 df 是否不是 pandas 系列对象,如果是,则使用第一行转换为 pandas df。其余的工作。
df_text = df_old[['texts']]
xlat = guns2013['latitude'].tolist()
xlon = guns2013['longitude'].tolist()
locations = list(zip(xlat, xlon))
map2 = folium.Map(location=[38.9, -77.05], tiles='CartoDB dark_matter',
zoom_start=1)
marker_cluster = MarkerCluster().add_to(map2)
try:
for point in range(0, len(locations)):
folium.Marker(locations[point], popup = folium.Popup(df_text['texts']
[point])).add_to(marker_cluster)
except:
pass
map2
这是@Filip Michalsky 提供的答案的修改版本,它避免了我使用该解决方案遇到的一些 xss/安全问题。
some_map = folium.Map(location=[df['latitude'].mean(),
df['longitude'].mean()],
zoom_start=9)
callback = ('function (row) {'
'var marker = L.marker(new L.LatLng(row[0], row[1]), {color: "red"});'
'var icon = L.AwesomeMarkers.icon({'
"icon: 'info-sign',"
"iconColor: 'white',"
"markerColor: 'green',"
"prefix: 'glyphicon',"
"extraClasses: 'fa-rotate-0'"
'});'
'marker.setIcon(icon);'
"var popup = L.popup({maxWidth: '300'});"
"const display_text = {text: row[2]};"
"var mytext = L.DomUtil.create('div', 'display_text');"
"mytext.textContent = display_text.text;"
"popup.setContent(mytext);"
"marker.bindPopup(popup);"
'return marker};')
some_map.add_child(FastMarkerCluster(df[['latitude', 'longitude','use_code_name']].values.tolist(), callback=callback))