2019-02-25

風球廬山真面目 - 長洲氣象站

「天文台現正懸掛十號風球」,年輕一代應未從電視新聞聽過 (不過其實他們還看電視的嗎?),皆因天文台2002年起不再懸掛實體「風球」(註:澳門仍會懸掛風球)。話雖如此,打風之時,「風球」二字依舊掛在市民口邊,除了傳媒,鮮見有人跟隨天文台改口稱作「發出十號颶風信號」,始終實在累贅兼毫不順口。而相信各位對2018年的山竹仍然記憶猶新,若然山竹沒因掠過呂宋北部而減弱、若然當日遇上天文大潮,後果堪虞,(雖然或許仍然阻不了香港人返工的無比決心),但幾多人汲取了教訓呢?
十號風球

2018-11-25

毅行者 2018 - 統計數字

下雨天總掛念從前,麥徑上那可愛片段,突然又已一年,趁着週末有雨,分析一下今年的毅行數據吧,跟往年一樣,分析大致基於樂施會毅行者網頁追蹤功能的公開數據,只經有限度校對檢查,只供參考 =p

首先是完成全程 100 公里的時間分佈,此張圖表數據來源為官方賽後公佈的活動排名,今年最快時間 11:53:35 比往年的 12:01:37 稍快,而首兩隊可謂鬥得難分難解。最後共有 1149 隊抵達終點 (計及最終不足 4 人的隊伍),此外有 70 隊沒有成員能夠抵達大棠終點,隊伍完成率為 94.3% (2017 年: 95.1%)。人數上,4228 位參加者走畢全程一百公里,完成率為 86.9%,與去年的 87% 相若。隊伍平均完成時間為 30 小時 40 分鐘,較去年快了約 16 分鐘,中位數為 30 小時 38 分鐘 (2017 年: 30 小時 43 分鐘)。

完成時間分佈 (所有抵達終點隊伍)



2018-10-12

淺談分析 Google 定位記錄尋人

日前香港電台節目《鏗鏘集》探討數月前的滑翔傘意外,遇難者親友披露當日的一些搜救細節,希望政府當局可以檢討將來如何善用資訊科技幫助搜救。節目中提到,親友初時翻查手機定位記錄認為失蹤者或在鳳凰山,惟直升機搜索該位置並無發現,加上風向分析,故此很快排除了鳳鳯山。其後當局利用電話訊號發射站記錄鎖定搜救範圍,惟範圍廣闊,而且天氣不穩,首數天無功而還。親友後來仔細翻查手機定位記錄,發現線段原來重疊,最後定位疑為大東山而非鳳凰山,並在失蹤後第五天從 Google Takeout 匯出定位記錄,由於警方當時未能開啟 JSON 檔案,故此片中談到親友自行上 Google 找方法分析數據,並篩選出兩個高準確度的座標,認為最終位置應為大東山地勢崎嶇的南坡高地,而兩點亦其實相距不遠,惟當時礙於種種因素未有立即根據線索行動,及至翌日在家屬多番游說後才派人前往該兩個座標,並終在其中一個座標的十餘米附近找到失蹤者。

