如何在Python folium / leaflet中突出显示多个搜索结果?

时间:2019-05-01 12:52:34

标签: python python-3.x leaflet folium

我已经使用folium / Leaflet和搜索在Python中绘制了图。 Problem我面临的是,即使有多个结果,它也highlights only one result on map

例如,如果我按名称搜索,那么效果很好,因为通常只有1个人具有该全名。

但是,如果我搜索某个城市,例如“德里”,则只会高亮显示1个标记,而不是7或10。

在下图中:结果只有1个标记为红色的圆圈,但没有标记来自同一城市的其他标记。

如何将突出显示属性更改为更引人注目的内容?

图片: enter image description here

这是代码:

######################################################################
# Part 1 - Creating map

m_search = folium.Map(location=[28.6003435, 77.21952300000001],zoom_start=11
              )   

#######################################################################
# Part 2 - Creating folium markers on map with html text, images 
# etc dynamically for multiple points using for-loop


for plot_numb in range(gdf.shape[0]):

    icon = folium.Icon(color="blue", icon="cloud", icon_color='white')
    tooltip = 'Click to view more about: '+gdf.iloc[plot_numb,0]

    var_name = gdf.iloc[plot_numb,0] 
    var_loc = gdf.iloc[plot_numb,2] 
    pic = base64.b64encode(open('Images/'+gdf.iloc[plot_numb,5],'rb').read()).decode()    

    html = f'''<img ALIGN="Right" src="data:image/png;base64,{pic}">\
    <strong>Name: </strong>{var_name}<br /><br />\
    <strong>Location: </strong>{var_loc}<br /><br />\
    '''
    html 

    iframe = IFrame(html, width=300+180, height=300)
    popup = folium.Popup(iframe, max_width=650) 

    marker = folium.Marker(location=gdf.iloc[plot_numb,1], popup=popup, tooltip=tooltip, icon=icon).add_to(m_search)


########################################################################
# Part 3 - Creating Markers using GeoJson, creating search  

# creating folium GeoJson objects from out GeoDataFrames
pointgeo = folium.GeoJson(gdf,name='group on map', show=False,
                      tooltip=folium.GeoJsonTooltip(fields=['Name', 'Relation', 'City'], aliases=['Name','Relation', 'City'],
                        localize=True)).add_to(m_search)

# Add some Search boxes to the map that reference the GeoDataFrames with some different parameters passed to the 
# arguments.

pointsearch = Search(layer=pointgeo, geom_type='Point', 
                 placeholder='Search for contacts', collapsed=False,
                 search_label='Name').add_to(m_search)


# To Add a LayerControl add below line
folium.LayerControl().add_to(m_search)

m_search 

下面是gdf数据框的示例:

    Name    Location    City    Relation    Relation Detail Image   Lat Lon geometry
0   abc [28.562193, 77.387073]  Noida   Cousin  Cousin  1.png   28.562193   77.387073   POINT (77.387073 28.562193)
1   def [28.565282027743955, 77.44913935661314] Noida   Cousin  Cousin Brother  2.png   28.565282   77.449139   POINT (77.44913935661314 28.56528202774395)
3   ghi [28.6206996683473, 77.42576122283936]   Noida   Cousin  Cousin Brother  4.png   28.620700   77.425761   POINT (77.42576122283936 28.6206996683473)

这里需要一些帮助,因为我是编码的新手,无法弄清楚。

0 个答案:

没有答案