我有一个基本的茶叶加热图,将位置显示为CircleMarker,并在顶部显示加热图图层,如下所示。
我想在地图中添加搜索功能,因此我将熊猫数据框转换为GeoJson格式,以便可以通过。
folium.plugins.Search(class,search_label = None, search_zoom = None,geom_type ='Point',position ='topleft', placeholder ='Search',合拢= False,** kwargs)基础: branca.element.MacroElement
将搜索工具添加到您的地图。
参数:图层(GeoJson,TopoJson,FeatureGroup,MarkerCluster 类对象。)–要在
中建立索引的地图图层
我能够使用以下代码将Pandas DataFrame转换为GeoJson。
df_json = pd.read_csv("C:\\py\\folium\\NE Task 1\\json.csv").dropna(how="any")
# convert lat-long to floats and change address from ALL CAPS to Regular Capitalization
df_json['latitude'] = df_json['latitude'].astype(float)
df_json['longitude'] = df_json['longitude'].astype(float)
df_json['Site Name'] = df_json['Site Name'].str.title()
# we don't need all those columns - only keep useful ones
useful_cols = ['Site ID', 'Site Name', 'latitude', 'longitude']
df_subset = df_json[useful_cols]
# drop any rows that lack lat/long data
df_geo = df_subset.dropna(subset=['latitude', 'longitude'], axis=0, inplace=False)
def df_to_geojson(df_json, properties, lat='latitude', lon='longitude'):
geojson = {'type': 'FeatureCollection', 'features': []}
# loop through each row in the dataframe and convert each row to geojson format
for _, row in df_json.iterrows():
# create a feature template to fill in
feature = {'type': 'Feature',
'properties': {},
'geometry': {'type': 'Point', 'coordinates': []}}
# fill in the coordinates
feature['geometry']['coordinates'] = [row[lon], row[lat]]
# for each column, get the value and add it as a new feature property
for prop in properties:
feature['properties'][prop] = row[prop]
# add this feature (aka, converted dataframe row) to the list of features inside our dict
geojson['features'].append(feature)
return geojson
geojson_dict = df_to_geojson(df_geo, properties=useful_cols)
geojson_str = json.dumps(geojson_dict, indent=2)
folium.plugins.Search(data=geojson_dict, geom_type='Point',
search_zoom=14, search_label='Site ID').add_to(map)
执行完该搜索功能后,可以按我的意愿正常工作,但是标记正在TOP上显示,我无法像下面那样隐藏它。
请帮助我指导如何隐藏此标记并保持GeoJson完好无损,以便可以将其用于搜索功能。我试图使其透明,通过我在stackOverflow上发现的解决方案来更改GeoJson的不透明度,但没有任何效果。
提前感谢您的时间,对冗长的帖子表示抱歉。
最好的问候
答案 0 :(得分:0)
通常
如果您将folium.LayerControl().add_to(map)
添加到地图,则它提供了显示或隐藏Geojson标记的功能。然后,您可以使用show=False
或从地图右上角的“图层”图标隐藏或显示标记(请参见下图)
例如:
# 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(map)
# To Add a LayerControl add below line
folium.LayerControl().add_to(map)
map
像这些图像一样,通过控制顶部图层“ Layers”的图层来显示或隐藏标记-1)标记2)隐藏标记
您可以参考此链接获取更多示例: Folium_search
希望这会有所帮助!