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 快速开始

只需几步,你就能在本地画出第一幅地图:

  1. 安装:

    “`bash

    本地安装(推荐)

    $ pip install prettymaps
    “`

    如果你在 Google Colaboratory 上使用,则改用:

    bash
    !pip install -e "git+https://github.com/marceloprates/prettymaps#egg=prettymaps"

    安装完成后需要重启运行时(Runtime → Restart Runtime),再导入 prettymaps。

  2. 绘制你的第一张地图:

    “`python
    import prettymaps

    plot = prettymaps.plot( Stad van de Zon, Heerhugowaard, Netherlands )
    “`

    只要地名能被 OpenStreetMap 解析,就能立刻得到一张风格化的城市插画。

  3. 自定义图层与配色:

    “`python
    import prettymaps

    plot = 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”]},
    },
    )
    “`

  4. 启动可视化前端:克隆仓库后,在项目根目录执行:

    bash
    $ streamlit run app.py

    随后在浏览器中拖动滑块调参,实时预览不同风格的地图效果。

  5. 运行完整教程:想系统学习全部能力(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

声明:本站资源均整理自互联网,版权归原作者所有,仅供学习交流使用,请勿直接商用,若需商用请购买正版授权。因违规使用产生的版权及法律责任由使用者自负。部分资源可能包含水印或引流信息,请自行甄别。若链接失效可联系站长尝试补链。若侵犯您的权益,请邮件(将 # 替换为 @)至 feedback#tgoos.com,我们将及时处理删除。转载请保留原文链接,感谢支持原创。