如何在Python中使用gmplot实现地图迭代绘图且避免覆盖?
解决gmplot绘图覆盖问题的方法
你的问题出在每次循环都新建了一个GoogleMapPlotter实例,并且每次循环都调用draw()方法写入同一个HTML文件——这就导致每次生成的内容都会覆盖之前的,最后自然只能看到最后一段线段。
要解决这个问题,我们只需要创建一个全局的地图实例,在循环中不断向这个实例添加线段,最后统一生成HTML文件就可以了。修改后的代码如下:
# 初始化单个地图实例,用第一个坐标作为初始中心点 gm_obj = gmplot.GoogleMapPlotter(latmap[0], longmap[0], 100) # 遍历所有相邻坐标对,逐一添加线段到地图实例 for i in range(data_length - 1): # 直接生成当前线段的坐标列表,简化代码 latsub = [latmap[i], latmap[i+1]] longsub = [longmap[i], longmap[i+1]] # 把线段添加到同一个地图对象里 gm_obj.plot(latsub, longsub, color=colorid[i], edge_width=10) # 所有线段添加完成后,仅调用一次draw生成最终的HTML文件 gm_obj.draw(r"C:\Users\user\Desktop\gpsplotroad1.html")
关键改动说明:
- 只初始化一次
GoogleMapPlotter,避免每次循环创建新地图覆盖旧内容 - 循环内仅执行
plot()方法,负责向已有地图实例添加线段 - 最后统一调用
draw(),把所有线段一次性渲染到HTML中
如果你的需求是保存每一步的中间地图(每个线段单独一张图),那只需要在循环中给每个HTML文件设置不同的文件名即可,比如:
for i in range(data_length - 1): latsub = [latmap[i], latmap[i+1]] longsub = [longmap[i], longmap[i+1]] # 每个循环创建新实例,并且用不同的文件名保存 gm_obj = gmplot.GoogleMapPlotter(latmap[i], longmap[i], 100) gm_obj.plot(latsub, longsub, color=colorid[i], edge_width=10) gm_obj.draw(f"C:\Users\user\Desktop\gpsplotroad_{i}.html")
但从你的代码来看,应该是想把所有线段绘制在同一张地图上,所以第一种方法完全可以解决你的问题。
内容的提问来源于stack exchange,提问作者RRSC
相关产品推荐
相关产品推荐

