如何调整OpenStreetMaps生成图像的分辨率?
解决OSMnx生成建筑图像分辨率不足的问题
核心问题分析
你遇到的分辨率无提升问题,主要是因为过大的figsize与高dpi不匹配,导致Matplotlib无法有效渲染细节,甚至可能触发内存限制,最终输出的图像实际分辨率并未达标。
优化方案
以下是调整后的代码及关键优化点:
import osmnx as ox import matplotlib.pyplot as plt place_name = "Greetsiel, Germany" tags_buildings = {'building': True} # 1. 合理设置画布尺寸(英寸为单位),避免过大导致渲染异常 fig, ax = plt.subplots(figsize=(12, 18)) buildings = ox.features_from_place(place_name, tags_buildings) # 2. 调整绘图参数,确保建筑轮廓在高分辨率下清晰可见 buildings.plot(ax=ax, markersize=0.1, linewidth=0.1) # 3. 隐藏坐标轴、去除空白区域,充分利用分辨率 plt.axis('off') # 4. 保存时直接指定高dpi,无需修改全局配置 plt.savefig( r'C:\\Users\\Lepakk\\Desktop\\buildings_highres.png', dpi=1000, bbox_inches='tight', pad_inches=0 ) plt.close()
关键优化说明
- 缩小
figsize:原代码中(120,180)的画布尺寸过于夸张(英寸单位),结合1000dpi会生成超大规模图像,超出Matplotlib的有效渲染范围。缩小为(12,18)后,1000dpi下的实际像素为12000×18000,既保证清晰度,又避免内存溢出。 - 显式控制绘图区域:用
plt.subplots创建画布和轴对象,比直接调用buildings.plot()更易控制渲染细节。 - 优化保存参数:
bbox_inches='tight'和pad_inches=0可以去除图像周围的空白边距,让有效内容占据全部分辨率;plt.axis('off')隐藏无关的坐标轴元素。 - 独立设置保存dpi:全局
plt.rcParams["figure.dpi"]仅影响屏幕显示,直接在savefig中指定dpi才是控制输出分辨率的可靠方式。
内容的提问来源于stack exchange,提问作者Lepakk
相关产品推荐
相关产品推荐

