9 ポイント 投稿者 GN⁺ 2026-01-19 | 3件のコメント | WhatsAppで共有
  • 世界中の都市地図をミニマルなアートポスターとして生成できる Python ベースのオープンソースツール
  • OpenStreetMap(OSMnx) のデータを活用して、道路、水域、公園などの地形要素を可視化し、matplotlib でレンダリング
  • 17種類のテーマスタイル(例: neon_cyberpunk, blueprint, japanese_ink など)を提供し、JSON ファイルでカスタムテーマを追加可能
  • コマンドラインで都市名、国名、半径、テーマを指定してポスターを自動生成・保存
  • デザインとデータ可視化の融合により、開発者やデザイナーが都市構造を芸術的に探索できるツール

プロジェクト概要

  • MapToPoster は、ユーザーが指定した都市の地図をもとにミニマルデザインのポスターを生成する Python スクリプト
    • 生成されたポスターは posters/ ディレクトリに自動保存
    • MIT ライセンスで公開されており、自由に修正・配布可能
  • リポジトリは約2.7k Star164 Forkを保有

主な機能

  • コマンドラインインターフェース(CLI)から都市名(--city)、国名(--country)、テーマ(--theme)、距離(--distance)を入力してポスターを生成
  • --list-themes オプションで利用可能なすべてのテーマ一覧を確認可能
  • 距離(distance)の値に応じて、都市規模ごとの適切な半径を設定
    • 4,000–6,000m: 小規模都市
    • 8,000–12,000m: 中規模都市
    • 15,000–20,000m: 大都市

テーマ構成

  • themes/ ディレクトリに 17 個のテーマ JSON ファイルを同梱
    • 例: noir, blueprint, neon_cyberpunk, warm_beige, forest, terracotta など
  • 各テーマは背景色、道路色、水面、公園などの色属性を定義
  • ユーザーは JSON 形式で新しいテーマを直接追加可能
    • 例: "bg": "#FFFFFF", "road_primary": "#1A1A1A" など

使用例

  • さまざまな都市とテーマの組み合わせでポスターを生成可能
    • python create_map_poster.py -c "Tokyo" -C "Japan" -t japanese_ink -d 15000
    • python create_map_poster.py -c "Barcelona" -C "Spain" -t warm_beige -d 8000
    • python create_map_poster.py -c "Dubai" -C "UAE" -t midnight_blue -d 15000
  • サンプルポスターには San FranciscoVeniceMarrakechSingapore などの都市が含まれる

内部構造とアーキテクチャ

  • 主な構成要素は CLI ParserGeocoding(Nominatim)Data Fetching(OSMnx)Rendering(matplotlib)
  • レンダリング順序(z-order)は 背景 → 水面 → 公園 → 道路 → グラデーション → テキスト
  • 主な関数
    • get_coordinates(): 都市名から緯度・経度を取得
    • create_poster(): 全体のレンダリングパイプライン
    • get_edge_colors_by_type(): 道路タイプ別に色を指定
    • get_edge_widths_by_type(): 道路の重要度別に太さを設定
    • load_theme(): JSON テーマを読み込み

拡張とカスタマイズ

  • 新しい地図レイヤー(例: 鉄道)を追加するには、create_poster() 内で OSMnx データを読み込んでレンダリング可能
  • 新しいテーマ属性を追加する場合は、JSON とコード(load_theme())の両方に定義が必要
  • 文字配置ルール
    • 都市名: y=0.14
    • 国名: y=0.10
    • 座標: y=0.07
    • 出典表記: y=0.02

パフォーマンス最適化のヒント

  • dist の値が 20km 以上だと、ダウンロード速度の低下とメモリ使用量の増加が起こる
  • 座標キャッシュで Nominatim のリクエスト制限を回避
  • network_type='drive' を設定するとレンダリング速度が向上
  • 高速プレビュー用に dpi を 150 まで下げられる

技術スタックとライセンス

  • Python 100% で記述
  • 主なライブラリ: OSMnxmatplotlibargparse
  • MIT License で配布され、商用利用および改変が可能

要約

  • MapToPoster は、コードベースの都市地図アート化ツールとして、データ可視化とデザインを組み合わせたオープンソースプロジェクト
  • 開発者、デザイナー、データ可視化の専門家が、都市構造を芸術的な形で探求できる便利なツール

