대시보드 만들기

벚꽃길 지도에 선 그리기

지도 위의 점을 선으로 잇는 법. 약간의 코드가 들어가는 부분까지 함께 정리했다.

( 🌸 서울 벚꽃길 Tableau 지도 시각화 가이드)

Cherry Blossom Paths

Cherry Blossom Paths

오늘은 앞에서 살펴본 지도에 선 그리는 방법에 대해서 정리해 보려고 합니다.

약간에 coding이 있어야 해서 그 부분도 간략하게 설명 드리겠습니다.

STEP1

Prepare Cherry Blossom Spot Data (데이터 수집)

서울의 주요 벚꽃 명소 10곳의 좌표 데이터를 수집합니다.

알고있는 명소명을 작성하고 GPT를 이용해 대략적인 위도, 경도를 뽑아내도록 합니다.

번호명소명위도 (Latitude)경도 (Longitude)
1여의도 윤중로37.5281126.9185
2석촌호수37.5117127.1006
3서울숲37.5443127.0377
4남산공원37.5512126.9882
5경의선 숲길37.5561126.9236
6창경궁37.5786126.995
7어린이대공원37.548127.0745
8낙산공원37.5793127.007
9도산공원37.5215127.023
10뚝섬 한강공원37.531127.0664

저는 10개 정도만 해봤습니다. 사실 전국에 너무 많은 지역이 있죠. 서울 만해도 너무 많은 곳이 있어서 sample로 정리해 보았습니다.

Step 2

Draw Blossom Trail on My Maps (산책로 데이터 수집)

Google My Maps에서 산책로 경로를 그리고 KMZ로 내보냅니다.

