# MapToPoster - 도시 지도를 예술 포스터로 변환하기

> Clean Markdown view of GeekNews topic #25926. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=25926](https://news.hada.io/topic?id=25926)
- GeekNews Markdown: [https://news.hada.io/topic/25926.md](https://news.hada.io/topic/25926.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-01-19T00:38:47+09:00
- Updated: 2026-01-19T00:38:47+09:00
- Original source: [github.com/originalankur](https://github.com/originalankur/maptoposter)
- Points: 9
- Comments: 3

## Summary

도시의 구조를 예술적 시각으로 재해석하는 **MapToPoster**는 OpenStreetMap 데이터를 활용해 도로와 공원, 수면 등을 미니멀한 포스터로 렌더링합니다. Python 기반 CLI 도구로, 도시명과 반경, 테마를 지정하면 자동으로 포스터를 생성하며, 17가지 기본 테마 외에도 JSON으로 **사용자 정의 스타일**을 추가할 수 있습니다.   
  
댓글에 서울과 부산을 포스터로 만들어 두었으니 참고하세요.

## Topic Body

- 전 세계 **도시 지도를 미니멀한 예술 포스터**로 생성할 수 있는 Python 기반 오픈소스 도구  
- **OpenStreetMap(OSMnx)** 데이터를 활용해 도로, 수로, 공원 등의 지형 요소를 시각화하고, **matplotlib**으로 렌더링  
- 17가지 **테마 스타일**(예: neon_cyberpunk, blueprint, japanese_ink 등)을 제공하며, JSON 파일로 **사용자 정의 테마** 추가 가능  
- 명령줄에서 도시명과 국가명, 반경, 테마를 지정해 **자동으로 포스터 생성 및 저장**  
- **디자인과 데이터 시각화의 결합**을 통해 개발자와 디자이너가 도시 구조를 예술적으로 탐색할 수 있는 도구  

---
### 프로젝트 개요
- **MapToPoster**는 사용자가 지정한 도시의 지도를 기반으로 **미니멀한 디자인 포스터**를 생성하는 Python 스크립트  
  - 생성된 포스터는 `posters/` 디렉터리에 자동 저장  
  - MIT 라이선스로 공개되어 자유로운 수정 및 배포 가능  
- 저장소는 약 **2.7k개의 Star**와 **164개의 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 Francisco**, **Venice**, **Marrakech**, **Singapore** 등의 도시가 포함  

### 내부 구조 및 아키텍처
- 주요 구성 요소는 **CLI Parser**, **Geocoding(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%** 로 작성  
- 주요 라이브러리: **OSMnx**, **matplotlib**, **argparse**  
- **MIT License**로 배포, 상업적 사용 및 수정 가능  

### 요약
- MapToPoster는 **코드 기반 도시 지도 예술화 도구**로, 데이터 시각화와 디자인을 결합한 오픈소스 프로젝트  
- 개발자, 디자이너, 데이터 시각화 전문가가 **도시 구조를 예술적 형태로 탐구**할 수 있는 유용한 툴

## Comments



### Comment 49500

- Author: xguru
- Created: 2026-01-20T09:38:07+09:00
- Points: 2

서울/부산 쪽을 한번 만들어봤는데 괜찮아서 트위터 긱뉴스 계정에 첨부해두었습니다.  
서울 : https://x.com/GeekNewsHada/status/2013410000031395905  
부산 : https://x.com/GeekNewsHada/status/2013412083749265695

### Comment 49514

- Author: kunggom
- Created: 2026-01-20T10:35:22+09:00
- Points: 1

Hacker News 쪽 의견에 언급된 city-roads도 예전에 여기 올라온 적이 있었습니다.  
  
- [도시 도로: 한 번에 모든 도로를 그리는 City Roads 도구](https://news.hada.io/topic?id=18387)  
    - https://anvaka.github.io/city-roads/  
    - https://github.com/anvaka/city-roads

### Comment 49425

- Author: neo
- Created: 2026-01-19T00:38:47+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=46656834) 
- 여러 번 사용해본 관련 프로젝트가 있음  
  [city-roads (GitHub)](https://github.com/anvaka/city-roads)인데, **SVG 출력**을 지원하고 온라인에서도 바로 시도해볼 수 있음  
  제작자인 Anvaka는 다른 멋진 **데이터 시각화 프로젝트**들도 많이 만듦
- 정말 멋진 프로젝트임  
  다만 거리 파라미터를 조정하는 게 조금 까다로움  
  개선 아이디어로는 도시 이름 대신 **좌표 입력**을 받아 특정 지점을 중심으로 설정할 수 있게 하는 것, 그리고 여러 스타일을 한 번에 출력해 시각적으로 고를 수 있게 하는 기능이 있음  
  어쨌든 훌륭한 작업임
- 샌프란시스코 이미지는 멋지지만, 일부 샘플에서 **투영 방식**에 문제가 있어 보임  
  UTM이 아니라 전지구 구면 투영처럼 보여서 지역 렌더링에는 적합하지 않음  
  README에 projection 언급이 없는 게 조금 의심스러움
  - 이건 재미있고 예술적인 포스터를 만드는 **아트 프로젝트**라서 투영 방식이 중요하지 않음  
    오픈소스이기도 하니, 지도 제작 경험을 살려 **pull request**로 개선안을 제안해보면 좋을 듯함
  - 최종 이미지에 **비네팅 효과**가 들어가 모서리가 자연스럽게 사라지는 느낌임  
    아마 OSM 타일을 가져와 이미지 후처리를 한 듯 보임  
    결과물이 꽤 멋짐
- 코드를 잠깐 봤는데, matplotlib 덕분에 약간만 수정하면 **SVG 출력**이 가능할 것 같음  
  혹시 PNG를 기본값으로 둔 특별한 이유가 있는지 궁금함
  - 좋은 지적임. `plt.savefig(output_file, format='svg', facecolor=THEME['bg'])`로 해결 가능함  
    `--format` 파라미터를 추가해서 반영할 예정임
  - 큰 도시를 PDF/SVG로 내보내보니 **속도가 매우 느림**  
    인구 50만 도시 하나만 해도 엄청 오래 걸림
- 이런 이미지를 실제 **포스터로 인쇄**하려면 어떤 방법이 좋은지 궁금함
  - 뉴저지의 El-co Color가 20x30인치 포스터를 저렴하게 인쇄해줌  
    [El-co Color Poster Special](https://www.elcocolor.net/index.php/poster-special)
  - 예전에 이런 지도를 **3D 프린트로 입체 지도**로 만들어 액자에 넣어주는 서비스도 있었음
  - 나는 **Vistaprint**를 사용함. 비교를 많이 해본 건 아니지만 가격과 품질이 괜찮음
  - 직접 해보고 싶다면 [Rasterbator.net](https://rasterbator.net)으로 여러 장을 이어붙여 **DIY 포스터**를 만들 수 있음  
    다만 손이 좀 많이 감
  - 미국에서는 **Staples** 인쇄 품질이 꽤 좋았음
- 이 저장소는 정말 훌륭함  
  README는 **OSS의 모범 사례**로 삼을 만하고, 결과물도 놀라울 정도로 아름다움
- [prettymapp](https://prettymapp.streamlit.app/)도 함께 살펴보면 좋음
  - 그리고 [city-roads 웹 버전](https://anvaka.github.io/city-roads)도 있음
- 동일한 이름의 도시가 여러 곳에 있을 때는 어떻게 되는지 궁금함  
  예를 들어 Salem(OR/MA), Portland(OR/ME), Springfield(IL/MO), Dallas(TX/GA)처럼 말임
  - 그냥 "Salem"만 입력하면 임의의 도시를 선택함  
    "Salem, Oregon"이나 "Salem, MA"처럼 입력하면 원하는 결과를 얻을 수 있고, 입력한 텍스트가 **캡션**으로 사용됨
  - 미국에는 Paris, London, Athens 같은 **세계 도시 이름을 딴 도시**도 많음
  - 그건 생각도 못 했음. 아마 **국가까지 입력받는 기능**을 추가해야 할 듯함
- 혹시 이 프로젝트가 **그래프 기반 접근**인지, 아니면 일반적인 이미지 생성인지 궁금함  
  [Picxstudio](https://picxstudio.com)에서도 비슷한 결과를 본 적 있는데, 거긴 **AI 이미지 생성 플랫폼**임
- 시드니 도로 지도를 **직소 퍼즐**로 만들어서 놀면서 도로 구조를 익히고 싶었음  
  그렇게 하면 내비 앱 의존도를 줄이고 예전식 운전자가 될 수 있을 것 같음
  - 시드니에서 Where 2가 Google Maps로 발전한 이유가 있음  
    **일방통행 도로**가 너무 많고, 항만과 터널 구조가 복잡해서 시드니 길을 익히는 건 평생 과제임
