光陰似箭,日月如梭,話咁快又到區議會選舉年,而出年亦有臘鴨會選舉,應該又會通街成功爭取橫額。今次唔講到台灣咁遠住,講返點用 R 製作互動式區議會選區資料地圖 (繼續趕客),相信嚟緊大家應該會用得着,再不然用喺舊時嘅數據又得,得咗 (互動式網頁可在下文 (Friend Link) 找到)。
首先,巧婦難為無米炊,冇選區分界資料,基本上你乜都做唔到,唔通自己畫咩 (自問畫功仲衰過兩歲小朋友,無謂獻世),而呢樣資料你係唔會喺政府公開數據平台搵到。有賴唔少有心人根據《公開資料守則》向政府部門索取有關資料,前人種樹,後人乘涼,小弟借花敬佛,將各年度區議會選區 (District Council Constituency Area, DCCA) 分界數據嘅鏈結放埋一齊以饗讀者:
DCCA 2019 Shapefile
DCCA 2015 Shapefile
DCCA 2011 Shapefile
DCCA 2003 & 2007 Shapefiles
(完整原始碼放咗喺底,今次用 gist,應該會方便、美觀啲,唔計頭頂嗰堆 config,實情得幾行 codes)
1. 準備工作
今次主要會用到 rgdal、raster、leaflet 呢三個 packages,當你下載完相關 shapefiles 後,你要call readOGR() 載入當中嘅 .shp 檔,然後當你查看載入後的數據會發現座標並非大家日常用慣的北緯幾多度、東經幾多度,而是 836535.7、813788.1,皆因各自採用的坐標系統不同,DCCA 選區分界數據採用 HK1980 方格網坐標,如果對此有興趣可以參閱地政總署的《香港大地測量基準說明》,在此不贅。首先設定原來數據的坐標系統 (HK 1980 Grid,亦即原始碼中的 EPSG:2326),然後再將其轉換為日常的經緯度 (WGS 84,亦即原始碼中的 EPSG:4326) 就完成準備工作。
## IMPORT THE SHAPEFILE
DC2019 = readOGR(dsn='DCCA_2019.shp')## SET THE CRS (COORDINATE REF SYSTEM) TO HK1980 GRID SYSTEM (EPSG:2326)
## https://spatialreference.org/ref/epsg/2326/
projection(DC2019) = crs("+init=epsg:2326")## TRANSFORMATION INTO WGS 84 SYSTEM (EPSG:4326)
## https://spatialreference.org/ref/epsg/4326/
DC2019 = spTransform(DC2019,"+init=epsg:4326")
2. 顯示 DCCA 分界
話咁快就畫得圖,都話咗今次好簡單。(其實想當年自己研究咗好耐先搞得掂,以前淨係得啲外國教學,嗰時俾啲 CRS (Coordinate Reference System) 搞到頭都大埋,因為其實佢本身 .shp 有自己嘅 CRS 設定,但唔知點解直接轉做 WGS84 就會有頗大偏差,之後先發現要直接改佢個 CRS 做 HK1980 Grid,仲要用埋 GIS 軟體嚟做轉換,唔知我講乜唔緊要,發嗡瘋而已,請無視)
由於想製作互動式地圖網頁,會用到 leaflet 呢個功能強勁嘅 package,set_view() 設定地圖坐標去香港,然後 addProviderTiles() 就可以揀選自己喜歡嘅底圖,有好多款精美底圖任君選擇,總有一款啱你心水,最後當然要用 addPolygons() 將 shapefile 嘅數據加返落地圖。
## PLOTTING DCCA BOUNDARIES ON A MAP
m <- leaflet() %>%
setView(lng = 114.2, lat =22.4, zoom = 11) %>%
addProviderTiles(providers$Stamen.TonerLite)%>%
addPolygons(data=DC2019,weight=1,fill=FALSE,
color="red",stroke=TRUE)
m
但係就咁畫分界線又無乜意思,當然要加返不同選區數據落去先有啲野睇,好似拙文講巴士路線收入分佈,呢個就後話了,俾大家先摸熟一下呢篇內容先,留返下次再講,費事閱讀時間吓吓十幾分鐘嚇親人。
資料來源: 香港政府為原始資料的版權擁有人,使用條款請瀏覽 data.gov.hk
最後更新:2019.05.04