Openlayers源碼實踐系列:通過在ol.source.ImageCanvas中獲取VectorContext對象高效率繪製海量要素(支持點、線、面)

使用OpenLayers構建項目時,有時會遇到一些性能優化的問題,比如大量要素的繪製。OpenLayers爲繪製海量的點要素提供了一些手段,比如版本6之前的ol.WebGLMap,6之後的ol.layer.WebGLPoints。但是當我們需要繪製海量的其他類型要素(LineStringPolygon)時,貌似沒有比較合適的方案。

本文通過對VectorContext對象的研究和對源碼的分析,實現了在ol.source.ImageCanvas中獲得VectorContext對象,並使用VectorContext高效繪製海量LineString

本文的方式只能在node編程環境中使用,因爲OpenLayers官方沒有將ol.format等工具類的接口在ol.js中暴露出來,無法引用。


本文分析部分較長,只需要代碼的請直拉到底。最後的Demo隨機生成了10萬條三個頂點的折線,繪製在地圖上,渲染的時間大約需要1.3s,如果採用ol.source.Vectorol.layer.Vector效率則低得多。


問題:

有關canvasFunction:OpenLayers爲了方便使用canvas API在地圖上繪製圖形,提供了一個ol.source.ImageCanvas類型的source,在這個source的canvasFunction屬性定義的函數中,可以在canvas上實時繪製圖形,通過返回這個canvas作爲source的數據,並使用ol.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章