You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让多幅gpxplotter+folium地图的海拔着色基于全局范围保持一致?

用gpxplotter+folium实现全局海拔范围统一着色

完全可以指定全局海拔范围来实现多幅地图的着色一致性,不用依赖单条轨迹的本地海拔数据。核心是利用add_segment_to_map的norm参数,基于全局范围做归一化处理。

具体实现步骤

  • 定义全局海拔范围:比如你需要的0-3000米,确定vmin(最低海拔)和vmax(最高海拔)。
  • 创建归一化对象:用matplotlib的Normalize类生成基于全局范围的归一化规则,所有轨迹的海拔都会按这个规则映射到色谱上。
  • 传入归一化参数:在调用add_segment_to_map时,把这个归一化对象传给norm参数即可。

代码示例

from gpxplotter import read_gpx_file, add_segment_to_map
import folium
from matplotlib.colors import Normalize
from folium import LinearColormap

# 1. 设定全局海拔范围
global_vmin = 0
global_vmax = 3000
# 创建全局归一化规则
global_norm = Normalize(vmin=global_vmin, vmax=global_vmax)

# 2. 创建对应全局范围的统一色条(可选,方便查看海拔对应颜色)
colormap = LinearColormap(colors=['yellow', 'orange', 'red'], 
                          vmin=global_vmin, 
                          vmax=global_vmax, 
                          caption='海拔(米)')

# 3. 生成第一幅地图(轨迹海拔0-1500米)
map1 = folium.Map(location=[30.123, 120.456], zoom_start=12)  # 替换成轨迹的中心坐标
for track in read_gpx_file("track1.gpx"):
    for segment in track['segments']:
        add_segment_to_map(map1, segment, color_by='elevation', cmap='YlOrRd_09', norm=global_norm)
colormap.add_to(map1)
map1.save("map1.html")

# 4. 生成第二幅地图(轨迹海拔1000-2000米)
map2 = folium.Map(location=[31.789, 121.012], zoom_start=12)  # 替换成第二条轨迹的中心坐标
for track in read_gpx_file("track2.gpx"):
    for segment in track['segments']:
        add_segment_to_map(map2, segment, color_by='elevation', cmap='YlOrRd_09', norm=global_norm)
colormap.add_to(map2)
map2.save("map2.html")

原理说明

默认情况下,add_segment_to_map会自动用当前轨迹的最小、最大海拔做归一化,导致不同地图的颜色标尺不统一。指定全局norm后,所有轨迹的海拔值都会被映射到你设定的0-3000米范围:

  • 轨迹1里的0米(等于global_vmin)对应色谱最左端(浅黄色),1500米对应色谱中间位置;
  • 轨迹2里的1000米对应色谱的1000/3000位置,和轨迹1里0米的颜色一致;2000米对应2000/3000位置,和轨迹1里1500米的颜色一致。

内容的提问来源于stack exchange,提问作者martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 20:15:41