我正在使用大叶来可视化城市中的区域。
我的GeoJSON是具有多个面作为要素的FeatureCollection。我希望能够为文件中的不同多边形添加不同的弹出窗口。这个想法是在GEOJSON文件中显示不同多边形的名称。
我能够向完整的geoJSON添加一个弹出窗口。但是,我希望能够为不同的多边形(本质上是要素名称)添加不同的弹出窗口。
folium.GeoJson(gurgaon_subzone,name='geojson').add_child(folium.Popup("Gurgaon")).add_to(m)
答案 0 :(得分:1)
有一个解决方法。您需要遍历每个geoJson功能,并为每个功能创建一个新的geojson。然后,为每个geoJson功能添加一个弹出窗口。然后将所有要素合并到一个图层中。在我的代码中,完整的geoJson为data_geojson_dict
layer_geom = folium.FeatureGroup(name='layer',control=False)
for i in range(len(data_geojson_dict["features"])):
temp_geojson = {"features":[data_geojson_dict["features"][i]],"type":"FeatureCollection"}
temp_geojson_layer = folium.GeoJson(temp_geojson,
highlight_function=lambda x: {'weight':3, 'color':'black'},
control=False,
style_function=lambda feature: {
'color': 'black',
'weight': 1},
tooltip=folium.features.GeoJsonTooltip(fields=list_tooltip_vars,
aliases=[x.capitalize()+":" for x in list_tooltip_vars],
labels=True,
sticky=False))
folium.Popup(temp_geojson["features"][0]["properties"]["productor"]).add_to(temp_geojson_layer)
temp_geojson_layer.add_to(layer_geom)
layer_geom.add_to(m)
folium.LayerControl(autoZIndex=False, collapsed=True).add_to(m)
答案 1 :(得分:1)
以@David OlmoPérez的答案为基础,这对我来说似乎更直观。
# Create feature group to add to folium.Map object
layer = folium.FeatureGroup(name='your layer name', show=False)
# load GEOJSON, but don't add it to anything
temp_geojson = folium.GeoJson('path/to/your/file.geojson')
# iterate over GEOJSON, style individual features, and add them to FeatureGroup
for feature in temp_geojson.data['features']:
# GEOJSON layer consisting of a single feature
temp_layer = folium.GeoJson(feature,
style_function={
'color': '#000000',
'opacity': 0.7,
})
# lambda to add HTML
foo = lambda name, source: f"""
<iframe id="popupIFrame"
title="{name}"
width="600"
height="500"
align="center"
src="{source}">
</iframe>
"""
# create Popup and add it to our lone feature
# this example embeds a .png
folium.Popup(
html=foo('name of your IFrame',
f'path/to/embed/file_{feature["properties"]["some_attribute"]}.png')
).add_to(temp_layer)
# consolidate individual features back into the main layer
temp_layer.add_to(layer)
# add main layer to folium.Map object
layer.add_to(m)