地図からポスターへ – お気に入りの都市のアートを作成する
91日前原文(github.com)
概要
このツールは世界中の都市地図ポスターをミニマルで美しいデザインで自動生成するPythonスクリプト。
テーマ選択や範囲調整が可能で、都市ごとに異なるスタイルを楽しめる。
カスタムテーマ追加や新機能拡張も柔軟に対応。
出力ポスターはPNG形式で保存され、すぐに印刷や共有が可能。
開発者向けガイドも充実し、機能追加やカスタマイズが容易。
City Map Poster Generator 概要
- 任意の都市名・国名を指定して地図ポスター自動生成
- テーマ選択による多様なビジュアル表現
- 範囲(半径)指定で詳細度や表示範囲を調整
- 出力ファイルはPNG形式でposters/ディレクトリに自動保存
- pipで依存パッケージ一括インストール(requirements.txt)
インストール手順
- 必要パッケージのインストール
pip install -r requirements.txtコマンド利用
基本的な使い方
- コマンドラインから実行
python create_map_poster.py --city <都市名> --country <国名> [オプション]
- 主なオプション
--city/-c: 都市名(必須)--country/-C: 国名(必須)--theme/-t: テーマ名(例: noir, sunset など)--distance/-d: 半径(メートル単位、例: 12000)--list-themes: 利用可能なテーマ一覧表示
使用例
- グリッド都市
python create_map_poster.py -c "New York" -C "USA" -t noir -d 12000
- 運河都市
python create_map_poster.py -c "Venice" -C "Italy" -t blueprint -d 4000
- 湾岸都市
python create_map_poster.py -c "San Francisco" -C "USA" -t sunset -d 10000
- 有機的な旧市街
python create_map_poster.py -c "Marrakech" -C "Morocco" -t terracotta -d 5000
距離ガイド
- 4000-6000m: 小規模/高密度都市向け(例: Venice, Amsterdam中心部)
- 8000-12000m: 中規模都市やダウンタウン中心
- 15000-20000m: 大都市全景(例: Tokyo, Mumbai)
テーマ一覧(themes/ ディレクトリ内)
- 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: 青系単色
カスタムテーマ追加方法
- themes/ ディレクトリにJSONファイルを作成
- 必須フィールド例:
{ "name": "My Theme", "description": "Description of the theme", "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" }
- 必須フィールド例:
プロジェクト構成
- map_poster/
create_map_poster.py: メインスクリプトthemes/: テーマJSONファイルfonts/: Robotoフォントposters/: 出力ポスターREADME.md: ドキュメント
開発者向けガイド
アーキテクチャ概要
- CLIパーサー(argparse)
- コマンドライン引数解析
- ジオコーディング(Nominatim)
- 都市名→緯度経度変換
- データ取得(OSMnx)
- OpenStreetMapデータ取得
- レンダリング・出力(matplotlib)
- 地図描画と画像出力
主要関数
- get_coordinates(): 都市名から緯度経度取得
- create_poster(): ポスター描画パイプライン
- get_edge_colors_by_type(): 道路種別ごとの色指定
- get_edge_widths_by_type(): 道路種別ごとの線幅指定
- create_gradient_fade(): 上下グラデーション効果
- load_theme(): JSONテーマ読込
レイヤー構成(z-order)
- z=11: テキストラベル(都市名、国名、座標)
- z=10: グラデーションフェード
- z=3: 道路
- z=2: 公園(緑ポリゴン)
- z=1: 水域(青ポリゴン)
- z=0: 背景色
OSM道路種別と階層
- motorway, motorway_link: 最太・最暗(1.2)
- trunk, primary: 太(1.0)
- secondary: 中(0.8)
- tertiary: 細(0.6)
- residential, living_street: 最細・最明(0.4)
新機能追加例
- **新レイヤー(鉄道等)**追加
- parks取得後にrailways取得・描画処理を追加
- テーマJSONにrailway色追加
- 新テーマプロパティ追加
- テーマJSON・load_theme()・描画コードに追記
タイポグラフィ・配置
- 全テキスト: transform=ax.transAxes(0-1正規化座標)
- y=0.14: 都市名(大文字・間隔広め)
- y=0.125: 飾り線
- y=0.10: 国名
- y=0.07: 座標
- y=0.02: クレジット(右下)
OSMnx便利パターン
- 全建物取得:
buildings = ox.features_from_point(point, tags={'building': True}, dist=dist) - 特定アメニティ取得:
cafes = ox.features_from_point(point, tags={'amenity': 'cafe'}, dist=dist) - ネットワーク種別切替
network_type='drive': 道路のみnetwork_type='bike': 自転車道network_type='walk': 歩行者道
パフォーマンスTips
- 20km超の範囲はダウンロード・描画が重くなる
- 座標キャッシュでNominatim制限回避
- **network_type='drive'**利用で高速化
- dpi300→150でプレビュー高速化
このツールは地図デザイン愛好家・都市研究者・デザイナーに最適な自動ポスター生成ソリューション。
カスタマイズ性・拡張性も高く、コードを追記するだけで新しい都市表現やテーマ追加が可能。
美しい都市地図ポスターを手軽に作成・印刷・共有できる実用的なPythonプロジェクト。