編輯 / 本刊記者 汪玚 文章摘選編輯于微信公眾號“一覽眾山小-可持續(xù)城市與交通”
地鐵那些事兒
編輯 / 本刊記者 汪玚 文章摘選編輯于微信公眾號“一覽眾山小-可持續(xù)城市與交通”
在“互聯(lián)網(wǎng)+”充斥的大數(shù)據(jù)時代,你是否想過自己的位置信息變化將會給城市帶來怎樣的影響?一個編碼員通過顏色、集聚度的變化,發(fā)現(xiàn)地鐵系統(tǒng)不同線路之間的效率差異,以幫助優(yōu)化改善今后地鐵運營的排班調(diào)度計劃。聽起來很瘋狂?更瘋狂的還在后面——廢舊地鐵車廂如何被用來打造成為一座人工島?為了看挖掘機將18噸重的地鐵車廂扔到深海里,就遠航到公海邊緣,并且堅持拍攝了三年——直至項目被終止,瘋狂的攝影師用照片記錄了那些遠涉重洋最有意義的瞬間。
這不是傳統(tǒng)的新聞報道,而是充滿生活與行業(yè)趣味的小文。別客氣,請“享用”。
你是否曾在乘坐公共交通上下班時感覺自己像一顆乒乓球?被擁擠的人流、各種行李以及無休止的自動扶梯上彈來彈去?一個名叫Will Gallia的編碼員研究出了一種新的可視化數(shù)據(jù)顯示方式,將倫敦地鐵一天里通勤工作的上班族們,簡化為一個個繁忙的小像素。
Gallia基于2009年某一天的倫敦地鐵數(shù)據(jù)創(chuàng)造了可視化信息。他選取來自地鐵交通卡(Oyster card)中5%的行程樣本信息來確定大約每56萬乘客的行程起點和終點。(BBC去年報道到每天有350萬英國人乘坐地鐵。)接著他設(shè)計了一個路徑算法來預(yù)測這些上班族乘坐的線路。最后他將這些出行線路疊加在倫多地鐵系統(tǒng)的地圖上,通過這些細小如像素般的乘客移動顯示出地鐵每天的變化。
從這個生動逼真的地鐵數(shù)據(jù)可視化也得到了一些有趣的收獲。例如,早上大約8:40和晚上6:10左右開始的一段時間,是這些小像素越來越繁忙的時段。但是也有一些地鐵線路地區(qū)一直保持著較低的活躍度:例如在Hainault環(huán)線的遠端角落(Hainault 位于倫敦東北部的紅橋周邊。那里是倫敦城郊化發(fā)展比較早的地區(qū)),即使是在通勤高峰時段也幾乎沒有乘坐地鐵的人經(jīng)過。由此可見,所有的地鐵線路的交通流量并不相同。
通過研究2009年某個星期內(nèi)來自交通卡(Oyster-card)中5%的樣本行程信息,實現(xiàn)了倫敦地鐵網(wǎng)絡(luò)中562,145個行程的可視化。
這個研究其實早在2012年就開始了,但是直到2015年才完成。這個想法是為了將人們了解的地鐵交通具象化為真正的倫敦地鐵數(shù)據(jù)圖。我想將所有的出行都編入著色器。最初我認為,我可以將每一條行程路線(或者人)作為一個像素,通過使用GLSL像素著色器(GLSL:Green Light Stimulated Luminescence)跟蹤這些像素,從而得到他們最終的運動軌跡圖像。
這個研究經(jīng)歷了很多階段。首先是處理倫敦交通局(TFL:Transport for London)提供的龐大的CSV格式的出行數(shù)據(jù)文件(CSV:Comma Separated Values)。我去掉了所有非地鐵出行的數(shù)據(jù),例如那些輕軌列車(DLR:Docklands Light Railway )、國內(nèi)鐵路等。并使用Unix的線工具命令,例如grep命令(UNIX工具程序,可做文件內(nèi)的字符串查找)。CSV文件下每行就呈現(xiàn)出:3,‘Tue’,‘LUL’,‘Uxbridge’,‘Holborn’,‘1001’,‘16:41’,‘1032’,‘17:12’。
下一步是編寫行程路線程序(行程規(guī)劃器:行程規(guī)劃器是特指一個特別的電子搜索引擎以找到兩個地點之間使用某種交通方式的最佳路線)。為此我在Python(Python:是一種面向?qū)ο蟆⒅弊g式計算機程序設(shè)計語言)中使用圖遍歷算法,通過深度優(yōu)先搜索的優(yōu)化版本來尋找最短路線。一旦它與倫敦交通局的最佳行程路線相匹配,那么這項工作步驟就完成了。在這之后,我對最佳行程路線做了一個擴展功能:一個路線查找器。它可以產(chǎn)生一系列可以描摹的特定的行程點。
“綜上所述,我最初的想法是使用像素著色器,使得行程中每一個點在著色器下都有自己的屬性(這樣最長的一條行程線路會有12個點)?!睂⑺羞@些點通過像素屬性數(shù)列輸入到著色器中?!斑@個方法相當(dāng)有效,但是這種方法幀速率負荷不了,并且我對于每個行程線路所顯示出的單一像素圖像并不滿意。它看起來像這樣——”
倫敦地鐵日信息變身2分鐘動畫
一年半之后,筆者對編程有了更多的了解。對整體負載做了調(diào)整使物體的速度增加。首先,將最佳行程路線的速度提高了50倍;平均每一條行程線路只需要0.003s。接著,將所有的路線信息保存為二進制文件,這樣把他們輸入到C++程序時可以運行更快?!艾F(xiàn)在我也使用Open Frameworks,就像之前我在OpenGL做的一樣。”最后,重寫了應(yīng)用在片段著色器上的所有計算方法。當(dāng)然,片段著色器的改變并不能被看見,它只是用來計算行程路線在某一時刻的點的位置。
使用片段分離器有很多的優(yōu)勢:首先,它使這些行程線路更加快速且更加靈活。例如,片段分離器隨著時間的推移可以產(chǎn)生自我摩擦使得其工作效果趨于完美。另外我可以在幀緩沖(FBO:Frame Buffer Object)中輸入任何命令并且可以用更多有趣的方式展現(xiàn)緩沖區(qū)內(nèi)的肌理。最后,這意味著我不局限于使用單一像素表現(xiàn)每個行程線路,通過將所有數(shù)據(jù)加載到一個VBO(Vertex Buffer Object)中,我可以用方形表達它們。這使得這些行程線路不僅看起來更加清晰,同時保持了“一個像素對應(yīng)一條行程線路”的美學(xué)要求。
用Photoshop軟件從地鐵地圖中移除這些線路并且把作為行程路線的底圖。最后,做了一些音效對在動畫中移動的像素們做出補充。這樣,一個約2分鐘的動畫就完成了。(文/ Aarian Marshall 翻譯/GBABEJY)