4 - 네이버 Static Map API로 지도 이미지 만들기 – 여러 장소를 한눈에 시각화
장소 데이터를 수집했다면, 이제 이를 실제 지도 위에 시각화하는 단계가 남았습니다. 이번 포스팅에서는 네이버 Static Map API를 활용해 여러 장소를 한 번에 지도 이미지에 마커로 표시하는 방법, 다양한 파라미터와 마커 옵션의 실무적 응용, 한계와 극복 노하우까지 체계적으로 안내합니다. 특히 파이썬 자동화 코드와 다양한 실전 활용 시나리오를 중심으로 실무와 개인 개발 모두에 바로 적용할 수 있도록 구성했습니다.
Static Map API란 무엇인가?
네이버 Static Map API는 복잡한 웹 개발이나 자바스크립트 없이, 단순한 HTTP GET 요청만으로 위치 기반 지도 이미지를 반환하는 네이버 클라우드 서비스입니다. 아래와 같은 특징을 가지고 있습니다.
- 간편한 지도 생성: 좌표, 줌 레벨, 지도 종류, 마커 정보 등 파라미터만으로 바로 PNG/JPG 이미지 생성 가능
- 여러 마커, 경로, 오버레이 지원: 복수의 장소 마커, 경로선, 라벨, 다양한 마커 형태를 동시에 활용할 수 있음
- 가벼운 응답: 이미지 파일로 반환되어 배포 및 자동화가 쉬움
- Streamlit 등 연계에 용이: PIL 이미지로 받아 데이터 대시보드, 보고서, 메신저 자동화 등에 즉시 활용 가능
정적 이미지라는 한계는 있지만, 반복 자동화와 배포가 쉽고, 추가 라이브러리 없이도 데이터 시각화가 가능하다는 점에서 실무와 개인 프로젝트 모두에서 매우 유용합니다.
주요 파라미터 및 마커 옵션
기본 파라미터
- w, h: 이미지 가로·세로 크기(px, 최대 1024)
- center: 지도 중심 좌표(경도, 위도)
- level: 줌 레벨(0~20, 숫자가 작을수록 더 확대)
- maptype: 지도 스타일(basic, satellite, terrain 등)
- lang: 지도 언어(한글 권장: ko)
마커 관련 옵션
- markers: 마커 정의(위치, 색상, 크기, 모양, 라벨 등)
- 마커 형식: type:[d|n|a|t]|size:[tiny|mid|small|large]|color:색상|pos:경도 위도|label:문자|...
- 여러 마커는 markers=… 파라미터를 여러 번 붙이거나, 파이프(|)로 좌표를 구분
- 한 이미지당 마커 최대 20개까지 표시 가능
마커 예시
- 번호 마커(파란색, 중간): type:n|size:mid|color:blue|pos:127.0276 37.4979|label:1
- 알파벳 마커(빨간색): type:a|color:red|pos:127.0631 37.5088|label:A
- 말풍선형, 아이콘형 등 자세한 옵션은 공식 문서 참고
팁: level 파라미터 없이 마커만 지정하면, 전체 마커가 모두 보이도록 자동으로 지도 범위를 조정합니다.
파이썬에서 Static Map API 활용 – 코드 예제와 해설
아래 코드는 여러 장소의 위도/경도 데이터를 한 번에 지도 이미지로 시각화하는 대표 예제입니다. 실제 자동화 시에는 pandas DataFrame과 연동, 이미지 저장, 실시간 배포 등 다양한 응용이 가능합니다.
import requests
from urllib.parse import quote
from PIL import Image
import io
NCP_CLIENT_ID = "<네이버_클라우드_Client_ID>"
NCP_CLIENT_SECRET = "<네이버_클라우드_Client_Secret>"
places = [
{'name': '강남역 스타벅스', 'lat': 37.4979, 'lon': 127.0276},
{'name': '삼성역 파리바게트', 'lat': 37.5088, 'lon': 127.0631},
{'name': '잠실 롯데월드', 'lat': 37.5115, 'lon': 127.0980},
]
base_url = "https://naveropenapi.apigw.ntruss.com/map-static/v2/raster"
width, height = 600, 400
level = 12 # 확대 정도(프로젝트 목적에 따라 조정)
maptype = "basic"
lang = "ko"
# 마커 파라미터 조립
markers = []
for idx, p in enumerate(places, 1):
marker = f"type:n|size:mid|color:blue|pos:{p['lon']} {p['lat']}|label:{idx}"
markers.append(marker)
markers_query = '&'.join([f"markers={quote(m)}" for m in markers])
req_url = f"{base_url}?w={width}&h={height}&level={level}&maptype={maptype}&lang={lang}&{markers_query}"
headers = {
"X-NCP-APIGW-API-KEY-ID": NCP_CLIENT_ID,
"X-NCP-APIGW-API-KEY": NCP_CLIENT_SECRET
}
res = requests.get(req_url, headers=headers)
image = Image.open(io.BytesIO(res.content))
image.show() # Streamlit에서는 st.image(image)
# image.save('my_map.png') # 파일 저장 가능
코드 해설
- 마커 조립: 장소마다 번호, 색상, 크기 등 옵션을 지정하여 가독성 높임
- markers 파라미터: 최대 20개까지 반복 또는 파이프(|) 구분
- 지도 중심/level: 목적에 맞게 level(줌) 조정, center 생략 시 마커 모두가 보이도록 자동 조정
- 이미지 활용: PIL 객체로 받아 Streamlit, 보고서, 메신저 등 다양한 채널에 바로 삽입 가능
다양한 실무 활용 시나리오
- 마커 색상·번호·아이콘 자유 설정: 장소 그룹별 색상·크기 구분, 주요 관심장소는 특수 아이콘/말풍선 사용
- 지도 사이즈/타입 유동 조절: 대시보드·보고서·SNS별로 최적의 크기·비율 지정 가능
- 경로(Polyline), 원·사각형 등 오버레이 추가: 경로 안내, 영역 시각화 등 다양한 데이터 시각화 가능
- 다국어 지도 제작: lang 파라미터로 한글·영문 지도 모두 생성 지원
실전 예시: 여행 일정별 주요 방문지, 부동산 추천 매물, 물류 배송 경로, 지역별 매장 지도 등 다양한 현장에 적용 가능
지도 시각화 실전 팁과 한계 극복법
- 마커 20개 제한: 한 이미지에 최대 20개까지 표시 가능. 그 이상은 페이지 분할·여러 이미지 생성으로 해결
- 지도 중심 자동 조정: center 생략 시 자동, 특정 위치 고정이 필요할 경우 center 직접 지정
- 옵션 조합 최적화: 색상·크기 등 다양한 옵션 공식 문서 참고(지도 시각적 일관성 유지에 유의)
- API 쿼터 및 속도 관리: 월 300만 건 무료(Static Map), 대량 자동화는 호출 속도·쿼터 정책 확인 필수
- 정적 이미지의 한계: 지도 이동·확대/축소·클릭 등 인터랙티브 기능은 미지원, 동적 지도 API와 구분해 활용
- 자동화 리포트/메일/SNS 연동: PIL 이미지를 PDF·PPT·이메일 첨부, 슬랙·카카오톡 등 메신저로 자동 전송
공식 문서 및 참고 자료
마치며 – 실무 자동화, Streamlit 연동까지
이번 글에서는 여러 장소 데이터를 네이버 Static Map API로 한 번에 지도 이미지로 시각화하는 방법과 파이썬 코드 자동화 예제를 심층적으로 다뤘습니다. 단순 마커 표시부터 다양한 옵션·커스터마이즈, 실전 팁까지 실무 활용에 바로 쓸 수 있도록 구성했습니다.
다음 포스팅에서는 이 결과를 Streamlit 대시보드에 통합해, 사용자 입력→장소 검색→지도 시각화까지 완전 자동화하는 실전 앱 구성법, 그리고 검색/필터링 등 인터랙티브 요소 연동까지 단계별로 다룰 예정입니다.
Static Map API의 단순함과 확장성을 업무·개인 개발에 잘 접목해, 반복 작업 자동화와 데이터 시각화 효율을 극대화하시길 바랍니다.