MapToPoster: 用代码把城市变成极简艺术海报
MapToPoster 这个开源项目能让你用几行命令,把全球任何城市变成惊艳的极简风格地图海报。可以挂在家里或者分享到社交媒体。

© MapToPoster / Unsplash
🎨 它能做什么?
MapToPoster 是一个 Python 命令行工具,只需指定城市名称,就能自动生成一张精美的地图艺术海报。它的工作原理清晰高效:
城市名称 → 地理编码 → 获取地图数据 → 应用主题风格 → 渲染海报
工作流程:
– 地理编码:使用 Nominatim(OpenStreetMap 的地理编码服务)将城市名转换为经纬度坐标
– 地图数据获取:使用 OSMnx 库从 OpenStreetMap 抓取城市道路、建筑、水体等数据
– 主题渲染:通过 matplotlib 将数据渲染成指定风格的海报图片
整个过程全自动,你只需要运行一条命令。
🌍 支持全球任意城市
MapToPoster 的一大亮点是全球化支持。无论是东京的密集街巷、威尼斯的水道网络,还是纽约的网格街区,它都能准确识别并呈现独特的城市肌理。
特色城市案例:
– 🇯🇵 东京:使用 japanese_ink(日式水墨)主题,呈现东方禅意
– 🇮🇹 威尼斯:使用 blueprint(建筑蓝图)主题,完美呈现水城脉络
– 🇺🇸 纽约:使用 noir(黑色电影)主题,曼哈顿网格一览无余
– 🇦🇪 迪拜:使用 midnight_blue(午夜蓝)主题,海岸线与棕榈岛交相辉映
– 🇲🇦 马拉喀什:使用 terracotta(赤陶色)主题,呈现北非古城的神韵
🎭 17 种预设主题,总有一款适合你
MapToPoster 内置了 17 种精心设计的主题,涵盖了从现代感到复古风、从冷调到暖色的各种审美需求:
| 主题 | 风格描述 |
|---|---|
noir |
纯黑背景 + 白色道路,最经典的极简风格 |
midnight_blue |
海军蓝背景 + 金色道路,优雅大气 |
blueprint |
建筑蓝图风格,工程师最爱 |
neon_cyberpunk |
赛博朋克霓虹风,粉色 + 青色的迷幻感 |
warm_beige |
复古米黄色调,温暖怀旧 |
pastel_dream |
柔和粉彩色,适合文艺小清新 |
japanese_ink |
日式水墨风格,东方禅意 |
emerald |
翠绿色调,森林系风格 |
ocean |
蓝绿色系,临海城市首选 |
terracotta |
赤陶色/赭石色调,地中海风情 |
sunset |
温暖的橙粉色渐变,如日落般绚烂 |
autumn |
秋日红橙色调,季节感十足 |
copper_patina |
氧化铜绿效果,工业复古 |
monochrome_blue |
单色蓝色系,极简纯粹 |
每种主题都可以通过 --theme 或 -t 参数指定,比如:
uv run ./create_map_poster.py -c "Tokyo" -C "Japan" -t japanese_ink
🖋️ 显示本地语言地名
MapToPoster 还支持多语言地名显示,可以配合 Google Fonts 加载对应语言的字体。这对于想要用母语展示城市名,但又希望地图保持原汁原味的用户来说,非常贴心。
中文示例:
python create_map_poster.py -c "Beijing" -C "China" -dc "北京" -dC "中国" --font-family "Noto Sans SC"
项目支持的语种包括:日语、韩语、泰语、阿拉伯语、简体中文、繁体中文、高棉语等。
📐 可自定义尺寸与范围
除了主题,你还可以调整:
- 海报尺寸:支持 1-20 英寸宽高(最大 20×20 英寸),可生成适合 Instagram、手机壁纸、4K 壁纸、A4 打印等不同用途的尺寸
- 地图半径:默认 18 公里,可调整到 4000-20000 米不等。小范围适合密集老城,大范围适合俯瞰整座城市
- 经纬度中心点:可以手动覆盖地理编码结果,精确指定地图中心
分辨率参考:
– Instagram Post:1080×1080 px(3.6×3.6 英寸)
– 4K 壁纸:3840×2160 px(12.8×7.2 英寸)
– A4 打印:2480×3508 px(8.3×11.7 英寸)
🔧 技术栈与依赖
MapToPoster 的技术栈非常简洁:
- Python 3:核心语言
- OSMnx:从 OpenStreetMap 获取城市地图数据
- matplotlib:将数据渲染成海报图片
- Nominatim:地理编码(城市名 → 经纬度)
- uv:可选的包管理工具,自动管理虚拟环境和依赖
安装方式极为简单,无需手动安装依赖库:
# 方式一:使用 uv(自动管理依赖和虚拟环境)
uv run ./create_map_poster.py -c "Paris" -C "France"
# 方式二:手动创建虚拟环境
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
./create_map_poster.py -c "Paris" -C "France"
🎯 适合谁用?
- 设计师:快速生成城市风格素材
- 旅行爱好者:把去过的城市做成纪念海报
- 程序员:体验”代码即艺术”的乐趣
- 礼物党:为朋友定制专属城市海报
- 内容创作者:社交媒体配图的新颖来源
📦 自定义主题
如果你对预设主题不满意,MapToPoster 支持完全自定义主题。只需在 themes/ 目录下创建一个 JSON 文件,即可定义背景色、道路色、水体色、公园色、渐变色等所有元素的颜色值。
✨ 小结
MapToPoster 是一个将技术与艺术完美结合的开源项目。它不需要复杂的设计软件,不需要昂贵的地图 API,仅凭几行代码和 OpenStreetMap 的开放数据,就能生成专业级的城市艺术海报。
无论是想要一张北京胡同的赤陶色海报,还是一幅东京夜景的赛博朋克风格地图,这个工具都能满足你。
项目地址: https://github.com/originalankur/maptoposter
快速体验:
uv run ./create_map_poster.py -c "Beijing" -C "China" -dc "北京" -dC "中国"
把城市变成艺术,就是这么简单。

更多开源项目与技术分享,欢迎关注开源派(osp.io)
关于作者:开源派,关注开源技术与独立开发。



发表回复