如何在Plotly Density_Mapbox地图上叠加GeoJSON格式的等高线图层
Plotly density_mapbox叠加气象等高线实现步骤
你已经完成了密度图生成、等高线转GeoJSON的前置操作,接下来按以下步骤实现叠加即可:
步骤1:读取已生成的GeoJSON等高线文件
import json import plotly.graph_objects as go # 读取你之前导出的等高线GeoJSON文件 with open('/path/to/Sample.geojson', 'r') as f: contour_geojson = json.load(f)
步骤2:提取等高线属性值
geojsoncontour生成的GeoJSON中,每个要素自带填充色、等高线等级等属性,我们提取等级作为z值用于配色和悬停提示:
# 提取所有等高线面的等级值 z_values = [float(feature['properties']['title'].split(' ')[0]) for feature in contour_geojson['features']] # 提取对应填充色(和你生成等高线时设置的颜色一致) colors = [feature['properties']['fill'] for feature in contour_geojson['features']]
步骤3:在原有密度图上叠加等高线图层
在你生成fig = px.density_mapbox(...)的代码之后,追加以下代码添加等高线图层:
# 叠加等高线图层 fig.add_trace( go.Choroplethmapbox( geojson=contour_geojson, locations=[feature['id'] for feature in contour_geojson['features']], z=z_values, colorscale=[[i/len(colors), colors[i]] for i in range(len(colors))], showscale=False, # 不需要显示等高线的色条可以关闭 marker_opacity=0.3, # 和你生成GeoJSON时设置的fill_opacity保持一致即可 marker_line_width=0, hovertemplate='降雨量: %{z} in<extra></extra>' # 自定义悬停提示 ) ) # 可选:如果出现密度图遮盖等高线的情况,调整图层顺序确保等高线在上层 # fig.data = fig.data[::-1] # 渲染展示 fig.show()
关键说明
- 如果你需要保留等高线的描边,可以在生成GeoJSON时调整
stroke_width参数,叠加时设置marker_line_width为对应数值即可 - 如果需要同时显示两个图层的色条,可以给两个图层分别设置
coloraxis参数区分色条坐标轴 - 地图的中心点、缩放层级会沿用你密度图的设置,不需要额外调整
内容的提问来源于stack exchange,提问作者Jkiefn1
相关产品推荐
相关产品推荐

