Python - Folium 搜索插件不会在 MarkerCluster 组层中搜索弹出文本

     2023-02-23     50

关键词:

【中文标题】Python - Folium 搜索插件不会在 MarkerCluster 组层中搜索弹出文本【英文标题】:Python - Folium Search Plugin Doesn't Search Popup Text in MarkerCluster Group Layer 【发布时间】:2020-08-25 14:55:37 【问题描述】:

除了实际使用搜索栏外,我的叶图、标记集群、图层控件和搜索栏都可以正常工作并显示。搜索时我有搜索插件指向的层是我的 MarkerCluster 层,folium 文档说它应该是可搜索的。我在搜索栏中输入的任何内容都会返回“找不到位置”,这让我认为它没有正确搜索 MarkerCluster 图层,或者不知道搜索包含在该图层中的 text标记的弹出窗口。

这是我现在拥有的代码:

import os 
import folium
from folium import plugins
import pandas as pd
from folium.plugins import MarkerCluster
from folium.plugins import Search

#import data including lat/lon, name of service, address of service
df = pd.read_csv('data.csv')

#Create base map zoomed in to Indiana
map=folium.Map(location=[39.80, -86.12],  tiles=None, zoom_start=7)
folium.TileLayer('cartodbpositron', name='COVID-19 Services').add_to(map)

#Make Marker Cluster Group layer
mcg = folium.plugins.MarkerCluster(control=False)
map.add_child(mcg)

#Create layer of markers
#Set marker popups to display name and address of service
for row in df.iterrows():
    row_values=row[1]
    location=[row_values['latitude'], row_values['longitude']]
    popup=popup=(row_values['name']+'<br>'+'<br>'+row_values['address_1']+
                 '<br>'+'<br>'+row_values['city']+','+' '+row_values['state']+
                 '<br>'+row_values['zip'])
    marker=folium.Marker(location=location, popup=popup, min_width=2000)
    marker.add_to(mcg)

#Add search bar
servicesearch = Search(
    layer=mcg,
    geom_type='Point',
    placeholder='Search for a service',
    collapsed=False,
).add_to(map)

#Add layer control
folium.LayerControl().add_to(map)

map

如何让搜索插件实际搜索标记弹出窗口的测试?那么,如何让地图突出显示或缩放到搜索标记的那些?非常感谢任何帮助,谢谢!

【问题讨论】:

【参考方案1】:

这是我的解决方案:

def visualize_locations_with_marker_cluster(df, zoom=4):
    f = folium.Figure(width=1000, height=500)

    center_lat=34.686567
    center_lon=135.52000

    m = folium.Map([center_lat,center_lon], zoom_start=zoom).add_to(f)
    marker_cluster = MarkerCluster().add_to(m)

    for d in df.iterrows():
        folium.Marker(location=[d[1]["y"], d[1]["x"]], popup=d[1]["company"], name=d[1]["company"]).add_to(marker_cluster)

    servicesearch = Search(
        layer=marker_cluster,
        search_label="name",
        placeholder='Search for a service',
        collapsed=False,
    ).add_to(m)


    return m

首先创建映射,创建集群,在pd.dataframe 中循环值并为带有name 标签的集群创建Marekers。 接下来创建Search 对象并在那里添加带有search_label="name", 标签的集群。最后将其全部添加回地图

["x", "y"] 是经度和纬度,company 在我的情况下是搜索值

【讨论】:

【参考方案2】:

如果您稍微改变一下向地图添加数据的方式,搜索栏的使用会更容易。您可以将数据框中的数据更改为 GeoJSON 对象。您首先需要为您的 GeoJSON 创建一个字典并使用函数 folium.GeoJSON()

geo_json = 
  "type": "FeatureCollection",
  "features": [],

for d in df.iterrows():
    temp_dict = 
      "type": "Feature",
      "geometry": 
        "type": "Point",
        "coordinates":[d[1]["longitude"], d[1]["latitude"]],
        
      ,"properties": "name": d[1]["name"]
    
    geo_json["features"].append(temp_dict)
