# maposter **Repository Path**: PineHunter/maposter ## Basic Information - **Project Name**: maposter - **Description**: 为世界上任何城市生成精美的极简风格地图海报。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: https://justlogo.ai - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-22 - **Last Updated**: 2026-01-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Maposter - 城市地图海报生成器 为世界上任何城市生成精美的极简风格地图海报。 中文文档 | [English](README.md)

纽约 - 黑白极简

孟买 - 高对比度

东京 - 日式水墨

北京 - 复古米色
--- ## 🚀 部署方式 ### 方式一:Web 应用(推荐) 适合需要图形界面的用户,支持在线生成海报。 #### 系统要求 - **Docker**: 已安装 Docker 和 Docker Compose - **内存**: 至少 4GB 可用(推荐 8GB+) - **磁盘**: 至少 20GB 可用空间 - **操作系统**: 任何支持 Docker 的系统(Linux、macOS、Windows) #### 快速部署 **方式 1:使用预构建镜像(最快)** ```bash # 1. 克隆项目 git clone https://github.com/mossepoch/maposter.git cd maposter # 2. 拉取预构建镜像并启动服务 cd web docker-compose pull docker-compose up -d ``` **方式 2:从源码构建** ```bash # 1. 克隆项目 git clone https://github.com/mossepoch/maposter.git cd maposter # 2. 一键部署 chmod +x deploy.sh ./deploy.sh ``` 部署脚本会自动: - ✅ 检查 Docker 环境和系统资源 - ✅ 创建配置文件 `web/.env` - ✅ 构建 Docker 镜像(后端 + 前端,约 10-15 分钟) - ✅ 启动所有服务(Nginx + Frontend + Backend) - ✅ 执行健康检查 #### 访问应用 部署成功后,浏览器访问: ``` http://你的服务器IP ``` 或者如果是本地部署: ``` http://localhost ``` #### 配置管理密码 编辑 `web/.env` 文件: ```bash ADMIN_PASSWORD=your_secure_password_here ``` 然后重启服务: ```bash cd web docker-compose restart ``` #### 常用管理命令 ```bash cd web # 查看服务状态 docker-compose ps # 查看实时日志 docker-compose logs -f # 查看特定服务日志 docker-compose logs -f backend docker-compose logs -f frontend docker-compose logs -f nginx # 重启所有服务 docker-compose restart # 重启特定服务 docker-compose restart backend # 停止所有服务 docker-compose down # 更新代码后重新部署 git pull docker-compose build docker-compose up -d ``` --- ### 方式二:命令行工具 适合开发者和需要批量生成的场景。 #### 安装依赖 **方法 1: 使用 pip(简单)** ```bash pip install -r requirements.txt ``` **方法 2: 使用 Conda(推荐,避免依赖冲突)** ```bash # 创建虚拟环境 conda create -n maposter python=3.11 # 激活环境 conda activate maposter # 安装依赖 conda install numpy=1.26 geopandas osmnx pandas numexpr bottleneck pip install -r requirements.txt ``` #### 基本用法 ```bash python create_map_poster.py --city <城市名> --country <国家名> [选项] ``` --- ## 📖 命令行参数详解 ### 必需参数 | 参数 | 简写 | 说明 | 示例 | |------|------|------|------| | `--city` | `-c` | 城市名称 | `-c "Tokyo"` | | `--country` | `-C` | 国家名称 | `-C "Japan"` | ### 可选参数 | 参数 | 简写 | 说明 | 默认值 | 可选值/示例 | |------|------|------|--------|------------| | `--theme` | `-t` | 主题名称或 `all` | `feature_based` | 见下方主题列表 | | `--distance` | `-d` | 地图半径(米) | `29000` | `4000-30000` | | `--network-type` | | 道路网络类型 | `drive` | `drive`, `all`, `walk`, `bike` | | `--thumbnail` | | 生成缩略图 | 不生成 | 添加此参数生成 | | `--list-themes` | | 列出所有主题 | - | 无需其他参数 | ### 参数说明 #### 1. `--city` / `-c` (必需) 城市名称,使用英文或当地官方拼写。 ```bash # 正确示例 -c "New York" -c "Tokyo" -c "São Paulo" # 多词城市名需要加引号 -c "San Francisco" # ✓ 正确 -c San Francisco # ✗ 错误 ``` #### 2. `--country` / `-C` (必需) 国家名称,使用英文。 ```bash -C "USA" -C "Japan" -C "United Kingdom" ``` #### 3. `--theme` / `-t` (可选) 主题名称,控制配色方案。默认为 `feature_based`。 **单个主题:** ```bash -t noir # 黑白极简风格 -t neon_cyberpunk # 霓虹赛博朋克 -t japanese_ink # 日式水墨风格 ``` **生成所有主题:** ```bash -t all # 自动生成 17 个主题的海报 ``` **可用主题列表:** (详见下方主题章节) #### 4. `--distance` / `-d` (可选) 地图半径,单位:米。控制地图覆盖范围。 **推荐距离:** | 距离范围 | 适用场景 | 示例 | |---------|---------|------| | 4000-6000m | 小型城市、密集老城区 | 威尼斯、阿姆斯特丹中心 | | 8000-12000m | 中型城市、聚焦市中心 | 巴黎、巴塞罗那、旧金山 | | 15000-20000m | 大型都市、完整城市视图 | 东京、孟买、纽约 | | 25000-30000m | 超大城市、含郊区 | 洛杉矶、北京、上海 | ```bash # 小城市 -d 5000 # 中型城市 -d 10000 # 大都市 -d 20000 ``` #### 5. `--network-type` (可选) 道路网络类型,决定显示哪些道路。 | 值 | 包含道路 | 适用场景 | |----|---------|---------| | `drive` | 车行道路(高速、主干道等) | 默认选项,适合大多数城市 | | `all` | 所有道路(含步行道、小路) | 显示更多细节,适合密集城区 | | `walk` | 步行道路 | 展示步行友好型城市 | | `bike` | 自行车道 | 展示自行车路网 | ```bash # 只显示车行道(默认) --network-type drive # 显示所有道路(包括小巷) --network-type all # 只显示步行道 --network-type walk # 只显示自行车道 --network-type bike ``` #### 6. `--thumbnail` (可选) 生成缩略图(约 1080px),用于预览或网页展示。 ```bash # 同时生成高清海报和缩略图 --thumbnail # 不生成缩略图(默认) # 不添加此参数即可 ``` #### 7. `--list-themes` (可选) 列出所有可用主题,无需指定城市和国家。 ```bash python create_map_poster.py --list-themes ``` --- ## 📝 使用示例 ### 基础示例 ```bash # 1. 最简单的用法(使用默认主题和距离) python create_map_poster.py -c "Paris" -C "France" # 2. 指定主题 python create_map_poster.py -c "Tokyo" -C "Japan" -t japanese_ink # 3. 指定距离 python create_map_poster.py -c "Venice" -C "Italy" -d 5000 # 4. 组合使用 python create_map_poster.py -c "New York" -C "USA" -t noir -d 12000 ``` ### 按城市类型 **网格型城市(规整街道)** ```bash # 纽约曼哈顿 - 经典网格 python create_map_poster.py -c "New York" -C "USA" -t noir -d 12000 # 巴塞罗那 - 方形街区 python create_map_poster.py -c "Barcelona" -C "Spain" -t warm_beige -d 8000 # 芝加哥 - 整齐网格 python create_map_poster.py -c "Chicago" -C "USA" -t contrast_zones -d 15000 ``` **水域城市(运河、海岸)** ```bash # 威尼斯 - 运河网络 python create_map_poster.py -c "Venice" -C "Italy" -t blueprint -d 4000 # 阿姆斯特丹 - 同心圆运河 python create_map_poster.py -c "Amsterdam" -C "Netherlands" -t ocean -d 6000 # 迪拜 - 棕榈岛和海岸线 python create_map_poster.py -c "Dubai" -C "UAE" -t midnight_blue -d 15000 # 旧金山 - 半岛海岸 python create_map_poster.py -c "San Francisco" -C "USA" -t sunset -d 10000 ``` **放射型城市(环路结构)** ```bash # 巴黎 - 奥斯曼大道 python create_map_poster.py -c "Paris" -C "France" -t pastel_dream -d 10000 # 莫斯科 - 环路系统 python create_map_poster.py -c "Moscow" -C "Russia" -t noir -d 12000 ``` **有机型城市(不规则街道)** ```bash # 东京 - 密集有机街道 python create_map_poster.py -c "Tokyo" -C "Japan" -t japanese_ink -d 15000 # 马拉喀什 - 老城迷宫 python create_map_poster.py -c "Marrakech" -C "Morocco" -t terracotta -d 5000 # 罗马 - 古老街道 python create_map_poster.py -c "Rome" -C "Italy" -t warm_beige -d 8000 ``` **河流城市** ```bash # 伦敦 - 泰晤士河 python create_map_poster.py -c "London" -C "UK" -t noir -d 15000 # 布达佩斯 - 多瑙河 python create_map_poster.py -c "Budapest" -C "Hungary" -t copper_patina -d 8000 ``` ### 高级用法 ```bash # 1. 生成所有主题(17 张海报) python create_map_poster.py -c "Paris" -C "France" -t all -d 10000 # 2. 包含所有道路(步行道、小巷) python create_map_poster.py -c "Suzhou" -C "China" -t sunset -d 10000 --network-type all # 3. 生成海报 + 缩略图 python create_map_poster.py -c "Singapore" -C "Singapore" -t neon_cyberpunk -d 8000 --thumbnail # 4. 完整参数示例 python create_map_poster.py \ --city "Barcelona" \ --country "Spain" \ --theme warm_beige \ --distance 8000 \ --network-type drive \ --thumbnail ``` ### 批量生成 ```bash # 为同一个城市生成多个主题 cities=("noir" "midnight_blue" "sunset" "ocean") for theme in "${cities[@]}"; do python create_map_poster.py -c "Tokyo" -C "Japan" -t $theme -d 15000 done # 或直接使用 all python create_map_poster.py -c "Tokyo" -C "Japan" -t all -d 15000 ``` --- ## 🎨 主题列表 17 个内置主题,每个都有独特的风格: | 主题名 | 风格描述 | 适合城市 | |--------|---------|---------| | `feature_based` | 经典黑白,道路层级分明 | 通用 | | `gradient_roads` | 平滑渐变阴影 | 通用 | | `contrast_zones` | 高对比度城市密度 | 大都市 | | `noir` | 纯黑背景,白色道路 | 网格城市 | | `midnight_blue` | 海军蓝背景,金色道路 | 海滨城市 | | `blueprint` | 建筑蓝图美学 | 工业、现代城市 | | `neon_cyberpunk` | 暗色背景,电子粉/青色 | 现代都市 | | `warm_beige` | 复古米色调 | 欧洲古城 | | `pastel_dream` | 柔和粉彩 | 浪漫城市 | | `japanese_ink` | 极简水墨风格 | 亚洲城市 | | `forest` | 深绿和鼠尾草色 | 花园城市 | | `ocean` | 蓝色和青色 | 海滨城市 | | `terracotta` | 地中海暖色 | 南欧、北非 | | `sunset` | 暖橙和粉红 | 沙漠、海滨城市 | | `autumn` | 秋季橙红色 | 秋色城市 | | `copper_patina` | 氧化铜质感 | 历史名城 | | `monochrome_blue` | 单一蓝色系 | 水城 | ### 查看所有主题 ```bash python create_map_poster.py --list-themes ``` ### 自定义主题 在 `themes/` 目录创建 JSON 文件: ```json { "name": "My Custom Theme", "description": "自定义主题说明", "bg": "#FFFFFF", "text": "#000000", "gradient_color": "#FFFFFF", "water": "#C0C0C0", "parks": "#F0F0F0", "road_motorway": "#0A0A0A", "road_primary": "#1A1A1A", "road_secondary": "#2A2A2A", "road_tertiary": "#3A3A3A", "road_residential": "#4A4A4A", "road_default": "#3A3A3A" } ``` 保存为 `themes/my_theme.json`,然后: ```bash python create_map_poster.py -c "Tokyo" -C "Japan" -t my_theme ``` --- ## 📁 输出文件 ### 文件结构 每次运行会在 `posters/` 目录下创建一个文件夹: ``` posters/ └── tokyo_20260122_143022/ # 格式:城市_时间戳 ├── japanese_ink_20260122_143022.png # 高清海报 (300 DPI) ├── noir_20260122_143025.png ├── ... └── thumbnails/ # 缩略图目录(如果使用 --thumbnail) ├── japanese_ink_20260122_143022.png # ~1080px ├── noir_20260122_143025.png └── collages/ # 拼贴图(自动生成) ├── collage_1.png # 前 9 个主题 3x3 网格 └── collage_2.png # 后 9 个主题 3x3 网格 ``` ### 文件说明 - **高清海报**: 300 DPI,适合打印 - **缩略图**: ~1080px,适合网页展示和预览 - **拼贴图**: 自动生成的 3×3 网格,最多展示 18 个主题 --- --- ## 🤝 贡献 欢迎贡献!您可以: - 🐛 报告 Bug - 💡 建议新功能 - 🎨 提交新主题 - 📖 改进文档 - 🔧 提交代码 --- ## 📄 许可证 MIT License --- ## 🙏 致谢 ### 原作者 本项目基于 [originalankur/maptoposter](https://github.com/originalankur/maptoposter) 的优秀工作开发。 感谢 originalankur 创建了这个出色的地图海报生成工具! ### 本项目增强 在原项目基础上,本项目添加了: - ✨ Web 应用界面(Next.js + FastAPI) - 🐳 Docker 容器化部署 - 🚀 一键部署脚本 - 🔒 Nginx 反向代理和 HTTPS 支持 - 📚 完善的文档 ### 技术栈 - [OSMnx](https://github.com/gboeing/osmnx) - OpenStreetMap 数据获取 - [Matplotlib](https://matplotlib.org/) - 地图渲染 - [GeoPandas](https://geopandas.org/) - 地理空间数据处理 - [FastAPI](https://fastapi.tiangolo.com/) - 后端 API 框架 - [Next.js](https://nextjs.org/) - 前端框架 - [Nginx](https://nginx.org/) - Web 服务器和反向代理 - [Docker](https://www.docker.com/) - 容器化部署 --- **如果觉得有用,请给个 Star ⭐**