核心问题: 不碰任何 GIS 工具,能否用一次 prettymaps.plot() 调用输出一张风格化的 OpenStreetMap 成品图?
RepoDaily 采用评分
RepoDaily 将该项目的采用分评为 90/100(强):分数来自文章来源、安装路径、生产风险、差异化、许可证清晰度以及 AI/Agent 适配度。
包含 5 个来源、覆盖 4 类来源;如有 RepoDaily 独有模块,会进一步提高证据分。
检测到 6 个工作流步骤、6 个下一步动作,以及 4 个命令/安装信号。
趋势热度为 +627 stars;如内容中有 release、issue 或维护信号,会提高维护可信度。
采纳风险标记为 low,并包含 4 条安全说明与 3 条跳过条件。
3 个机会视角、4 个替代方案,以及 4 个类型化模块支撑差异化判断。
文章中包含许可证来源或许可证表述。
文章正文和元数据中检测到 1 个 AI/Agent 相关信号。
项目概览
prettymaps 是一个极简的 Python 库,用于从 OpenStreetMap 数据绘制定制化地图,README 明确列出其底层的四个包:osmnx、matplotlib、shapely 和 vsketch。文档里的一行示例就是全部卖点——prettymaps.plot('Porto Alegre, Brazil')——输入一个地名字符串,输出一张风格化城市地图。在截至 2026-08-21 的趋势窗口内,它新增 627 颗星、排名第 8,这正是'成品图值得装框'的截图型库特有的传播速度。
对一个如此小的项目而言,它的学习面异常完整。文档站托管在 GitHub Pages,包含 index、tutorial.md、usage.md 和 api.md;README 指向的完整 markdown 教程覆盖 Plot 数据类字段、layers 与 style 参数、预设、multiplot、山体阴影和 keypoints。同一份教程以 marimo 笔记本形式放在 notebooks/tutorial.py,并提供 Google Colaboratory 版本;仓库还内置 Streamlit 前端,用 streamlit run app.py 即可启动。初学者从 pip install 到图形界面,全程不需要写一个循环。
定制方式就是两个字典。layers 决定画什么——perimeter、streets(带 width 参数)、buildings、water;style 决定每层长什么样,使用 matplotlib 风格的 fc/ec 颜色键。prettymaps.plot('Tokyo, Japan', save_as='tokyo_map.png') 把结果写入磁盘,文档特性列表还提到 PNG 之外的 SVG 与绘图仪友好格式导出。预设让喜欢的风格跨城市复用,keypoints 高亮特定地点,hillshade 增加山体阴影营造伪 3D 效果。
治理条款与功能同等重要。项目采用 GNU AGPL v3.0 许可:README 说明可以商用、分发和修改,但必须连同许可与版权声明公开源码。成品图需保留对仓库和 OpenStreetMap 的署名,README 称这是 OSM 许可的强制要求。作者还明确表示不授权任何形式的 NFT 用途,点名 AeternaCivitas 与 geoartnft 两个未署名售卖 NFT 的项目,并因此关闭了自己的其他生成艺术项目。
为什么现在变热
- 趋势窗口内新增 627 星、2026-08-21 排名第 8:海报级成图天然适合社交传播,每个用户的渲染图都是一次自来水宣传。
- README 保存了 Hacker News 首页的存档链接,并链接 r/prettymaps_ 子版块——两条持续带来新访客的发现渠道。
- 从 pip install prettymaps 到出图只差一次函数调用,不需要任何 GIS 背景。
- 教程导览用 Heerhugowaard(默认预设)对比 Macau(自定义参数),两张图就展示了定制上限。
- Google Colab 演示加 Streamlit 前端,意味着第一次尝试可以完全跳过本地安装。
解决什么问题
- 做艺术感城市地图,传统上要么在桌面 GIS 软件里调几十个制图参数,要么在设计工具里手工描图。
- 自己拉取 OpenStreetMap 几何数据,意味着为想画的每一层去处理 osmnx 查询、GeoPandas 表和 matplotlib 图元。
- 绘图仪创作者需要干净的矢量几何,而不是网页地图的栅格截图。
- 手工在多个城市复刻同一套风格不可持续,而这正是预设系统自动化的事情。
工作原理
- 运行 pip install prettymaps 安装;README 徽章要求 Python 3.11+。在 Colab 上使用 !pip install -e "git+https://github.com/marceloprates/prettymaps#egg=prettymaps",导入前需重启运行时。
- 跑快速开始:prettymaps.plot('Stad van de Zon, Heerhugowaard, Netherlands') 会拉取该查询的 OpenStreetMap 要素并渲染。
- 按 docs/usage.md 的两个字典模式定制:layers={'perimeter': {}, 'streets': {'width': 8}, 'buildings': {}, 'water': {}},再配一个含 fc/ec 颜色的 style 字典。
- 用 prettymaps.plot('Tokyo, Japan', save_as='tokyo_map.png') 保存结果;docs/index.md 列出 PNG、SVG 和绘图仪友好导出。
- 通过 docs/tutorial.md 进阶——预设、keypoints、山体阴影、multiplot——或直接用 streamlit run app.py 跳过写代码。
- 跟随 notebooks/tutorial.py 的 marimo 笔记本或其 Google Colaboratory 副本完整学习。
产品演示与界面预览



