- 전 세계 도시 지도를 미니멀한 예술 포스터로 생성할 수 있는 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는 코드 기반 도시 지도 예술화 도구로, 데이터 시각화와 디자인을 결합한 오픈소스 프로젝트
- 개발자, 디자이너, 데이터 시각화 전문가가 도시 구조를 예술적 형태로 탐구할 수 있는 유용한 툴