Metadata-Version: 2.4
Name: cityposter
Version: 0.1.0
Summary: Generate beautiful, minimalist map posters for any city — now with offline SinoGDB support for Chinese cities.
Author-email: Ankur Gupta <originalankur@github.com>
License: MIT
Keywords: map,poster,osm,openstreetmap,art,visualization,china,sinogdb
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: aiohttp>=3.14.1
Requires-Dist: certifi==2026.1.4
Requires-Dist: charset-normalizer==3.4.4
Requires-Dist: contourpy==1.3.3
Requires-Dist: cycler==0.12.1
Requires-Dist: fonttools==4.61.1
Requires-Dist: geocode-amap>=0.1.0
Requires-Dist: geographiclib==2.1
Requires-Dist: geopandas==1.1.2
Requires-Dist: geopy==2.4.1
Requires-Dist: idna==3.11
Requires-Dist: kiwisolver==1.4.9
Requires-Dist: lat-lon-parser==1.3.1
Requires-Dist: matplotlib==3.10.8
Requires-Dist: networkx==3.6.1
Requires-Dist: numpy==2.4.0
Requires-Dist: osmnx==2.0.7
Requires-Dist: packaging==25.0
Requires-Dist: pandas==2.3.3
Requires-Dist: pillow==12.1.0
Requires-Dist: pyogrio==0.12.1
Requires-Dist: pyparsing==3.3.1
Requires-Dist: pyproj==3.7.2
Requires-Dist: python-dateutil==2.9.0.post0
Requires-Dist: pytz==2025.2
Requires-Dist: requests==2.32.5
Requires-Dist: scipy==1.16.3
Requires-Dist: shapely==2.1.2
Requires-Dist: six==1.17.0
Requires-Dist: tqdm==4.67.1
Requires-Dist: tzdata==2025.3
Requires-Dist: urllib3==2.6.3
Dynamic: license-file

# CityPoster — 城市地图海报生成器

