使用OpenLayers構建項目時,有時會遇到一些性能優化的問題,比如大量要素的繪製。OpenLayers爲繪製海量的點要素提供了一些手段,比如版本6之前的ol.WebGLMap,6之後的ol.layer.WebGLPoints。但是當我們需要繪製海量的其他類型要素(LineString、Polygon)時,貌似沒有比較合適的方案。
本文通過對VectorContext對象的研究和對源碼的分析,實現了在ol.source.ImageCanvas中獲得VectorContext對象,並使用VectorContext高效繪製海量LineString。
本文的方式只能在node編程環境中使用,因爲OpenLayers官方沒有將ol.format等工具類的接口在ol.js中暴露出來,無法引用。
本文分析部分較長,只需要代碼的請直拉到底。最後的Demo隨機生成了10萬條三個頂點的折線,繪製在地圖上,渲染的時間大約需要1.3s,如果採用ol.source.Vector和ol.layer.Vector效率則低得多。
問題:
有關canvasFunction:OpenLayers爲了方便使用canvas API在地圖上繪製圖形,提供了一個ol.source.ImageCanvas類型的source,在這個source的canvasFunction屬性定義的函數中,可以在canvas上實時繪製圖形,通過返回這個canvas作爲source的數據,並使用ol.