本文作者:TalkingData 視覺化工程師 李鳳祿
inMap 是 TalkingData 視覺化團隊開源的一款基於 canvas 的大資料視覺化庫,專注於大資料方向點、線、面的視覺化效果展示。目前支援散點、圍欄、熱力、網格、聚合等方式;致力於讓大資料視覺化變得簡單易用。
GitHub地址:github.com/TalkingData… (求Star!)
特性:
- 多執行緒 高效能
- 多圖層疊加
- 智慧的演算法
- 友好的 API
- 可以自定義主題
效果截圖如下:
inMap 是更加智慧的地理視覺化框架,主要面向從事資料視覺化應用相關的工程師和設計師。
- 底層繪圖引擎:目前基於 canvas 2d 提供基礎繪圖能力,基於 WebGL 的版本正在規劃中;
- 演算法:內建了經緯度墨卡託轉換、文字避讓演算法、最佳標記點演算法、自動分組標記配色演算法等。
inMap 寫的每個演算法都是為了增強使用者體驗,追求極致效果,我們希望用 inMap 能夠做出偉大的產品。
inMap 介面設計也很友好,希望讓開發者通過簡單的配置,就能快速構建出優美視覺化效果。
文字避讓演算法介紹:
我們在專案中經常會遇到在地圖上打點並標上文字的需求,我們用某流行的視覺化庫展示出效果如下:
(文字密密麻麻一團,都疊在一塊,效果很差,估計會被要被產品經理咬住不放)
inMap 實現了基於文字排版演算法,是不是很贊,效果圖如下:
是不是很酷啊,inMap 實現了自己的四分位文字排版演算法,聽起來不明覺厲的樣子,彆著急,讓我慢慢道來。
每一個標記點都有上下左右四個放文字的位子,如果左邊放不下,那就放右邊試試,還不行就放到下面試試,以此類推,原理就這麼簡單,哈哈。
實現細節如下:
- 求出要顯示文字的矩形(文字寬高)
- 建立帶有座標的虛擬文字集合物件、對集合的座標進行從小到大排序
- 遞迴遍歷虛擬文字集合、判斷是否與其他相交,如果有相交就移動當前文字位子,直到不相交為止。當找不到合適位置時,就選擇隱藏當前文字。
後續會輸出創造更好的視覺化圖形和演算法,並後續推出 WebGL 版本。