geojson_obj = folium.GeoJson(geo_json).add_to(map)

之后,您只需更改一点代码即可添加搜索栏:

servicesearch = Search(
    layer=geojson_obj,
    search_label="name",
    placeholder='Search for a service',
    collapsed=False,
).add_to(map)

【讨论】:

这个解决方案仍然没有解决搜索问题,现在我的标记没有聚集,也没有弹出窗口了。看起来搜索插件比 MarkerCluster 层更喜欢 GeoJson 层(尽管文档说搜索插件适用于 MarkerCluster 层),所以这是一个好的开始。关于现在如何获取这个 GeoJson 数据文件并且仍然有标记集群并且弹出窗口仍然存在的任何建议? @Pierre-Loic,我在自己的数据集上进行了尝试,它在选择搜索的“名称”后将标记从地图上映射到一个奇怪的行有什么想法吗? @onxx,您可以检查您在 geo_json 中的名称值,因为搜索栏使用此标签工作 @Pierre-Loic,我如何将它与标记联系起来? 这对于小型数据集来说是一个不错的解决方案,但在我的情况下,坐标超过 10000 个,它非常缓慢。我必须使用 MarkerCluster【参考方案3】:

我已经为此苦苦挣扎了一段时间。我相信这可能会解决它:在标记中添加一个“名称”或您想要搜索的任何内容,例如:

marker=folium.Marker(location=location, popup=popup, min_width=2000, name=name)

可能有点晚了,但总比没有好。

【讨论】:

将 folium 地图导出为 png

