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

如何调整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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:23:09