Metadata-Version: 2.4
Name: cityposter
Version: 0.2.5
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.1
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` 全部 / `--poi subway,sightseeing` 指定类别 | |

### `--poi` 详情

不加值显示全部，指定类别则只显示选中项：

```bash
cityposter ... --poi                    # 全部
cityposter ... --poi subway             # 只看地铁
cityposter ... --poi subway,sightseeing,park  # 地铁+景点+公园
```

简写对照：

| 简写 | 全称 | 中文 |
|------|------|------|
| `subway` | `subway_station` | 地铁站 |
| `train` | `train_station` | 火车站 |
| `bus` | `bus_station` | 公交站 |
| `airport` | `airport` | 机场 |
| `sightseeing` | `sightseeing_spot` | 景点 |
| `landmark` | `landmark` | 地标 |
| `museum` | `museum` | 博物馆 |
| `temple` | `temple` | 寺庙 |
| `park` | `park` | 公园 |
| `mall` | `mall` | 商场 |
| `food` | `restaurant` | 餐饮 |
| `hotel` | `accommodation` | 住宿 |
| `school` | `school` | 学校 |
| `hospital` | `hospital` | 医院 |

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

### 自定义 POI (`--custom-poi`)

两处数据源，个人目录优先：

| 目录 | 用途 |
|------|------|
| `~/.config/cityposter/custom-poi/` | 个人专属，升级不丢 |
| `config/custom-poi/` | 项目通用，随代码分发 |

GeoJSON 格式（支持 `.json` / `.geojson`）：

```json
{
  "type": "FeatureCollection",
  "coord_type": "gcj02",
  "features": [
    {
      "type": "Feature",
      "properties": {"name": "故宫", "category": "景点"},
      "geometry": {"type": "Point", "coordinates": [116.3972, 39.9163]}
    }
  ]
}
```

- `coord_type`: `"gcj02"` 高德坐标自动转 WGS-84，默认 `"wgs84"`
- `category`: 支持中文（`"景点"`）、英文（`"Sightseeing"`）、key（`"sightseeing_spot"`）
- 文件名含城市名 = 城市专属优先加载；不含 = 通用兜底
- `_` 或 `.` 前缀文件忽略（禁用/备份）

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

### 全国地图 (country 主题)

`themes/country/` 目录包含全国/大区域主题，只加载铁路+省界数据，支持大半径：

```bash
# 全国高铁+省界图（3500km，西安中心）
cityposter --lat 34.26 --lon 108.94 -dc 中国 \
  -t atlas_outline -W 16 -H 9 -d 3500000

# SVG 矢量输出（无限缩放）
cityposter ... -f svg
```

| 主题 | 说明 |
|------|------|
| `atlas_outline` | 高铁 + 省界，纯轮廓图 |
| `atlas_highway` | 高速路网（motorway+primary） |
| `atlas_railway` | 全部铁路 + 高速骨架 |
| `atlas_highspeed` | 仅高铁 + 高速骨架 |
| `atlas_transport` | 综合交通（高速+主干+铁路） |

输出会自动附带 `_legend.yaml`（颜色图例）和 `_boundaries.geojson` / `_highspeed.geojson`（图层文件）。

### 所有主题 (46)

| 主题 | 名称 | 风格 |
|------|------|------|
| `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.