...布时间】:2019-05-0302:35:01【问题描述】:我正在处理使用python、folium和geojson创建的地图,similartothisone。但是,我宁愿将此图像简单地导出为png或svg,而不是交互式HTML文档。使用语法:m=folium.Map(#etc..)m.save("filename.png")保存一个文... 查看详情

使用folium在python中添加一个大的shapefile来映射

】使用folium在python中添加一个大的shapefile来映射【英文标题】:Addalargeshapefiletomapinpythonusingfolium【发布时间】:2021-10-1011:27:00【问题描述】:我正在使用python、PyQt5和Qt设计器在我的应用程序中显示一个叶图。由于Qt设计器中没有... 查看详情

python在openstreetmap地图上绘制路线图(代码片段)

folium的基本用法folium.Map([纬度,经度],zoomstart,width,height,control_scale,no_touch)#zoomstart为地图的初始缩放尺寸,数值越大地图放大程度就会越大,width为像素或百分比(int或者str两种形式),height... 查看详情

找不到 Python 3.6 模块:Folium

】找不到Python3.6模块:Folium【英文标题】:Python3.6Modulecannotbefound:Folium【发布时间】:2017-11-2021:05:19【问题描述】:我正在尝试将folium导入我正在使用的Jupyter笔记本中,但我似乎无法解决Folium库的导入问题。其他人解决了这个问... 查看详情

为啥我不能使用 folium.Map() 函数在地图中标记值列表?

...【发布时间】:2019-03-0322:13:58【问题描述】:我正在使用Python3.x(IDEPyCharm)中的folium包,当我想使用folium.Map()函 查看详情

jupyter上的folium空白等值线图,可能的JSON格式问题

】jupyter上的folium空白等值线图,可能的JSON格式问题【英文标题】:foliumblankchoroplethmaponjupyter,possibleJSONformatissue【发布时间】:2020-12-0802:55:18【问题描述】:我一直在积极尝试找出为什么我在尝试在folium上生成等值线图时在我的J... 查看详情

使用python+folium实现地理空间可视化效果(代码片段)

...通过各种工具制作这种交互式绘图,其中一种工具是Python的Folium库本文重点介绍使用Folium库创建令人印象深刻的地理可视化效果。介绍地理空间可视化是使用地理空间可视化工具和技术来分析地理空间数据。地理空间数据可... 查看详情

如何为 python 3.7 安装 folium

】如何为python3.7安装folium【英文标题】:Howtoinstallfoliumforpython3.7【发布时间】:2020-09-0105:28:56【问题描述】:importfoliumasfomap=fo.Map()mapx=fo.FeatureGroup(name=\'MyMap\')x.add_person(fo.Marker(location=[27.1750,78.0422],popup=\'hellouse 查看详情

如何用 folium 绘制地图并在 python 中的地图旁边放置条形图?

】如何用folium绘制地图并在python中的地图旁边放置条形图?【英文标题】:Howcanaplotamapwithfoliumandplaceabargraphnexttothemapinpython?【发布时间】:2020-07-1819:32:07【问题描述】:我有一个数据框,我一直在创建一个带有小部件的交互式条... 查看详情

使用python地图绘制工具--folium全攻略

参考技术A1.准备工作有朋友可能没用过folium,它其实就是python的一个专业绘制地图的第三方库,所以在使用之前需要先安装它。在安装完成之后,我们可以在jupyterlab进行演示如下:对于上面的输出,其实是一个可交互的地图,... 查看详情

使用python在html中搜索文本

】使用python在html中搜索文本【英文标题】:Searchingfortextinhtmlusingpython【发布时间】:2018-11-2817:49:19【问题描述】:我有一个电子书阅读器,它不会将突出显示的注释导出到epub文件中,所以我要编写一个Sigil插件来从阅读器中导... 查看详情

从使用 GIS 库(如 geopandas、folium)的 Python 脚本制作 .exe

】从使用GIS库(如geopandas、folium)的Python脚本制作.exe【英文标题】:Making.exefromthePythonScriptthatusesGISlibrariessuchasgeopandas,folium【发布时间】:2019-01-1707:33:17【问题描述】:我知道这是一个非常简单和广泛的问题,但我没有多少时间... 查看详情

如何在 PyQt5 GUI 中显示 Folium 地图?

】如何在PyQt5GUI中显示Folium地图?【英文标题】:HowtoshowFoliummapinsideaPyQt5GUI?【发布时间】:2019-10-2811:33:29【问题描述】:我试图在QtGUI中显示一个非常简单的Folium地图。主要代码是:importfoliumm=folium.Map(location=[45.5236,-122.6750])mm.save... 查看详情

与dash应用程序集成后如何刷新python folium(map.html文件)?

】与dash应用程序集成后如何刷新pythonfolium(map.html文件)?【英文标题】:Howtorefreshpythonfolium(map.htmlfile)afterintegratingitwithdashapp?【发布时间】:2020-03-2721:49:24【问题描述】:我是python编程和Dash的新手,所以如果我说错了,请原谅... 查看详情

用folium在物体上绘制航向

】用folium在物体上绘制航向【英文标题】:plotheadingdirectionwithfoliumontoanobject【发布时间】:2021-11-1917:29:16【问题描述】:我用以下数据绘制了一张热图。我有数千行。它只是一个样本。我还想查看该坐标的谷歌地图视图。所以我... 查看详情

使用 Leaflet、folium 和 pandas 使用 python 绘制地理编码数据(来自 CSV)时出错

】使用Leaflet、folium和pandas使用python绘制地理编码数据(来自CSV)时出错【英文标题】:errorwhileusingpythontoplotgeocodedata(fromCSV)usingLeaflet,foliumandpandas【发布时间】:2022-01-2221:57:46【问题描述】:我正在尝试将一些地理编码数据绘制... 查看详情

使用python在blender中注销并删除插件不会从菜单中删除该项目

】使用python在blender中注销并删除插件不会从菜单中删除该项目【英文标题】:unregisterandremoveaddoninblenderwithpythondoesnotremovetheitemfrommenu【发布时间】:2016-03-3114:40:55【问题描述】:我已经下载了一些网格导出器脚本来学习如何在pyt... 查看详情

在 folium 中使用地理数据框绘制彩色多边形

】在folium中使用地理数据框绘制彩色多边形【英文标题】:Plotcoloredpolygonswithgeodataframeinfolium【发布时间】:2016-06-0116:13:50【问题描述】:我正在尝试在folium中绘制雷达数据,并且快到了。我按照这个示例(Contourplotdata(lat,lon,value)w... 查看详情