30 分钟上手路径
最快的验证方式是照抄 README 的三条命令。第一条:pip install prettymaps,注意 README 徽章要求 Python 3.11+。第二条:快速开始——import prettymaps; prettymaps.plot('Stad van de Zon, Heerhugowaard, Netherlands')——正是教程首图里的荷兰街区。第三条:在仓库中运行 streamlit run app.py,用图形界面代替 API。在 Google Colab 上,README 给出的安装命令是 !pip install -e "git+https://github.com/marceloprates/prettymaps#egg=prettymaps",随后必须 Runtime -> Restart Runtime 再导入 prettymaps——这是最容易漏掉的一步。
接着读 docs/tutorial.md:README 称其为完整教程,覆盖渲染图例、Plot 数据类字段、layers 与 style 参数、预设、multiplot、山体阴影和 keypoints。导览图片把学习曲线可视化——Heerhugowaard 用默认预设渲染,Macau 用自定义参数——你能直接看出'不再接受默认值'到底改变了什么。
架构:四个库,一个 plot 调用
prettymaps 是 README 点名的四个包之上的一层薄封装:osmnx 负责 OpenStreetMap 数据侧,matplotlib 负责渲染,shapely 负责几何,vsketch 负责绘图仪友好输出。docs/usage.md 展示的公开 API 很小——prettymaps.plot() 加上 query、layers、style、save_as 参数;docs/index.md 还标注了与 tutorial.md、usage.md 并列的 api.md 参考页。
这种'小'正是教学价值所在。定制契约就是两个字典,学习者用一个示例就能建立完整心智模型;当项目超出预设能力时,再下探到 osmnx 与 shapely。文档结构也对应这条路径:index 讲特性、tutorial 讲概念、usage 给可复制片段、api 给完整接口。
许可与使用红线
- LICENSE 为 GNU AGPL v3.0:允许商用、分发和修改,但必须连同许可与版权声明公开修改后的源码;AGPL 前言把披露义务延伸到运行于网络服务器的修改版本。
- README 要求成品图保留对仓库和 OpenStreetMap 的署名,并称这是 OSM 许可的强制要求。
- 作者明确拒绝任何形式的 NFT 用途,点名 AeternaCivitas 与 geoartnft 未署名售卖 NFT,并表示因此关闭了其他生成艺术项目。
- README 徽章要求 Python 3.11+;Colab 安装路径直接从仓库拉取代码,执行前应固定或审查具体提交。
采用前检查清单
- 安装前确认解释器为 Python 3.11+。
- 尽早确定输出路线:印刷用 PNG,切割/绘图用 SVG 或绘图仪友好格式(见 docs/index.md 特性列表)。
- 若要售卖印刷品或托管衍生服务,先规划 AGPL v3 源码披露并保留图上署名。
- 彻底排除 NFT 用途——作者明令禁止。
- 新人入门走 notebooks/tutorial.py 或 Colab 演示,而不是直接读 API 参考。
谁适合关注
适合关注
- 需要真实城市矢量几何的绘图仪与生成艺术爱好者。
- 刚走出玩具示例、想接触'API 极小且立刻出图'的库的 Python 学习者。
- 不做 GIS 就想产出个性化城市版画(街区、婚礼、家乡)的设计师。
- 想用一行可导出的成果演示 OpenStreetMap 数据的老师。
可以先跳过
- 计划售卖 NFT 的任何人:作者声明不以任何方式授权 NFT 用途。
- 不愿为修改版本公开 AGPL v3 源码的托管服务。
- 需要路径规划、等时圈或空间分析的用法——prettymaps 负责画图,分析请用 osmnx。
风险与注意事项
对个人创作、教学和一次性印刷而言风险很低:这是一个客户端绘图库,没有账号或密钥,输入只是地名字符串。真正需要在意的是法律条款而非技术问题——AGPL v3 的披露义务、强制署名,以及作者对 NFT 的禁令。
- README 与文档中均未出现认证接口、存储凭据或遥测。
- 分发或公开托管衍生版本时,AGPL v3 要求公开修改后的源码。
- 印刷成品必须保留对仓库与 OpenStreetMap 的署名。
- 无论是否署名,作者都明确拒绝 NFT 用途。
- 地图数据经由 osmnx 走网络获取;输入是地名字符串而非凭据。
- Colab 安装命令直接从 GitHub 仓库安装(git+https),若在意供应链来源,应固定并审查所执行的提交。
- README 与文档未描述任何账号、密钥或遥测机制。
- 主要审计项是许可合规:衍生作品须随附 AGPL v3 许可文本与版权声明。
替代方案比较
| 方案 | 适用场景 | 代价 |
|---|---|---|
osmnx | 需要自己抓取并分析 OpenStreetMap 路网与几何,而不是直接画出成品海报 | 免费,开源 |
vsketch | 目标是笔式绘图仪,想要的是生成式草图框架而非地图专用预设 | 免费,开源 |
QGIS | 需要完整桌面制图能力:投影、标注引擎和打印排版 | 免费,开源 |
Folium | 想要在 Python 笔记本里做交互式 Leaflet 网页地图,而不是静态海报 | 免费,开源 |
这个趋势说明了什么
第一堂地理数据课,产出可打印的成果
prettymaps.plot() 把地名字符串直接变成成品图,第一堂课可以在学生接触坐标系和投影之前,就以下一张可装框的作业收尾;docs/tutorial.md 再按 Plot 数据类字段的顺序展开概念。
让五位新手跑 Colab 演示,记录每个人是否在 15 分钟内导出 PNG。
预设驱动的城市海报产品线
预设可以持久化风格,导出覆盖 PNG、SVG 与绘图仪友好格式,同一套视觉可跨城市批量复现。AGPL v3 明确允许商用,前提是披露源码并保留署名。
用同一个预设产出三张海报,再对比市面上同类城市地图印刷品的单位成本与定价。
活动现场的 GUI 点单机
streamlit run app.py 启动仓库自带的前端,适合做成活动现场的本地点单机:来宾输入自己的地址,带走一张打印图。
在一场活动中运行 app.py 一小时,记录每次崩溃、慢查询和令人困惑的输入。
RepoDaily 判断
prettymaps 是少见的'宣传图即快速开始'的库:一次 plot() 调用、一个真实地名、一张可装框的地图。作为通往地理空间 Python 的入口,它的配套异常齐全——分步教程、预设、Colab 笔记本和图形界面;唯一需要认真对待的摩擦不在技术而在法律:AGPL v3 披露、图上署名,以及对 NFT 的坚决说不。