Warning: Undefined variable $row in
/var/www/html/blog.inc.php on line
25
Warning: Trying to access array offset on value of type null in
/var/www/html/blog.inc.php on line
25
上一篇提到,由於新巴/城巴 API 變更導致無法更新資料庫。經過這兩天嘗試及評估後,問題遠比想像中複雜:
- 原來使用的 API 直到現在已經過演化,現在的 syscode5 要能使用比較麻煩,而且要弄一個一直開啟的 Android 裝置用來產生 syscode5 才行,不傾向用這個方法
- 至於改用 data.gov.hk 的公開資料,在開發當中發現多個嚴重問題
- 新巴提供的公開 API 並沒有路線清單,故路線清單只能由運輸署提供的所有巴士路線 XML 中取得
- 所有巴士路線 API 中有部份路線在新巴的路線 API 無法找到
- 新巴的路線車站 API 並沒有每個站的車費資訊,需使用運輸署的巴士車資 XML (那個檔案116MB!) 進行對應
- 無論使用運輸署還是新巴公開 API 都有兩個問題,其一是沒有地區資料,沒有地區資料就無法以分區進行路線搜尋;其二是只有站名而沒有街道資料
- 以上兩個問題的資料目前是載於本地的資料檔案,而 ID 為新巴的站號,所以解決方法是要將運輸署的車站與新巴的站號關聯,那就可以在運輸署的車站中恢復該兩項資料。理論上只要同時取得運輸署及新巴公開 API 於同一路線及方向的路線車站資料然後作一對一的對應就可以,但是...
- 新巴的 inbound 與 outbound 定義跟運輸署不符。運輸署的定義 inbound 是由終點站到起點站,而 outbound 則是相反,但新巴路線車站 API 有些 outbound 卻是終點站到起點站,有些卻不是,以致一對一對應時會因為方向錯誤而對應到不正確的站號
- 即使方向相同,有些路線 (例如 103) 在運輸署的路線車站資料中,車站數量跟新巴 API 傳回的車站數量不同,這樣導致無法對應,因為無法知道缺少或多出來的是哪一個車站
- 我亦嘗試以車站座標去搜尋本地資料檔案以找出對應的車站:
- 運輸署資料使用 HK1980 座標系統,而新巴公開 API 則使用常用的 WGS84 (即經緯度) 座標系統
- 將運輸署的座標轉換成 WGS84 座標後,發現就算經緯度誤差即使只有不多於 0.001 度時仍然會發生對應車站錯誤的問題,所以此方法不可行
- 即使以上問題都順利解決,還是有兩個後續問題:
- 本地資料中所用的 ID 是新巴站號,該編號對於特定車站是不變的;但是運輸署的車站編號由於是共通於所有巴士公司,故我懷疑只要站數有增減,特定車站的編號就會有變,這樣對於以後如何進行車站對應會有很大問題
- 對於聯營線,目前有使用特別方法讓路線的九龍部份使用九巴資料而港島部份則使用新巴資料 (因為事實上聯營線的車站也有非聯營線,所以不應該出現兩個相同的車站),然而該方法依賴於九巴路線資料的車站數量與新巴資料相同,直到現在為止也只有一兩條路線會有出入,處理也比較簡單。但使用運輸署的資料時,只測試到第3條路線就已經發現車站數不同的問題,要是數量多起來根本無法處理
雖然我還是會再進行測試一段時間,但老實說並不樂觀...
撰寫於:2020/3/2 00:03:54 /
回應:0