3件のコメント

 
xguru 2026-01-20

ソウル/釜山のものを試しに作ってみたところ、なかなか良かったので Twitter の GeekNews アカウントに添付しておきました。
ソウル : https://x.com/GeekNewsHada/status/2013410000031395905
釜山 : https://x.com/GeekNewsHada/status/2013412083749265695

 
kunggom 2026-01-20

Hacker News 側の意見で言及されていた city-roads も、以前ここに掲載されたことがありました。

 
GN⁺ 2026-01-19
Hacker News のコメント
  • 何度か使ったことのある関連プロジェクトがある
    city-roads (GitHub) で、SVG 出力をサポートしており、オンラインでもすぐ試せる
    作者の Anvaka は、他にも素晴らしい データ可視化プロジェクトをたくさん作っている
  • 本当に素敵なプロジェクト
    ただ、距離パラメータの調整が少し難しい
    改善案としては、都市名の代わりに 座標入力を受け付けて特定の地点を中心に設定できるようにすること、そして複数のスタイルを一度に出力して見た目で選べるようにする機能がある
    いずれにせよ素晴らしい仕事
  • サンフランシスコの画像は見事だが、一部のサンプルでは 投影法に問題があるように見える
    UTM ではなく全球的な球面投影のように見えるので、ローカルなレンダリングには適していない
    README に projection への言及がないのが少し気になる
    • これは面白くて芸術的なポスターを作る アートプロジェクトなので、投影法は重要ではない
      しかもオープンソースなのだから、地図作成の経験を生かして pull request で改善案を提案してみるとよさそう
    • 最終画像には ビネット効果が入っていて、端が自然に消えていくような印象
      おそらく OSM タイルを取り込んで画像後処理をしたのだと思う
      仕上がりはかなり良い
  • コードを少し見たが、matplotlib のおかげで少し手を入れれば SVG 出力ができそう
    もし PNG をデフォルトにしている特別な理由があるのか気になる
    • いい指摘。plt.savefig(output_file, format='svg', facecolor=THEME['bg']) で解決できる
      --format パラメータを追加して反映する予定
    • 大都市を PDF/SVG に書き出してみると、速度が非常に遅い
      人口 50 万の都市 1 つでもとてつもなく時間がかかる
  • こうした画像を実際に ポスターとして印刷するなら、どんな方法がよいのか気になる
    • ニュージャージーの El-co Color が 20x30 インチのポスターを安価に印刷してくれる
      El-co Color Poster Special
    • 以前、こうした地図を 3D プリントの立体地図にして額装してくれるサービスもあった
    • 私は Vistaprint を使っている。いろいろ比較したわけではないが、価格と品質は悪くない
    • 自分でやってみたいなら Rasterbator.net で複数枚を貼り合わせる DIY ポスターが作れる
      ただし、かなり手間はかかる
    • アメリカでは Staples の印刷品質はかなり良かった
  • このリポジトリは本当に素晴らしい
    README は OSS の模範事例といえるし、成果物も驚くほど美しい
  • prettymapp もあわせて見てみるとよい
  • 同じ名前の都市が複数ある場合はどうなるのか気になる
    たとえば Salem (OR/MA)、Portland (OR/ME)、Springfield (IL/MO)、Dallas (TX/GA) のようなケース
    • 単に "Salem" とだけ入力すると、適当な都市が選ばれる
      "Salem, Oregon" や "Salem, MA" のように入力すれば望みどおりの結果が得られ、入力したテキストが キャプションとして使われる
    • アメリカには Paris、London、Athens のような 世界の都市名にちなんだ都市も多い
    • それは考えていなかった。たぶん 国まで入力できる機能を追加する必要がありそう
  • このプロジェクトは グラフベースのアプローチなのか、それとも一般的な画像生成なのか気になる
    Picxstudio でも似たような結果を見たことがあるが、あちらは AI 画像生成プラットフォーム
  • シドニーの道路地図を ジグソーパズルにして、遊びながら道路の構造を覚えたいと思っていた
    そうすればナビアプリへの依存を減らして、昔ながらのドライバーになれそう
    • シドニーで Where 2 が Google Maps へと発展したのには理由がある
      一方通行の道路が非常に多く、港湾やトンネルの構造も複雑なので、シドニーの道を覚えるのは一生の課題だ