擷取 Google 地圖圖資並輸出 CSV 格式
一、教學目標
- 知識目標:了解 Google 地圖資料的來源(Google My Maps 與 Google Maps API)及其應用場景。
- 技能目標:學會使用兩種方法(KML 轉換與 API 抓取)從 Google 地圖中提取資料並輸出為 CSV 格式。
- 態度目標:培養學生對地圖資料處理的興趣,並理解程式化工具在資料分析中的實用性。
二、前置準備
適用對象
- 對象:高中生、大學生或對 Python 程式設計與地圖資料有興趣的初學者。
- 先備知識:基本的 Python 程式設計能力(檔案讀寫、套件安裝)。
所需軟硬體
- 硬體:具備網路連線的電腦。
- 軟體:
- Python 3.x(建議安裝 Anaconda)。
- 必要 Python 套件:
pykml
(或 xml.etree.ElementTree
)、requests
。
- 文字編輯器(如 VS Code)。
- 其他:
- Google 帳號(用於 Google My Maps)。
- Google Cloud 帳號(申請 API Key)。
- 可選:範例 Google My Maps 地圖(如自訂餐廳地圖)。
教師準備
- 準備一個範例 Google My Maps 地圖(至少包含 5 個地點)。
- 預先測試程式碼並確認環境可運行。
- 提供安裝套件與申請 API Key 的簡易指南(PDF 或投影片)。
三、教學流程
時間分配:總計 90 分鐘
- 導入(10 分鐘)
- 方法 1 講解與實作(30 分鐘)
- 方法 2 講解與實作(40 分鐘)
- 總結與討論(10 分鐘)
1. 導入(10 分鐘)
活動:情境引導
- 教師提問:
「假設你想收集台北市所有咖啡廳的位置資料,然後分析它們的分布,你會怎麼做?」
- 簡介 Google 地圖資料:
- 說明 Google 地圖的資料來源(Google My Maps 與 Places API)。
- 介紹 CSV 格式的用途(可用於 Excel、GIS 軟體等)。
- 目標導引:
「今天我們會學習兩種方法,從 Google 地圖提取資料並轉成 CSV,幫助你處理地圖資料!」
2. 方法 1:從 Google My Maps 下載 KML 並轉換為 CSV(30 分鐘)
講解(10 分鐘)
- 介紹 KML 檔案:
- KML 是什麼?(Keyhole Markup Language,一種地圖資料格式)。
- 如何從 Google My Maps 取得 KML。
- 展示步驟:
- 開啟範例 Google My Maps。
- 點選「選單 > 下載 KML」,儲存為
map.kml
。
- 簡介 Python 程式如何解析 KML(名稱、經緯度)。
實作活動(20 分鐘)
- 學生任務:
- 使用教師提供的範例地圖,下載 KML 檔案。
- 執行以下程式碼,將 KML 轉為 CSV:
import csv
import xml.etree.ElementTree as ET
# 讀取 KML 檔案
kml_file = "map.kml"
tree = ET.parse(kml_file)
root = tree.getroot()
# 定義 KML 命名空間
namespace = {"k": "http://www.opengis.net/kml/2.2"}
# 找出所有地點
places = root.findall(".//k:Placemark", namespace)
# 存儲資料
data = []
for place in places:
name = place.find("k:name", namespace).text
coordinates = place.find(".//k:coordinates", namespace).text.strip()
lon, lat, _ = coordinates.split(",")
data.append([name, lat, lon])
# 輸出 CSV
csv_filename = "google_map_data.csv"
with open(csv_filename, "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["Name", "Latitude", "Longitude"])
writer.writerows(data)
print(f"已成功將 KML 轉換為 CSV:{csv_filename}")
- 成果檢查:學生打開生成的
google_map_data.csv
,確認資料正確。
3. 方法 2:使用 Google Maps Places API 抓取地點資料(40 分鐘)
講解(15 分鐘)
- 介紹 Places API:
- 什麼是 API?(應用程式介面,可從 Google 伺服器提取資料)。
- 如何申請 API Key(簡述 Google Cloud Console 流程)。
- 展示步驟:
- 設定搜尋條件(經緯度、半徑、類型)。
- 使用 Python 發送請求並解析回傳資料。
- 範例展示:以台北 101 附近餐廳為例,生成 CSV。
實作活動(25 分鐘)
- 學生任務:
- 使用教師提供的 API Key(或自行申請)。
- 修改以下程式碼,搜尋自己感興趣的地區與類型(如景點、商店):
import requests
import csv
API_KEY = "你的API金鑰"
LOCATION = "25.0330,121.5654" # 台北101
RADIUS = 5000 # 搜尋半徑
TYPE = "restaurant" # 可改為其他類型
url = f"https://maps.googleapis.com/maps/api/place/nearbysearch/json?location={LOCATION}&radius={RADIUS}&type={TYPE}&key={API_KEY}"
response = requests.get(url)
data = response.json()
# 存成 CSV
csv_filename = "google_places.csv"
with open(csv_filename, "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["Name", "Latitude", "Longitude", "Address"])
for place in data["results"]:
name = place["name"]
lat = place["geometry"]["location"]["lat"]
lon = place["geometry"]["location"]["lng"]
address = place.get("vicinity", "N/A")
writer.writerow([name, lat, lon, address])
print(f"已成功擷取地點資料並存為 CSV:{csv_filename}")
- 成果檢查:學生檢視生成的
google_places.csv
,確認包含地點名稱與座標。
4. 總結與討論(10 分鐘)
- 教師總結:
- 方法 1 適合已有地圖資料,簡單快速。
- 方法 2 適合動態搜尋,功能強大但需 API。
- 學生討論:
- 「你覺得哪種方法更適合你的需求?為什麼?」
- 「這些資料可以用來做什麼?(如地圖視覺化、商業分析)」
四、評量方式
- 實作成果(70%):
- 成功生成
google_map_data.csv
(方法 1)。
- 成功生成
google_places.csv
(方法 2)。
- 參與討論(30%):
五、延伸應用
- 進階挑戰:
- 在方法 2 中,加入「評分」「評論數」等欄位(查詢 Places API 文件)。
- 將 CSV 匯入 Google Sheets 或 QGIS,製作地圖視覺化。
- 實務專案:
- 收集某城市所有學校位置,分析教育資源分布。
- 搜尋旅遊景點,規劃旅遊路線。
六、教學資源