RepoDaily · 2026-08-21 · Learning / Curriculum

prettymaps:一行 Python 调用,把任意地名变成海报级地图

#8 Learning / Curriculum Python +627 marceloprates/prettymaps 打开仓库

极简 Python 库:一行 plot() 把地名变成风格化的 OpenStreetMap 海报,自带预设、山体阴影、Streamlit 前端和 Colab 教程,非常适合入门学习。

项目类型Learning / Curriculum
最适合想用一行代码得到海报级城市地图的 Python 学习者、生成艺术与绘图仪爱好者、个性化城市版画设计师
风险等级技术上低风险;若分发或托管衍生作品,需履行 AGPL v3 披露义务
评估时间15-30 分钟(安装、一次 plot 调用、可选 Streamlit 前端)

核心问题: 不碰任何 GIS 工具,能否用一次 prettymaps.plot() 调用输出一张风格化的 OpenStreetMap 成品图?

90/100

RepoDaily 采用评分

RepoDaily 将该项目的采用分评为 90/100(强):分数来自文章来源、安装路径、生产风险、差异化、许可证清晰度以及 AI/Agent 适配度。

基于 RepoDaily 来源和采用说明的方向性评分,不是基准测试。风险: 低
100证据质量

包含 5 个来源、覆盖 4 类来源;如有 RepoDaily 独有模块,会进一步提高证据分。

100可安装/可试用性

检测到 6 个工作流步骤、6 个下一步动作,以及 4 个命令/安装信号。

73维护可信度

趋势热度为 +627 stars;如内容中有 release、issue 或维护信号,会提高维护可信度。

100生产准备度

采纳风险标记为 low,并包含 4 条安全说明与 3 条跳过条件。

100差异化

3 个机会视角、4 个替代方案,以及 4 个类型化模块支撑差异化判断。

82许可证清晰度

文章中包含许可证来源或许可证表述。

54Agent / AI 适配度

文章正文和元数据中检测到 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 的项目,并因此关闭了自己的其他生成艺术项目。

解决什么问题

  • 做艺术感城市地图,传统上要么在桌面 GIS 软件里调几十个制图参数,要么在设计工具里手工描图。
  • 自己拉取 OpenStreetMap 几何数据,意味着为想画的每一层去处理 osmnx 查询、GeoPandas 表和 matplotlib 图元。
  • 绘图仪创作者需要干净的矢量几何,而不是网页地图的栅格截图。
  • 手工在多个城市复刻同一套风格不可持续,而这正是预设系统自动化的事情。

工作原理

  1. 运行 pip install prettymaps 安装;README 徽章要求 Python 3.11+。在 Colab 上使用 !pip install -e "git+https://github.com/marceloprates/prettymaps#egg=prettymaps",导入前需重启运行时。
  2. 跑快速开始:prettymaps.plot('Stad van de Zon, Heerhugowaard, Netherlands') 会拉取该查询的 OpenStreetMap 要素并渲染。
  3. 按 docs/usage.md 的两个字典模式定制:layers={'perimeter': {}, 'streets': {'width': 8}, 'buildings': {}, 'water': {}},再配一个含 fc/ec 颜色的 style 字典。
  4. 用 prettymaps.plot('Tokyo, Japan', save_as='tokyo_map.png') 保存结果;docs/index.md 列出 PNG、SVG 和绘图仪友好导出。
  5. 通过 docs/tutorial.md 进阶——预设、keypoints、山体阴影、multiplot——或直接用 streamlit run app.py 跳过写代码。
  6. 跟随 notebooks/tutorial.py 的 marimo 笔记本或其 Google Colaboratory 副本完整学习。

产品演示与界面预览

Hackernews Prettymaps
Hackernews Prettymaps — README 保存的 Hacker News 首页瞬间——让这个库第一次广为人知的流量高峰。 README.md image
Heerhugowaard sample
Heerhugowaard sample — 教程首图:快速开始所用的荷兰街区,以默认预设渲染。 README.md image
Macau, custom parameters
Macau, custom parameters — 同一套流程换上自定义 layers 与 style 参数,展示两个字典的定制上限。 README.md image

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 一小时,记录每次崩溃、慢查询和令人困惑的输入。

下一步建议

一个下午画完你的家乡

先跑 README 的快速开始亲自验证价值,再按教程自身的顺序决定要深入到哪一层。

  1. 确认 Python 版本为 3.11+(README 徽章)。
  2. 运行 pip install prettymaps。
  3. 对自己的地址执行 prettymaps.plot(),或直接用快速开始的 'Stad van de Zon, Heerhugowaard, Netherlands'。
  4. 用 save_as 保存结果并查看 PNG。
  5. 读完 docs/tutorial.md 的预设部分,再运行 streamlit run app.py。
  6. 分享或售卖成品之前,阅读 LICENSE(AGPL v3)以及 README 的署名与 NFT 规则。

RepoDaily 判断

prettymaps 是少见的'宣传图即快速开始'的库:一次 plot() 调用、一个真实地名、一张可装框的地图。作为通往地理空间 Python 的入口,它的配套异常齐全——分步教程、预设、Colab 笔记本和图形界面;唯一需要认真对待的摩擦不在技术而在法律:AGPL v3 披露、图上署名,以及对 NFT 的坚决说不。

信息来源