星期一的早上,我在辦公區(qū)鳥瞰窗外,目光所到之處,用顧城的那首“你看天時很近,看我時很遠”倒是格外的應景。作為一名父親,看著工位上3M的口罩,想想此刻還在熟睡的孩子,多少有些無奈——又是PM25指數(shù)200+的一天。這么大的中國,如何給孩子找一方凈土,讓孩子能夠健康快樂的成長。正是帶著這樣的一個想法,我查詢了幾個我比較關注的城市的PM值,比如北京,成都,杭州,深圳,廈門等地方,都不理想,一種趕盡殺絕的節(jié)奏,難道在中國只能做君子,自強不吸?同時,我個人發(fā)現(xiàn)一個情況,我的手機是華為榮耀6plus,天氣數(shù)據(jù)顯示來自中國天氣網(wǎng),PM25指數(shù)相比AQI(Air Quality Index)上的要偏低。比如我所在的城市成都,此刻手機上顯示PM25指數(shù)為162,而AQI上顯示為212,對比如下:
這個過程中,體現(xiàn)了我對數(shù)據(jù)的三點需要:實時性,準確性和易對比。首先數(shù)據(jù)必須是準確的,及時的,這樣最有價值,這兩點不難理解。易對比的涵義則比較寬泛,并沒有一個絕對的標準。首先數(shù)據(jù)量上要豐富,這樣客觀上才有有代表性,其次可視化上要便于理解,比如數(shù)據(jù)都有自己的大小和位置,如何形象高效的展現(xiàn)這些信息,怎樣把數(shù)字更好的轉(zhuǎn)化為易于人類感官理解的形式,最后就是一個抽象的過程,提煉有價值的數(shù)據(jù),降低過多數(shù)據(jù)帶來的噪音。當然,我在做這個小應用的時候并沒有考慮這么多,只是做完后自己的總結(jié)知新,看似有用,實則完全為了提升逼格。
帶著這些疑問,我個人認為,AQI的數(shù)據(jù)是全球各個監(jiān)測站的數(shù)據(jù),更原始一些,更具有代表性和權威性,在中國呆久了,如果不對政府提供的數(shù)據(jù)有懷疑,只能證明自己too young too naive了。所以很自然的覺得AQI的數(shù)據(jù)在準確性和實時性上是目前的最佳選擇。而且我知道某網(wǎng)站上是有實時的全球的AQI數(shù)據(jù),反編譯代碼獲取里面請求數(shù)據(jù)的方法應該可行。所以,從技術上是可以搞定數(shù)據(jù)需求的。
有了數(shù)據(jù),可視化上如何展示呢,如何找到一種直觀,簡單的形式來?作為一個GIS行業(yè)的碼農(nóng)Coder(以前我并不介意碼農(nóng)這個稱呼,但工作時間越久,發(fā)現(xiàn)真的大部分程序員只配做碼農(nóng),所以本著謙讓的態(tài)度,還是把這個稱號讓給他們吧),當然要在地圖上展示了。這是某網(wǎng)站上的一個展示效果,也是我的參照物,這里通過地圖來解決對經(jīng)緯度的理解,通過數(shù)字和顏色來解決對PM指數(shù)的感官體驗:
但從細節(jié)處,我覺得還可以做到更好,第一,地圖本身就是對地球的一次抽象,因此這個抽象過程中,在數(shù)據(jù)的形象和對比上是存在損失的,第二,該網(wǎng)站的技術較為傳統(tǒng),數(shù)據(jù)都是以HTML標簽的形式來展現(xiàn),在數(shù)據(jù)較大的情況下存在性能的瓶頸,第三,如下圖,按照AQI的標準來做的顏色區(qū)分,但這個Level是區(qū)間分段的方式,而不是單值的一一映射的關系。比如PM值300和500是有差別的,但卻對應同一個顏色,可以更好的體現(xiàn)這種差別。
當我看到這里就想到用球的形式來展現(xiàn)全球的PM數(shù)據(jù),應該會有一個不錯的視覺效果,而且也可以很好的體現(xiàn)WebGL在大數(shù)據(jù)渲染上的性能優(yōu)勢,這是吸引我的一個因素。同時我覺得霧霾目前是一個大眾比較關注的問題,所以不應該只是我一個人的小眾喜好,對很多人或地球人而言都是一個興趣點,坦白說,我當時覺得想想就好,上班了,撞鐘時間開始了。這時候是羅胖的一句話開導了我“如果一件事情可做可不做,而你又有時間做的話,那你最好去做,萬一有什么意料之外的收獲的,這就是機會”。開工。
首先就是反編譯某網(wǎng)站的JS代碼,把請求PM數(shù)據(jù)的url和參數(shù)規(guī)范找到,url里面竟然有key參數(shù),所以就得看看在自己的環(huán)境下是否能走通。說明一下,據(jù)我了解,該網(wǎng)站是一個在中國北京?居住的外國人搞的,而且數(shù)據(jù)比較敏感,畢竟有損墻國形象,我從AirNow網(wǎng)站取