不那麼正式的整理、寫些東西。因為研究室的事務需求(隨著博班的加入漸漸地轉移重心),幫忙跟著架設了一個網站即時呈現台灣區域都市溫度,整個流程涉及前後端架構,之所以會有這樣的目標,其實是因為老師看了這個網站就一直很嚮往要做類似的成品。
此專案提供開源程式碼,若逆向回去找,甚至可以看見在Github上眾人將程式碼持續修正的過程,很令人驚嘆。以下是完全不會寫code如何逐步拼貼完成的紀錄。
leaflet.js/Open Street Map
一個Javascript的Library,提供各式地圖相關的資料庫,裡頭有各種Features可供玩耍,在這個不知道Google Map還會收掉甚麼免費功能的當今,開放的Open Street Map可以比較踏實的開始。此外主要還是網路資源多,方便我查取資料。
雖然LASS的空汙專案提供開源程式碼,但對初學者我來說,要消化還是太困難了,即使有旁人偶爾指點,我也不好意思巴著人一直問,所以學習的路徑十分迂迴,這一部分甚至還沒有提到後端資料庫,搞懂伺服器的概念也花了我很長時間(第一次理解網頁的架構js+css+html)。
在這紛亂的搜索過程中,我首先是認知到了leaflet的其中一個較為基礎的plugins, leaflet-heatmap.js,這是在空間分析上常用的方式:「熱力圖」,對應上密度分析,總之是一種經常使用,理解某項被觀測值出現在何處的頻率較高的一種方式。但熱力圖的呈現,呈現的是「點」,而非我希望得到的「眾多個點計算得出的內插圖」。
接著,我循線又找到了他人放置於Github上,修改leaflet-heatmap.js所寫的leaflet.idw。IDW,全名Inverse Distance Weighted,簡單來說就是最基本簡便的空間內插,若是透過GIS分析,有時我們會進一步使用克利金法(Regrssion Kriging)來計算,但IDW在數據均勻的狀況下,也足以有一定效果,因此,我便從這點下去進行撰寫。
當然立即就遇到困難,原始程式並沒有限制空間範圍,因此計算時會將整個地球的範圍都計算進入,接著我發現又有人以此為依據,撰寫了限制範圍的程式碼,抱歉,到這邊我真的非常驚嘆,雖然在搜索資料時也時常驚豔相關紀錄文章之多,但我真的覺得開源的概念強大到直接把我轟出同溫層,回想自己甚至待在系上連傳承考古題都做不下去就很懊惱。也有人在嘗試讓建築圖開源,比如疫情下九典和成大建築系合作的QurE,公開圖面就是一例,但實質上還是有諸多困難。
(這是pm2.5-leaflet-map)
離題了,總之,我又進一步發現,撰寫限制空間範圍的人,製作了pm2.5-leaflet-map的demo,感覺上很像是LASS的初稿!LASS對我來說太多資訊,難以消化,從頭到這邊,終於有點通了的感覺,網站也終於有個樣子(菸)。可以即時看到全台灣的溫度惹(根本只是增強控制慾吧)
php/MySQL
實質上,這邊才是最困擾我的地方,畢竟即使不懂JavaScript,他還是在同個介面上進行操作,當要跨越兩處提取東西時,完全就是超越我的想像能力,這邊大多數其實是學長完成的,尤其是php,概念我都理解了,但實質上依然不是我拼出來的。
MySQL的話則稍微能夠掌握一些,若能掌握得更好,感覺未來研究室可以直接廢掉excel,在撈資料plot到地圖上的過程中,我們的第一版本撈取的方式過於笨重,所以導致載入時間非常長,後來改到第二版本,讓他變得非常快速,才終於解決。
在這邊稍微比較震撼的其實是正規化的概念,雖然後來我並沒有真的設計資料庫(應該說資料庫並沒有被非常完善的設計,因為時間急迫,老師太想看),但發現原來資料是這樣被處理,真是讓我覺得實在太厲害了。
這邊真的好像沒做甚麼(攤掉)
最後除了我們自己的即時資料,其實還接上了氣象局的API,原本想要複製一個,沒想到後來學長又用了更簡單的方式,恩......請求的概念真的很玄。
php的後續
Air Temperature對研究目標來說尚且不足,起碼要計算到「體感溫度」才行,當今的戶外體感溫度包含勞工常用的WBGT指標和歐洲常用的PET。此二者有其構成,但可透過修正公式中的部分常數(因各個地區的情形與人耐熱度不同)去換算,為了要進行製作,被說可在php進行計算,原本是問可否在python上寫好,畢竟我數據整理都在python上,感覺可以直接挪用,但想想這樣好像又有點繞,在運算上查了一下好像php也蠻可以的?所以大概會先嘗試這麼做。
下次就寫寫難以讓人脫手的Google API和一些小爬蟲給我的感想。
沒有留言:
張貼留言