python-3.x - 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)
解决方案
我一直在寻找一种方法来设置某些点的样式,并在搜索中遇到了一些解决方案。使用此处的示例:
并从主要的 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}
或者类似的东西。我还没有测试过最后的代码,但是我在其他地方为多边形/折线做了类似的事情,我不明白为什么它不能与这一点一起工作。
推荐阅读
- javascript - Vue.JS 表格数据未在行中显示
- java - Azure 函数的 CosmosDBInput 绑定未使用 HttpTrigger 中定义的路径变量
- mysql - 当我删除每个表时,phpMyAdmin FK 约束差异操作
- mongodb - Mongoose 查询根据嵌套文档中的值列出文档
- javascript - 当我们可以直接调用方法时,为什么我们需要在javascript中调用或应用方法?
- spring - 在 Spring 集成流 DSL 中间实现轮询
- php - 插入后 Doctrine ArrayCollection 拒绝更新
- python - Python 垃圾收集和单例类
- python - 在 avitrix 中更新防火墙规则的脚本
- bash - 在bash中打开文件时如何通过循环插入生成的值