歷史總是驚人地相似,但凡出現「後續的文章」之類的字眼,就一定會開始難產。
果不其然,我很快就進入一種用寫程式逃避寫文章的狀態 🥲
因為 Finding the bus 成長的速度很快、專案變得有點龐大,整個有點懶得去想要從哪裡開始介紹⋯⋯
但姑且就來說說跟產品視角有關的內容好了。
使用者故事
首先是使用者故事。
身為一個公車族:
- 我想藉由輸入公車編號,找到對應的路線資訊、站牌位置與即時到站資訊。
- 我想從地圖上看到相關的資訊,了解我和站牌的相對位置。
- 我想收藏我常搭的公車站牌,以便之後直接查詢。
這部分沒有什麼懸念,就是公車查詢應用很核心的需求。
想做的功能與可行性
但實際思考操作的流程,我有一些自己想要的功能:
- 能夠依據定位自動判斷在哪個縣市
- 能在地圖上看到公車的位置
- 能規劃 A 點到 B 點的路線(包含轉車跟走路)
- 列表跟地圖要有一些聯動,點擊列表,地圖也要有一些反應
思考要哪些功能的同時,就要考慮可行性。
第一點我查了一下怎麼做,但現在有點想不起來我搜尋的順序。
簡單來說我找到 dkaoster / taiwan-atlas 這個專案,裡面有 towns-10t.json 這個檔案,是 TopoJSON 格式的台灣城市資料,裡面有每個城市的邊界座標。
感覺只要有定位,跟邊界資料,就一定算得出來使用者人在哪裡。
然後我找到 Turf 這個 library,可以用來計算地理位置的相關資訊,其中就包含用經緯度跟 Feature(也就是城市邊界)來判斷的功能。
第二點感覺 TDX 的 API 一定有包含,但 API 文件好長,我一開始沒有認真看(欸
後來在大部分功能都有了之後才補上。
第三點 TDX API 確定有,不過我很快就捨棄了,因為我自己也一定是直接用 Google Maps,而且混搭交通工具的狀況已經超過公車應用的範圍了。
後來是加上站牌的導航按鈕,用開 Google Maps 的替代方式,我覺得這樣比較合理。
第四點就是共享狀態的一些邏輯,是可行的。
全台灣還是雙北?
還有一個取捨我糾結了一小段時間,那就是範圍要做雙北還是台灣?
因為我其實不太清楚雙北的資料是不是就已經多到很多,不然怎麼會有 APP 叫做「台北等公車」(?
我是說,只做區域不做全台灣應該是有理由的對嗎?
感覺跟 TDX 的 API 是 by city 有關。
我看了其中一個包含全台灣資料的公車 APP,搜尋列表裡面就包含各縣市,這表示它已經抓好各縣市的資料了,如果我只打算簡單打請求,感覺會一次抓一大堆資料回來,好像很不健康。
但如果我只做雙北,好像又有點無趣。
後來看了一些設計稿,決定可以切換縣市來搜尋,這樣至少不用一次把全台灣的路線都抓下來。
收藏站牌要不要顯示即時資訊?
關於「我的最愛」收藏站牌的部分,本來想到如果收藏站牌也要顯示即時到站資訊,那不同縣市的站牌就都要分別打請求,好像也很不健康。
後來「我的最愛」沒有做即時資訊,內容存在本地,不會打請求,也就沒有這個問題。
附近站牌的邊界問題
除了資料量的問題以外,我還想到如果我在靠近城市邊界的地方,用「附近站牌」的功能,是不是就必須抓多個區域的資料呢?
但我腦袋打結,想說我要怎麼知道我現在在接近邊界的地方呢?
因為附近站牌的區域,是由使用者定位決定的,假設我在新北市靠近桃園的地方,就不會顯示桃園的站牌,那該怎麼辦?
但結果這個問題放著放著我就忘記了(欸!
因為我被這種邊界問題卡太久了,後來覺得先求有再求好,而且我相信使用者在邊界地帶會自己找到出路的(???
認真說的話,應該可以用邊界資料去判斷使用者是不是在接近另外一個縣市的位置,只要多抓另一個縣市的資料就好,但我就先沒有理會這件事。
雖然也算重要,但這不是很優先需要處理的問題。
讓我有點不想管這個問題的另一個原因是,我把縣市合併成區域(新竹縣 + 新竹市 = 新竹),因為從使用者的角度,通常不會把縣市看到那麼細。
所以請求是一次打整個區域,等請求回來再合併。
那如果我在新竹縣跟苗栗縣的邊界,感覺多打了新竹市好像有點不甘願,可是又不想寫一段邏輯不去打。
雖然也不是什麼大問題,可是就是稍微有點懶⋯⋯
寫到這裡,真的覺得這篇文章是一場災難(?
我是說,寫開發日記能這麼隨便嗎?
但我想保留一些真實性,分享一下規劃跟開發的時候腦袋裡都在卡什麼關。
根據回饋調整搜尋體驗
有一些功能是在得到一些回饋之後調整的,例如最近查看路線。
因為原本搜尋公車的列表是直接把所有路線顯示在畫面上,搜尋的時候再 filter。
但有人覺得這樣看起來有一大團資料在那邊,所以後來改成預設是顯示最近查詢過的路線,有搜尋關鍵字再顯示搜尋的列表。
多語
關於多語的部分,因為 TDX 的資料本來就有中文跟英文,所以就做了這兩種語言。
小結
雖然過程有點亂七八糟,但是在多次的調整跟優化之後,目前的功能我覺得算是剛好。
除了我的最愛感覺可以考慮加上即時資訊以外,附近站牌跟搜尋公車的部分,我覺得目前已經算是很完整了。
邊界的問題也可以慢慢優化就好。
後續的文章應該會寫一些跟實作有關的內容。