marceloprates/prettymaps
摘要
一个轻量级的Python库,用于从OpenStreetMap绘制自定义地图,利用osmnx、matplotlib、shapely和vsketch进行地理可视化。
查看缓存全文
缓存时间: 2026/08/19 15:46
marceloprates/prettymaps 源码: https://github.com/marceloprates/prettymaps
prettymaps
一个用于从 OpenStreetMap (https://www.openstreetmap.org/#map=12/11.0733/106.3078) 绘制定制化地图的最小化 Python 库。它基于 osmnx (https://github.com/gboeing/osmnx), matplotlib (https://matplotlib.org/), shapely (https://shapely.readthedocs.io/en/stable/index.html) 和 vsketch (https://github.com/abey79/vsketch) 构建。
文档 (https://marceloprates.github.io/prettymaps/)
PyPI (https://pypi.org/project/prettymaps/) Python (https://www.python.org/) 许可证 本作品采用 GNU Affero 通用公共许可证 v3.0 授权(你可以进行商业使用、分发和修改此项目,但必须公开源代码并附带许可证和版权声明)。
关于署名和 NFT 的说明:
- 请保留图片上署名我的仓库和 OpenStreetMap 的信息(这是其许可证 (https://www.openstreetmap.org/copyright) 的强制性要求)。
- 我个人反对 NFT,因其对环境的影响 (https://earth.org/nfts-environmental-impact/)、本质上是一个巨大的洗钱金字塔骗局 (https://twitter.com/smdiehl/status/1445795667826208770),以及它们为开源和生成艺术社区的盗版行为创造了结构性诱因 (https://twitter.com/NFTtheft)。
- 我绝不授权将此项目用于出售 NFT,尽管我无法在法律上强制执行这一点。请尊重创作者。
- AeternaCivitas (https://magiceden.io/marketplace/aeterna_civitas) 和 geoartnft (https://www.geo-nft.com/) 项目曾使用此作品出售 NFT,并拒绝署名。查看他们被曝光后的回应:AeternaCivitas (https://github.com/marceloprates/prettymaps/raw/main/pictures/NFT_theft_AeternaCivitas.jpg),geoartnft (https://github.com/marceloprates/prettymaps/raw/main/pictures/NFT_theft_geoart.jpg)。
- 我已在 Github 上关闭了我的其他生成艺术项目,并且不会以开源形式分享新项目,以保护自己免受 NFT 社区的侵扰。
曾出现在 Hacker News (https://web.archive.org/web/20210825160918/https://news.ycombinator.com/news) 上:
prettymaps 子版块 (https://www.reddit.com/r/prettymaps_/)
教程 (marimo) · Google Colaboratory 演示 (https://colab.research.google.com/github/marceloprates/prettymaps/blob/master/notebooks/tutorial.py)
安装
本地安装:
使用以下命令安装 prettymaps:
pip install prettymaps
在 Google Colaboratory 上安装:
使用以下命令安装 prettymaps:
!pip install -e "git+https://github.com/marceloprates/prettymaps#egg=prettymaps"
然后在导入 prettymaps 之前重启运行时(Runtime -> Restart Runtime)。
运行前端
安装 prettymaps 后,你可以使用以下命令从 prettymaps 仓库运行前端(streamlit)应用:
streamlit run app.py
教程
完整教程位于 docs/tutorial.md —— 一份包含渲染图像的 Markdown 指南,涵盖 [Plot] 数据类字段、layers/style 参数、预设、多图绘制、山体阴影和关键点。
Heerhugowaard 示例
快速开始:
import prettymaps
plot = prettymaps.plot('Stad van de Zon, Heerhugowaard, Netherlands')
| 资源 | 在哪里找到 |
|---|---|
| 完整教程 (markdown + 图像) | docs/tutorial.md |
| 交互式 marimo 笔记本 (可运行) | notebooks/tutorial.py |
| 在 Google Colab 中打开 | 在 Colab 中打开 (https://colab.research.google.com/github/marceloprates/prettymaps/blob/master/notebooks/tutorial.py) |
| Streamlit 前端 | streamlit run app.py |
本地运行教程 (marimo)
# 安装 marimo (已在 requirements.txt 中)
pip install marimo
# 在浏览器中打开笔记本
marimo edit notebooks/tutorial.py
自定义参数
prettymaps.plot() 最重要的参数是:
layers—— 要获取的 OpenStreetMap 图层字典。style—— 每个图层的 matplotlib 样式参数字典。preset—— 加载一个 JSON 预设(例如'default','minimal','macao','tijuca')。circle/radius/dilate—— 边界形状。plot是一个数据类,包含geodataframes(按图层划分的 GeoDataFrames)、fig和ax。
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"]},
},
)
澳门,自定义参数
完整示例集(澳门、Bom Fim、马赛克、巴塞罗那绘图仪、Tijuca、多图绘制、山体阴影、Garopaba 关键点)请参见 docs/tutorial.md。
相似文章
@clcoding: 使用Python创建交互式地图 https://amzn.to/4wmCdNW
推广电子书《Python for GIS & Spatial Intelligence》,该书教授如何使用Python进行交互式地图制作和空间分析。
Organic Maps
Organic Maps 是一款免费、注重隐私的离线地图应用,适用于徒步、骑行和驾车,由 OpenStreetMap 提供支持,可在 iOS、Android 及其他平台上使用。最近其安装量达到了 600 万。
MapComplete – 为OpenStreetMap做出贡献
MapComplete是一个可编辑的主题地图工具,允许用户通过专业地图为OpenStreetMap做出贡献。
Show HN: Isopolis – 旧金山等距像素地图
Isopolis 是基于 OpenStreetMap 和 CARTO 数据构建的旧金山等距像素地图,其中社区边界来自 DataSF。
折叠纸地球
Folding Globes 提供基于开放许可数据构建的免费可打印纸地球,包含主题和地球仪构建器,是 MapScaping 的一个项目。