基于 [maptoposter](https://github.com/originalankur/maptoposter) 改造，专注中国城市离线地图海报。

## 安装

```bash
git clone https://github.com/songwupei/cityposter.git
cd cityposter
uv sync
```

### SinoGDB 数据 (中国城市离线生成)

下载 [SinoGDB-PackSet](https://docs.qq.com/smartsheet/DSHBNQ1FUTEZJek9q)，设置路径：

```bash
export SINOGDB_DIR="$HOME/Downloads/SinoGDB-PackSet_gpkg_20260208"
```

## 使用

```bash
# 中国城市 — 完全离线，秒级出图
cityposter --lat 39.9042 --lon 116.4074 -dc "北京" -dC "中国" -t noir --poi
cityposter --lat 30.5728 --lon 104.0668 -dc "成都" -dC "中国" -t gongqiang --poi

# 国际城市 — 走 OSMnx
cityposter -c "Paris" -C "France" -t pastel_dream -d 10000
```

### 参数

| 参数 | 说明 | 默认 |
|------|------|------|
| `--lat`, `--lon` | 中心坐标 (WGS-84) | |
| `--gcj02` | 坐标视为 GCJ-02 | |
| `-dc`, `-dC` | 显示名称 | |
| `-t` | 主题 | terracotta |
| `-d` | 半径 (米) | 8000(中国) |
| `--poi` | POI 标注 | 关闭 |
| | 开启后显示：地铁站、火车站、景点、学校、医院等 | |

### `--poi` 详情

开启后从 SinoGDB 拉取以下数据并标注（最多 50 个标记、15 个标签）：

| 数据源 | 类型 | 标记 |
|--------|------|------|
| `railway_point` | 地铁站 | ○ 空心圆环 + 站名 |
| | 火车站 | ■ 方块 |
| `transport_point` | 公交站/机场/港口 | ●/◆ 按类型 |
| `natural_point` | 山峰/洞穴/温泉 | ▲/★ |
| `landuse` (学校/医院/寺庙) | 学校/医院/寺庙 | ●/■/▲ |

不加 `--poi` 则不显示任何标注，纯地图。

### 自定义 POI

在 `config/custom-poi/` 放置 JSON 文件，`--poi` 时自动加载：

```json
[
  {"name": "故宫", "lat": 39.9163, "lon": 116.3972, "category": "landmark"},
  {"name": "天安门", "lat": 39.9087, "lon": 116.3975, "category": "sightseeing_spot"}
]
```

支持 category: `landmark`, `sightseeing_spot`, `museum`, `park`, `temple`, `school`, `cafe`, `mall` 等。

| `-W`, `-H` | 画布 (英寸) | 12x16 |
| `-f` | png/svg | png |
| `--font-family` | Google Fonts | Noto Sans SC(中国) |

### 所有主题 (41)

| 主题 | 名称 | 风格 |
|------|------|------|
| `autumn` | Autumn | 秋日橙红 |
| `blueprint` | Blueprint | 建筑蓝图 |
| `brutalist_concrete` | Brutalist Concrete | 粗野主义 |
| `carbon_fiber` | Carbon Fiber | 碳纤维黑 |
| `contrast_zones` | Contrast Zones | 高对比度 |
| `copper_patina` | Copper Patina | 铜绿氧化 |
| `cotton_candy` | Cotton Candy | 棉花糖粉紫 |
| `cyberpunk_neon` | Cyberpunk Neon | 赛博朋克 |
| `desert_rose` | Desert Rose | 沙漠玫瑰 |
| `emerald` | Emerald City | 翡翠绿 |
| `forest` | Forest | 森林绿 |
| `forest_moss` | Forest Moss | 苔藓绿金 |
| `gilded_noir` | Gilded Noir | 黑金奢华 |
| `glitch_purple` | Glitch Purple | 故障紫绿 |
| `gongqiang` | 宫墙 Gongqiang | 红底鎏金 |
| `gradient_roads` | Gradient Roads | 渐变道路 |
| `japanese_ink` | Japanese Ink | 日式水墨 |
| `lavender_mist` | Lavender Mist | 薰衣草雾 |
| `matcha_latte` | Matcha Latte | 抹茶拿铁 |
| `mediterranean_summer` | Mediterranean Summer | 地中海蓝橙 |
| `mediterranean_summer_plus` | Mediterranean Summer + Rail | 地中海+铁路 |
| `midnight_blue` | Midnight Blue | 午夜蓝金 |
| `monochrome_blue` | Monochrome Blue | 单色蓝 |
| `neon_cyberpunk` | Neon Cyberpunk | 霓虹赛博朋克 |
| `noir` | Noir | 纯黑白 |
| `nordic_frost` | Nordic Frost | 北欧冰霜 |
| `ocean` | Ocean | 海洋蓝 |
| `ocean_abyss` | Ocean Abyss | 深海深渊 |
| `pastel_dream` | Pastel Dream | 梦幻粉彩 |
| `qingzhuan` | 青砖 Qingzhuan | 胡同灰砖 |
| `red_alert` | Red Alert | 红色警报 |
| `royal_velvet` | Royal Velvet | 皇家天鹅绒 |
| `sakura_branch` | Sakura Branch | 樱花粉 |
| `shuimo` | 水墨 Shuimo | 水墨白底 |
| `solarized_dark` | Solarized Dark | Solarized 暗色 |
| `sulfur_slate` | Sulfur & Slate | 硫磺金灰 |
| `sunset` | Sunset | 落日橙粉 |
| `terra_clay` | Terra Clay | 陶土暖色 |
| `terracotta` | Terracotta | 地中海陶 |
| `vintage_nautical` | Vintage Nautical | 复古航海 |
| `warm_beige` | Warm Beige | 暖米色 |

## Credit

Forked from [maptoposter](https://github.com/originalankur/maptoposter) by Ankur Gupta. MIT License.

SinoGDB data derived from OpenStreetMap, processed by QGIS.
