有些城市适合用照片记住,有些城市也适合用路网记住。

一座城市的道路、水域、绿地和街区轮廓,本身就有很强的图案感。如果把普通地图里的导航信息拿掉,只保留这些结构,再配上合适的颜色和排版,就会变成一张可以打印、收藏或做壁纸的城市地图海报。

我做了一个在线工具 MapPoster Online,用来在浏览器里生成这类城市地图海报。

  • 在线体验:https://maptoposter.0v0.one
  • GitHub:https://github.com/ianho7/maptoposter-online

它适合用来做什么

MapPoster Online 的使用方式比较直接:打开网页,选择城市,调整地图半径、主题、颜色、字体和导出尺寸,然后下载图片。

它比较适合这些场景:

  • 给自己生活过的城市做一张纪念图
  • 给旅行去过的地方做一张壁纸
  • 生成 A4 尺寸的地图海报,用来打印装饰
  • 给文章、笔记或项目页面配一张城市视觉图
  • 对地图、城市路网和 OpenStreetMap 数据感兴趣,想快速看不同城市的结构差异

它不是普通地图截图工具,也不是导航工具。它的重点不是“告诉你怎么走”,而是把城市地图重新渲染成一张更适合展示的图片。

目前支持的功能

  • 城市地图海报生成
  • A4 竖版、A4 横版、方形、手机壁纸、桌面 16:9 等导出尺寸
  • 300 DPI 导出,方便打印
  • 20 种内置主题
  • 自定义背景、道路、水体、绿地、文字等颜色
  • 上传 TTF/OTF 字体
  • 英文、中文、日文、韩文、德文、西班牙文、法文界面
  • 浏览器 IndexedDB 缓存,重复生成同一城市会更快

下面是一些生成效果。

使用体验

使用时,最主要的几个参数是城市、半径、主题、字体和导出比例。

城市决定地图内容,半径决定展示范围。半径太小,可能更像一块街区;半径太大,道路会变密,生成也会更慢。主题和颜色则决定最终海报的气质,比如更适合打印的浅色主题,或者更适合作壁纸的深色主题。

导出尺寸目前覆盖了几个常见用途:A4 适合打印,手机壁纸适合直接保存到手机,桌面 16:9 适合做电脑背景。300 DPI 导出主要是为了照顾打印场景。

字体也可以调整。除了内置字体,也可以上传自己的 TTF/OTF 字体文件,这样城市名和国家名的视觉风格会更接近你想要的海报效果。

数据从哪里来

MapPoster Online 默认主要使用 OpenStreetMap 数据,并通过 Overpass API 获取道路、水体、公园和 POI 等地图要素。

生成流程主要在浏览器端完成。数据获取、投影转换和 Rust/WASM 渲染放在 Web Worker / WASM 里处理,已获取过的数据会缓存在浏览器 IndexedDB 中。

为什么做成网页版

这个项目受 maptoposter 这个 Python CLI 项目启发。CLI 工具适合熟悉命令行和本地环境的用户,但对只想快速生成一张图片的人来说,安装环境和运行命令会增加门槛。

网页版的目标是降低这一步的成本:不用安装软件,不用准备 Python 环境,打开网页就可以试。

为了让浏览器端也能处理较大的地图数据,项目使用了 React + TypeScript 做界面,Rust/WASM + tiny-skia 做渲染。对普通使用者来说,不需要关心这些技术细节;它们主要是为了承担地图数据处理和较高分辨率导出的计算压力。
 

现在还不完美

这个工具目前还有一些限制。

首先,大城市、大半径生成时仍然可能比较慢,尤其会受到 Overpass 节点状态影响。公共地图数据源并不总是稳定,项目里做了分块、镜像节点选择和缓存,但不能完全消除这种影响。

其次,不同城市的 OpenStreetMap 数据完整度不同。有些地方的水域、绿地或 POI 数据可能不完整,最终生成效果也会受影响。

另外,它现在更像一个“快速生成地图海报”的工具,不是专业 GIS 软件,也不是完整的设计排版工具。如果你需要非常精细的地图制图控制,它目前还不适合替代专业工具。

适合谁试试

如果你喜欢城市地图、旅行纪念、桌面壁纸、打印海报,或者只是想看看一座城市的路网长什么样,可以试试这个工具。

如果你对 OpenStreetMap、浏览器端数据处理、Rust/WASM 渲染感兴趣,也可以看一下源码,项目是 MIT 开源的。

  • 在线体验:https://maptoposter.0v0.one
  • GitHub:https://github.com/ianho7/maptoposter-online

也欢迎反馈几个具体问题:

  • 是否有导出主题的需求?(其实我定义了一套 prompt 让 AI 根据我喜欢的图片生成配色,但感觉解释成本以及定义不是特别清晰明确,所以线上版本隐藏了)
  • 更多,等您评论 :-D
2
2