산책로 경로를 그리기 위해서는 google mymaps (https://www.google.com/mymaps)를 활용했습니다.

구글에서 mymaps 를 검색해 Google My Maps 가 첫 결과로 나온 화면

google mymaps

제목없는 레이어가 하나 있게 됩니다. 레이어 이름은 우선 넣어주세요.

선그리기

위 순서와 같이 line을 선택하면 아래와 같은 모양이 나오게 됩니다.

선그리기

지도에서 원하는 위치에 선을 그립니다.

선을 끝내고 싶을 때는 마지막 누른 위치에 동일한 위치를 한 번 더 누르면 됩니다.

그러면 종료되면서 아래 그림과 같이 레이어에 선 13과 같이 선 이름이 생기고 지도에는 선에 풍선이 생기게 됩니다. (이름을 넣으시면 됩니다.)

레이어 선그리기 이름 추가

레이어 선그리기 이름 추가

이렇게 모든 산택로에 경로를 입력하게 됩니다.

Step 3

Extract Coordinates (KMZ 파일에서 위도/경도 추출)

Python을 사용해 위도/경도 좌표를 추출하고 정제합니다.

모든 산책로를 다 그렸다면 레이어에서 3개의 점으로 표시된 option을 누르고 데이터 내보내기를 합니다.

KML/KMZ 파일과 CSV 파일이 있는데요. CSV 파일은 계속 한글이 깨는 문제가 있습니다.

저는 KMZ 파일로 다운 받았습니다.

벚꽃길 데이터 내보내기

벚꽃길 데이터 내보내기

다운 받은 파일을 아래와 같이 위도, 경도 추출을 위한 code를 작성합니다. (GPT 이용하셔도 쉽게 변환해 줍니다.)

GPT에 넣고 변환해 달라고 하시면 됩니다.

import zipfile
import os
import pandas as pd
from xml.etree import ElementTree as ET

# ---------- 1. KMZ → KML 추출 ----------
kmz_path = "벚꽃길.kmz"  # 업로드된 KMZ 파일 경로
extract_dir = "kmz_extracted"
os.makedirs(extract_dir, exist_ok=True)

with zipfile.ZipFile(kmz_path, 'r') as zip_ref:
    zip_ref.extractall(extract_dir)

# KML 파일 찾기
kml_files = [f for f in os.listdir(extract_dir) if f.endswith('.kml')]
kml_path = os.path.join(extract_dir, kml_files[0])

# ---------- 2. KML → 좌표 추출 ----------
tree = ET.parse(kml_path)
root = tree.getroot()
ns = {"kml": "http://www.opengis.net/kml/2.2"}

placemarks = root.findall(".//kml:Placemark", ns)

extracted_data = []
for pm in placemarks:
    name_elem = pm.find("kml:name", ns)
    coords_elem = pm.find(".//kml:coordinates", ns)
    if coords_elem is not None:
        coords_text = coords_elem.text.strip()
        for line in coords_text.strip().split():
            lon, lat, *_ = line.split(",")
            extracted_data.append({
                "이름": name_elem.text if name_elem is not None else "",
                "위도": float(lat),
                "경도": float(lon)
            })

df_kmz = pd.DataFrame(extracted_data)

# ---------- 3. 좌표 → 벚꽃길 라인 데이터 가공 ----------
df_kmz["명소명"] = df_kmz["이름"].str.replace("벚꽃길", "", regex=False).str.strip()
df_kmz["타입"] = df_kmz["명소명"] + " 산책로"
df_kmz["도로명"] = df_kmz["이름"]
df_kmz["번호"] = None
df_kmz["지점명"] = df_kmz["이름"]
df_kmz["Path Order"] = range(1, len(df_kmz) + 1)

df_path = df_kmz[[
    "번호", "명소명", "위도", "경도", "타입", "도로명", "지점명", "Path Order"
]].rename(columns={
    "위도": "위도 (Latitude)",
    "경도": "경도 (Longitude)"
})

기존 명소와 경로를 합쳐서 하나의 data 파일로 만들었습니다.

번호명소명위도경도타입도로명지점명Path Order
1여의도 윤중로37.5281126.9185명소
2석촌호수37.5117127.1006명소
3서울숲37.5443127.0377명소
4남산공원37.5512126.9882명소
5경의선 숲길37.5561126.9236명소
6창경궁37.5786126.995명소
7어린이대공원37.548127.0745명소
8낙산공원37.5793127.007명소
9도산공원37.5215127.023명소
10뚝섬 한강공원37.531127.0664명소
서울숲37.5443466127.033943서울숲 산책로서울숲 벚꽃길서울숲 벚꽃길1
서울숲37.5422284127.0355953서울숲 산책로서울숲 벚꽃길서울숲 벚꽃길2
서울숲37.5412246127.0380736서울숲 산책로서울숲 벚꽃길서울숲 벚꽃길3
서울숲37.541216127.0404662서울숲 산책로서울숲 벚꽃길서울숲 벚꽃길4
창경궁37.5788627126.9960884창경궁 산책로창경궁 벚꽃길창경궁 벚꽃길5
창경궁37.5788542126.9959382창경궁 산책로창경궁 벚꽃길창경궁 벚꽃길6
창경궁37.5791858126.9956271창경궁 산책로창경궁 벚꽃길창경궁 벚꽃길7
창경궁37.5793984126.9940821창경궁 산책로창경궁 벚꽃길창경궁 벚꽃길8
창경궁37.5795599126.9928268창경궁 산책로창경궁 벚꽃길창경궁 벚꽃길9
창경궁37.5800106126.9941036창경궁 산책로창경궁 벚꽃길창경궁 벚꽃길10
창경궁37.5817791126.9954983창경궁 산책로창경궁 벚꽃길창경궁 벚꽃길11

위와 같이 전처리하게 됩니다.

Step 4

Visualize in Tableau

벚꽃 명소는 포인트로, 산책로는 선(Line)으로 시각화하기

1. 위도, 경도를 열과 행에 배치.

2. 마크에서 라인을 선택.

3. 도로명을 세부정보에 연결.

4. path order를 경로에 추가.

5. Text에 도로명을 연결.

Visualize in tableau

Visualize in tableau

이렇게 하면 간단한 위치 표시를 통한 지도에 이동경로를 표시할 수 있습니다.

🌸 서울 벚꽃길 찾아보기