prettymaps:用几行 Python 代码,把任意城市画成一幅艺术品
你是否曾经想过,把一座城市的地图变成一幅可以打印、挂在墙上的插画,却苦于不会 GIS、不熟悉复杂的制图流程?prettymaps 的出现,正是为了解决这个问题。它是一个基于 osmnx + matplotlib + shapely + vsketch 构建的极简 Python 库,开发者只需给出一句地名,就能生成风格化、可定制、高颜值的城市地图,让”数据可视化”变成”艺术创作”。本文将带你全面了解这个在 Hacker News 上引发热议、并被 Reddit 社区单独开设版块讨论的开源项目。
截至收录:
prettymaps stars 数:14239
prettymaps forks 数:732
prettymaps 项目目录截图

prettymaps 核心亮点
🎨 一行代码,地名即出图:整个快速上手只需要两行代码——import prettymaps 加上 prettymaps.plot( 地名 )。库会自动向 OpenStreetMap 请求数据、按图层解析几何、用预设配色渲染出图,无需任何 GIS 知识储备。
🧩 图层与样式完全可定制:plot() 提供了 layers(要抓取哪些 OSM 图层,如水系、建筑、道路、绿地)、style(每个图层对应的 matplotlib 样式,如填充色 fc、描边色 ec、调色板 palette)、preset(内置 JSON 预设,如 default、minimal、macao、tijuca)等参数,让同一块地皮能反复生成截然不同的视觉风格。
⭕ 灵活的边界控制:通过 circle、radius、dilate 三个参数,你可以决定输出是方形还是圆形、覆盖半径多大、边界外扩多少,非常适合制作明信片、徽章、唱片封面等圆形构图作品。
🖥️ 开箱即用的交互体验:项目自带 Streamlit 前端(streamlit run app.py),可以像调音台一样在线调参并实时预览;同时提供 marimo 可运行笔记本与 Google Colab 一键 Demo,学习曲线几乎为零。
🔍 不止于”好看”,还有”好学”:plot 返回值是一个 dataclass,内含每个图层对应的 GeoDataFrame、fig 与 ax 对象。这意味着你可以在漂亮的底图上继续叠加自定义分析——比如标注关键点(keypoints)、叠加山体晕渲(hillshade)、甚至做多图拼贴(multiplot)。
🛡️ 明确的开源立场:项目采用 GNU AGPL v3.0 许可(允许商用、分发与修改,但必须公开源码并保留版权声明),作者同时在 README 中明确声明:不支持、不授权将本项目用于 NFT 铸造,并要求所有输出图像保留对仓库与 OpenStreetMap 的署名。这种对社区伦理的坚持,在生成艺术领域尤为难得。
prettymaps 快速开始
只需几步,你就能在本地画出第一幅地图:
- 安装:
“`bash
本地安装(推荐)
$ pip install prettymaps
“`如果你在 Google Colaboratory 上使用,则改用:
bash
!pip install -e "git+https://github.com/marceloprates/prettymaps#egg=prettymaps"安装完成后需要重启运行时(Runtime → Restart Runtime),再导入
prettymaps。 - 绘制你的第一张地图:
“`python
import prettymapsplot = prettymaps.plot( Stad van de Zon, Heerhugowaard, Netherlands )
“`只要地名能被 OpenStreetMap 解析,就能立刻得到一张风格化的城市插画。
- 自定义图层与配色:
“`python
import prettymapsplot = prettymaps.plot(
Praça Ferreira do Amaral, Macau ,
circle=True,
radius=1100,
layers={
“water”: {“tags”: {“natural”: [“water”, “bay”]}},
“building”: {“tags”: {“building”: True}},
},
style={
“water”: {“fc”: “#a1e3ff”, “ec”: “#2F3737”},
“building”: {“palette”: [“#FFC857”, “#E9724C”, “#C5283D”]},
},
)
“` - 启动可视化前端:克隆仓库后,在项目根目录执行:
bash
$ streamlit run app.py随后在浏览器中拖动滑块调参,实时预览不同风格的地图效果。
- 运行完整教程:想系统学习全部能力(presets、multiplot、hillshade、keypoints 等),可以打开 marimo 笔记本:
bash
$ pip install marimo
$ marimo edit notebooks/tutorial.py完整图文教程位于
docs/tutorial.md,也可直接在 Google Colab 中打开运行。
prettymaps 应用场景
场景一:生成艺术与个人创作 插画师、独立创作者可以使用 prettymaps 把家乡、母校、第一次旅行的城市绘制成定制海报或明信片。凭借圆形容器和丰富的配色预设,输出作品可直接用于印刷,许多用户正是通过 Reddit 的 prettymaps 版块分享自己的作品。
场景二:城市数据分析与可视化 由于 plot 对象暴露了每个图层对应的 GeoDataFrame,城市规划研究者、数据记者可以在此基础上统计建筑密度、水系占比、路网结构,并在同一张美学底图上叠加分析结果,让研究报告兼具专业性与可读性。
场景三:教学与地理信息入门 对于想学习 OSM 数据、shapely 几何操作或 matplotlib 样式的开发者而言,prettymaps 是一个极佳的练手项目——它把”拉取数据 → 几何处理 → 样式渲染”的完整链路压缩到了几十行代码里。
场景四:文档与演示配图 技术博客作者、产品团队可以用它为文章、幻灯片快速生成风格统一的地图插图,避免从零手绘或使用风格不协调的截图。
用户案例:项目曾登上 Hacker News 首页,并在 Reddit 上拥有独立的 prettymaps 社区,聚集了大量分享作品的用户;作者也公开提及 AeternaCivitas、geoartnft 等项目曾基于该仓库产出内容(尽管未按许可署名,也因此引发了关于开源伦理的公开讨论)。
prettymaps 链接
marceloprates / prettymaps项目地址:https://github.com/marceloprates/prettymaps
本文地址:https://www.tgoos.com/46654