家屬強調並非要追究責任,而是希望可以善用科技改善搜救效率,好使搜救人員日後不必如這次般那麼辛苦日以繼夜重複上山搜索。(其實現時還有不少方法方便分享定位記錄,如漁護署的郊野樂行 Apps 內的 GPS 留蹤服務,行山人士亦可在設有標距柱的郊遊徑善用無須流動數據的 50222 短訊服務,而 Google 用戶更可考慮設立 Trusted Contacts  (安全聯絡人) 以備不時之需。

今日嘗試根據節目中的方法下載及分析自己的定位數據,並將有關步驟詳列於下以供參考,不過希望不會真的有人需要用到。首先你要有相關 Google 賬戶的登入資料 (如賬戶以及密碼,還要那部電腦早已獲豁免使用2-Factor 認證,不然就要向 Google 緊急求助),然後該用戶必須已開啟定位記錄功能,若然沒開定位或行程一直接收不到流動數據訊號就真的沒法子了,而暫時測試到能夠獲取新至即日的定位記錄,沒有太大的延誤問題。
  1. 登入相關 Google 賬戶前往 https://takeout.google.com/

  2. 按 “Select None” 避免下載不必要的數據,然後向下捲找 Location History

  3. 按旁邊的掣以選擇下載定位數據 (預設檔案類型為 .JSON)


  4. 下捲至最底按 Next (其後或須輸入密碼確認)

  5. Archive Size (Max) 選擇 1GB (不過若然真的壓縮後有 1GB,解壓後隨時有 10GB,那事情就麻煩很多了,以下方法未必可行 =p)

  6. 按 Create Archive 然後等候 Google 準備資料

  7. 下載後解壓,找子資料夾 \Takeout\Location History\,內裏應有個 Location History.json 檔案,視乎檔案大小,小的(例如幾十 MB 內還可以用記事本開,比較大的話就或要利用程式再作處理)

  8. 小型的檔案,用記事本開啟後,把內容複製至: https://konklone.io/json/ (或可在 Google 上找其他 json 解析工具),網頁下方會顯示解析原始數據後的內容,如經度 (Longitude)、緯度(Latitude)、時間(timestampMs,為 UNIX Timestamp),以及定位準確度 (Accuracy, 單位為米),經緯度的小數點要自己加上,小數點右方應有7個位,如 latitude欄的 221234567 是指 北緯 22.1234567度,可下載為 CSV 檔後再作處理 (將數字除以一千萬即可)

  9. 若要將 UNIX Timestamp 轉為常用的時間格式 (公式中的 +1/3 是將 UTC 時間轉為香港時間),可在 Excel 打入以下的公式 (假設資料放在 A1 格):
    =(A1/86400/1000+1/3)+25569

    然後將該欄格式自訂為:
    d/m/yyyy h:mm:ss



  10. 越上方的記錄為越新的記錄,可以根據有關記錄的準確度 (視乎器材設定、衞星訊號接收情況,定位可準確至10米以內),以及記錄時間間距去決定有關記錄的可信程度。以下圖為例,定位準確度忽然由10米下跌至1200米,皆因小弟進了室內吃豆腐花,電話不能順利接收衞星訊號定位,以致定位可能出現龐大誤差。得到目標位置經緯度後,可將經緯度打在 Google ,它會給你顯示相應地點。要注要的是,衞星訊號接收情況極受環境因素影響,在空曠地區較佳,而在香港高樓林立的市區,則會容易得到錯誤定位,必須小心解讀有關記錄,例如剛才翻查檔案也有些明顯錯誤定位,如人在東涌道的巴士,但零星準確度低(accuracy 聲稱約一千米)的定位記錄卻指人在貝澳。


  11. 若然檔案真的比較大,可能需要利用一些小程式幫忙抽取數據,下面用了 Python 3.6 (可能需要安裝額外的 packages,建議使用 64-bit 版本),不過碰巧手上沒有大型 JSON 檔作測試,惟根據過往經驗,一、二百 MB 應該不成問題,可按照註解更改程式碼:

import json
import os
import pandas as pd
from pandas.io.json import json_normalize

## CONVERSION TOOL FOR ANALYZING THE JSON FILE (LOCATION DATA) EXPORTED FROM GOOGLE TAKEOUT ## CHANGE THE WORKING DIRECTORY TO THE APPROPRIATE DIRECTORY
os.chdir('D:\\Medium\\Takeout\\Location History')

## LOAD THE JSON FILE
with open('Location History.json', encoding='utf-8') as data_file:
    data = json.loads(data_file.read())

## READ THE JSON FILE LOADED INTO A PANDAS DATAFRAME
df1 = pd.json_normalize(data['locations'])

## EXTRACT THE MOST RECENT n ROWS FOR ANALYSIS
n = 10000
df1 = df1.head(n).copy()

## CHECK THE STRUCTURE OF THE DATAFRAME
print(df1.columns)

## DROP THE ACTIVITY COLUMN TO FURTHER REDUCE THE SIZE
df1.drop(['activity'], axis=1, inplace=True)

## ADD THE DECIMAL POINT TO THE COORDINATES
df1['latitudeE7'] = df1['latitudeE7']/10000000.0
df1['longitudeE7'] = df1['longitudeE7']/10000000.0

## CHANGE THE UNIX TIMESTAMP(IN MILLISEC) TO LOCAL TIME (GMT+8)
df1['time'] = pd.to_datetime(df1['timestampMs'],unit='ms').dt.tz_localize('UTC').dt.tz_convert('Asia/Hong_Kong')
df1.drop(['timestampMs'], axis=1, inplace=True)

## RE-ORDER AND RENAME THE DATAFRAME FOR CONVENIENCE
## PLEASE CHECK IF THE FOLLOWING COLUMNS EXIST (AND ADJUST THE LIST IF NECESSARY)

print(df1.columns)
df1 = df1[['time','latitudeE7','longitudeE7','accuracy','altitude','velocity','verticalAccuracy','heading']]
df1.rename(columns={'latitudeE7':'latitude','longitudeE7':'longitude'}, inplace=True)

## EXPORT THE DATAFRAME TO AN EXCEL FILE
df1.to_csv('output.csv')



2018-04-26

香港三角測量站地圖


今日發現港府的 資料一線通 網站上載了大地測量控制站數據庫,實在欣喜萬分,昔日大費周張方能自無數 .pdf 文件整理眾多測量控制站的數據,如今卻竟變得唾手可得,還望日後能公開更多各式各樣的數據方便市民,畢竟香港在這方面仍然可謂十分落後。

相信行山客對山頂的三角測量站 (俗稱「標高柱」) 並不陌生,而這些三角測量站往往成為打卡熱點,以致月前各方很是雀躍討論行山客「Kill 標」會否妨礙測量人士工作,在此不贅,總之還是那句,凡事顧己及人,自然會少了很多紛爭。



截至 2016 年 1 月,香港共有 238 個三角網測站 (不過部分測量站歸類為導線點 (Traverse Station),如奇力山的 1053.01 測量站),而今天下載的檔案載有全數三角網測站的地(區)名、經緯度、高度 (註:量度至柱頂,故與地面真正高度有少許差異,可細閱各站摘要找出柱身高度),不過此等 .kml 檔沒有高度、地名,Excel 檔則沒有全數站點以 全球性 WGS 84 基準計算的坐標 (即是大家常用的 北緯二十多度、東經一百一十多度),要將本地的 HK 80 基準換算為 WGS 84 基準,聽得一頭霧水?很正常,反正若非要分析或顯示一些地理數據,日常生活不多要作此等換算。簡而言之,小弟集各類檔案之長,綜合成方便使用的 .kml 檔,雖然地政總署特意提醒用家其 .kml 中的坐標為近似值,僅供參考,不過應該雖不中亦不遠矣吧,反正大家又不是測量人士。

好了,說了那麼多廢話,且將這些數據上載至 Google Maps 方便大家,內有 238 個三角網測站以及 401 個設有 Types A - H Beacon 的導線點的簡單資料,並添上前往有關站點摘要 (包含柱身高度、前往方法、鄰近站點) 的超連結,不過內裏亦包含了 Urban Survey Marks 資訊,例如有個站點位處政府合署通風井頂部,相信大家沒有與趣去覓其芳蹤吧……導線點本有三千多個,不過好些只是路邊的一些標記,甚或山上的鐵管,為免地圖載有太多點,故此等導線點不在此收錄了。



若上方地圖不能運作,可直接前往地圖 (https://drive.google.com/open?id=1LX1JVY033QWnn6ZHuybjZx098H4TPgcT&usp=sharing)

版權聲明:香港特別行政區政府及其資料一線通網站為一切原始資料的知識產權擁有人,詳情請參閱相關使用條款

2018-02-21

萬家燈火嘉頓山

路線:美荷樓青年旅舍 - 嘉頓山,循原路下山
長度:約 1 - 2 公里
起點交通:深水埗港鐵站 D2 出口/ 石硤尾 A 出口
終點交通:同上



嘉頓山,位處筆架山一支脈盡頭,可謂拍攝日落、夜景勝地,早年曾有地圖標示其為喃(口巫)山,又因其毗鄰嘉頓中心,遂漸以嘉頓山之名見稱,反觀喃(口巫)山/喃嘸山之名,坊間已鮮有提及了。去年嘉頓向城規會申請重建深水埗青山道嘉頓中心,報導一出,各界人士旋即議論紛紛,畢竟嘉頓中心屹立逾半個世紀,而以時間慢人半拍聞名的嘉頓鐘樓早已成為不少人的集體回憶,唯利之所在,若然重建計劃最終落實,只能徒嘆奈何,鐘樓屆時亦大抵難逃一劫 。(城規會已於 2018年9月21日 有條件地批准重建申請,只會保留標誌及時鐘。)

重建計劃 (設計圖片, 可按圖放大)

嘉頓中心

嘉頓中心地下設有咖啡室

拍攝當日,鐘樓慢了超過 15 分鐘

2018-01-07

毅行者 2017 - 統計數字

早前嘗試分析樂施會毅行者網頁追蹤功能的公開數據,純粹試驗性質,未經仔細驗證,已知部份初步數據不太完整,以及或有錯誤,故此只供參考 =p

首先是完成全程 100 公里的時間分佈,此張圖表數據來源為官方賽後公佈的活動排名,相信大家都知道最快隊伍時間為 12:01:37。共有 1182 隊抵達終點 (計及最終不足 4 人的隊伍),此外有 61 隊沒有成員能夠抵達終點,隊伍完成率為 95%。平均時間為 30 小時 56 分鐘,中位數為 30 小時 43 分鐘,不過有趣的是,似乎 30-31 小時分組人數與鄰近組別相比出奇的少,究竟有沒有甚麼特別的原因呢?

完成時間分佈 (所有抵達終點隊伍)


2017-11-19

毅行者 2017 陪行後記

2017年11月19日 上午 9:35 (香港時間),衝線了,但不消一會 Eric Chan 已經揹着近乎倒下的 Jacky 找醫療輔助隊, 然後咬緊牙關苦苦支撐了數十公里的 Raymond 亦要接受治療,還好他們好好休息過後已無大礙。若將時鐘回撥 46 小時 35 分鐘,0451 獅子山精神隊四人毅行小隊正式自北潭涌出發,其後歷盡春夏秋冬,但憑着非比尋常的意志與毅力,終於四人八腿一條心完成崎嶇的一百公里,令人滾動萬分,而能夠陪行最後的 21 公里,實在與有榮焉。



再回帶一下,話說近年都會上山做偽行者 (撇除去年慘遭狗咬只好休養),但多年來只是旁觀者,今年首次成為支援隊伍一員,Support Team 陣容強大,竟多達四十餘人,而且精英雲集,陪行一個全馬連走麥理浩徑第六至十段的人又有,連踩兩晚奔波勞碌駕車橫跨整個香港的又有,惟小弟有認人障礙,加上只支援少量路段,恕未能一一詳談各位高手,只能舉例簡而述之,敬請見諒 =p


2017-07-30

同遊井坑瞰錦田 - 大欖涌郊遊徑

路線:馬鞍崗護理員站崗 - 大欖涌郊遊徑 (井坑山 - 四排石山 - 黃茅嶺 - 白水嶺) - 麥理浩徑第十段 - 大棠山道
長度:約 12 公里
起點交通:途經大欖隧道轉車站/ 轉車站橋底 八鄉路總站 之巴士路綫
終點交通:港鐵巴士 K66 (大棠 - 朗屏)

(前半篇為廢話,如欲參閱行山路線資料,請向下捲 =])

漁護署正舉辦一連串活動慶祝郊野公園成立四十周年,而另一邊廂,政府早前卻邀請香港房屋協會為兩幅位處郊野公園範圍的「邊陲土地」進行技術及生態硏究,研究覆蓋範圍逾四十公頃,而不幸在首輪計劃慘遭選中的是大欖郊野公園 (大欖隧道收費廣場以西) 以及馬鞍山郊野公園 (水泉澳邨附近),其後團結香港基金理事劉炳章表示此研究將有助日後研究其餘二十多個郊野公園的「邊陲地帶」,可見此例一開,定必後患無窮。

大欖隧道收費廣場
大欖隧道收費廣場

2017-01-31

如何同時顯示多條行山路線記錄?

相信大家多年來都累積了不少行山、跑步或單車活動的 GPS 記錄,不過以往要弄張足跡地圖一目了然卻絕非易事,今天介紹的這個方法雖然略為麻煩,但勝在行之有效,若然各位有其他更方便的方法,還望不吝賜教。
(Google Fusion Tables 已於 2019年12月初停止運作,屆時此篇將會過時失效)

完成品


2016-12-31

吉澳漁村眺鹽田

路線:吉澳碼頭 - 天后宮 - 姻緣樹 - 高地頂 - 吉澳碼頭
長度:約 2 公里
起點交通:馬料水 <> 吉澳 (街渡,詳情按此)
若持有效沙頭角區禁區通行證 (俗稱禁區紙),亦可在沙頭角碼頭乘搭街渡前往吉澳
(運輸署已批准開辦航線來往馬料水、吉澳、鴨洲,並已於 2018 年 9 月開通)
終點交通:同上

吉澳 (Kat O,或 Crooked Island),位處香港東北水域,距深圳鹽田港不足一公里,其海岸線曲折,狀如反寫的「之」字,故得 Crooked Island 之名,意即「彎曲的島」。吉澳以東為寬闊的大鵬灣,而灣口朝內海的吉澳灣三面環山,乃漁船避風良港,故名吉澳,取其吉祥之意 [1]。吉澳在五十年代曾是養活四千餘人的繁盛漁村 [2],惜時移世易,村民多已外遷,惟仍會參加十年一度的安龍太平清醮,甚至僑居海外的鄉親亦會回到吉澳聚首一堂祭祀島上龍脈,據報章報導,剛在 2016 年舉辦的第二十六屆安龍太平清醮 (亦即此傳統習俗已有二百多年歷史),就有約八千名原居民參與,平日冷冷清清的小島頓時人山人海,熱鬧非常。

彎彎曲曲的吉澳