MAP TOOL
想找一张你所在城市的地图挂墙上?网上的不是太丑就是太贵,而且大概率找不到你想要的城市。
maptoposter 是一个开源的 Python 命令行工具(GitHub 13K star),能从 OpenStreetMap 获取道路数据,自动生成极简风格的城市地图海报。17 种配色主题,支持中文标注,输出 300 DPI 高清 PNG,直接拿去打印或当手机壁纸都够用。
maptoposter 的安装很简单。用 uv(推荐)或者 pip 都行,依赖包含 osmnx、geopandas、matplotlib 这些地理数据处理库,第一次安装会拉十几个包,需要等一两分钟。
装完直接用。最简单的一条命令——指定城市和国家就行。工具会自动从 OpenStreetMap 下载该城市的道路、水域、绿地数据,然后渲染成一张极简风格的地图海报。
这条命令做了三件事:1)通过 Nominatim 把城市名转成经纬度坐标;2)从 Overpass API 下载半径 15km 范围内的道路、河流、公园数据;3)用 matplotlib 渲染成 PNG,输出到 posters/ 目录。整个过程大约 1-3 分钟,取决于城市大小和网络速度。下载的地图数据会自动缓存到本地,第二次生成同一城市会快很多。maptoposter 渲染时会把道路按等级分层——高速公路、主干道、小路、步行道各用不同粗细和颜色,水域用浅蓝色块,绿地用更浅的绿色填充,层次分明。
maptoposter 支持全球任意城市,但中文支持是很多人关心的问题。通过 --font-family 参数指定 Google Fonts 的 Noto Sans SC 字体,再用 --display-city 设置中文城市名,就能在地图上显示中文标注。下面是我实测生成的 11 座中国城市地图海报。
每座城市用了不同的主题和距离参数,展示 maptoposter 的定制能力。distance 参数控制地图半径:12000m 适合紧凑型城市(深圳、杭州),能看到完整的城市轮廓;18000m 适合大型都市(北京),能覆盖到五环外的路网。实测下来,不同城市的地图风格差异很大——重庆的山城路网密密麻麻很有冲击力,深圳的路网则方正有序像棋盘。
北京
上海
广州
深圳
成都
杭州
南京
武汉
西安
重庆
长沙
maptoposter 内置 17 种主题,覆盖从极简黑白到赛博朋克霓虹的各种风格。几个有代表性的:
▸ noir — 纯黑白,经典海报风格,线条粗细对比鲜明,打印出来装裱效果最好
▸ midnight_blue — 深蓝底配金铜色道路,像翻开的复古地图册,适合有年代感的城市(南京、西安)
▸ japanese_ink — 水墨画风格,浅灰底配深色线条,留白多,意境好,杭州配这个主题效果极佳
▸ neon_cyberpunk — 深色底配粉色/青色霓虹线条,赛博朋克夜景感,广州和重庆用这个主题特别搭
▸ terracotta — 暖色调赤陶配色,偏地中海风情,北京用这个主题有厚重的历史感
查看所有主题可以用 --list-themes 参数,想一次性生成同一城市的所有主题对比,用 --all-themes。主题文件是 JSON 格式,放在 themes/ 目录下,你可以自定义颜色、道路层级样式、背景色等参数,创建完全属于自己的地图风格。
参数速查 / --theme 选择配色 / --distance 控制地图半径(4000-20000m)/--width --height 控制输出尺寸(默认 12x16 英寸)/--format 选择 png/svg/pdf
默认输出 300 DPI 的 PNG,分辨率 3600x4800 像素。这个精度拿去打印 A3 尺寸的海报完全没问题,像素不会糊。默认画面比例是 3:4(12x16 英寸),接近 A3 纸张比例。如果只需要电子版(手机壁纸、社交媒体),可以缩小尺寸加快生成速度。
实际用途挺多的:
▸ 家居装饰 — 生成你所在城市或家乡的地图海报,打印装框上墙
▸ 手机壁纸 — 调小 --width --height(比如 6x12),生成竖版壁纸
▸ 旅行纪念 — 把旅行去过的城市都生成一张,拼成地图墙
▸ 设计素材 — SVG/PDF 格式输出,可以在 Illustrator 里进一步编辑
输出的 SVG 和 PDF 格式是矢量图,放大不失真,适合需要二次设计的场景。PNG 格式直接用于社交媒体分享和打印。实测生成的海报文件大小在 5-15MB,压缩到 1200px 宽度后约 500KB-2MB,在手机上查看加载很快。
说完优点也得说说局限。maptoposter 不是万能的,它依赖 OpenStreetMap 的数据质量,这也决定了它的天花板。
▸ 数据质量因地而异 — 一线城市的 OSM 数据通常很完整,但三四线城市或偏远地区可能路网数据不全,生成的地图会比较空
▸ 网络依赖 — 首次生成需要从 Overpass API 下载数据,国内访问 sometimes 不稳定,可能需要多试几次或用代理
▸ 大城市渲染慢 — 北京上海这种级别的城市,distance 15000m 以上时数据量很大,渲染可能需要 3-5 分钟,内存占用也会到 1-2GB
▸ 不支持自定义标注 — 不能在地图上添加自定义的标记点或文字,纯地图展示,没有交互功能
maptoposter 是一个地图可视化工具,不是 GIS 软件。它做一件事——把城市地图变成好看的海报——并且做得很好。但如果你需要标注、测距、图层控制这些功能,得用 QGIS 或 Mapbox 这类专业工具。
NEXT STEP
试试生成你所在城市的地图
git clone 仓库,一条命令指定城市名,等一两分钟,一张极简城市地图海报就出来了。
选一个你喜欢的主题,调一下 distance 参数控制范围,生成的 PNG 直接拿去打印。整个过程不超过 5 分钟,比在网上找一张满意的城市地图快得多。
地图不只是导航工具。一张好看的城市地图挂在墙上,是你和这座城市关系的视觉证明。而用 Python 自己生成一张,比在网上买一张有意义得多。