首页 > 解决方案 > folium.GeoJson(some_data) - 如何设置标记类型?

问题描述

在 Marker 类中,我可以轻松地设置点的样式,但是如何使用 folium.GeoJson("some_data") 其中“some_data”包含多个点的对象来做到这一点?我找到了一个关于多边形的例子,但没有找到点数据。

这是我的包含点数组的代码:

m = folium.Map(location=[54.73,12.37], tiles='Stamen Toner', zoom_start=13)
url = 'http://some-url'
my_zones = f'{url}/zones.json'
my_zones_load = json.loads(requests.get(my_zones).text)
folium.GeoJson(my_zones_load).add_to(m)

标签: python-3.xleafletgeojsonfolium

解决方案


我一直在寻找一种方法来设置某些点的样式,并在搜索中遇到了一些解决方案。使用此处的示例:

https://github.com/collinreinking/longitude_latitude_dot_plots_in_python_with_folium/blob/master/MapsTutorials.ipynb

并从主要的 Folium 帮助页面:

https://python-visualization.github.io/folium/modules.html#folium.vector_layers.CircleMarker

我能够让 GeoJSON 点文件按照我的意愿呈现。

我首先将 GeoJSON 加载到 Geopandas 中,以执行一些额外的处理,但结果如下:

import geopandas as gpd
import folium

pol_ = gpd.read_file('Path to file')
##...do stuff to file

pol_m = pol_.to_json()

pol = folium.GeoJson(pol_m,
                    control = False,
                    marker = folium.CircleMarker(radius = 3, # Radius in metres
                                           weight = 0, #outline weight
                                           fill_color = '#000000', 
                                           fill_opacity = 1),
                    tooltip = folium.GeoJsonTooltip(fields = ['feeder'],
                                                    aliases=['Feeder: '],
                                                    style = ("background-color: white; color: #333333; font-family: arial; font-size: 12px; padding: 10px;"),
                                                    sticky = True
                    )

                    ).add_to(m)

您还可以使用 lambda 函数来更改点的呈现方式,基于字段值...类似于:

fillcolor: lambda x: {fillColor':'red' if x['properties']'Post_Cod_1'] == 'High' else 'green','fillOpacity':0.75}

或者类似的东西。我还没有测试过最后的代码,但是我在其他地方为多边形/折线做了类似的事情,我不明白为什么它不能与这一点一起工作。


推荐阅读