前端基於Canvas生成等值面的方案


 文章版權由作者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/

1.背景

       在之前的項目中,我們做過基於PM2.5的站點監測數據對全區域進行插值渲染來可視化預測,其實現方案為后台工具進行定時生成插值柵格圖,對應文章為:《WebGIS中等值面展示的相關方案簡析》(http://www.cnblogs.com/naaoveGIS/p/6145339.html)。但是該方案依賴AE,且為定時生成等值面(也可以改造為實時,但是因為是工具類型,對並發支持有瓶頸)。

       隨后,我又研究了基於前端庫Turf.js將等值面轉移到前端生成,基本邏輯為先將插值范圍格網化,分別對每個格子的中心點進行克里金插值,最后利用turf生成等值面,然后等值面和插值范圍做拓撲相交判斷獲取相交面。該方案對應的文章為:《WebGIS中前端JS生成等值面方法探討》(http://www.cnblogs.com/naaoveGIS/p/7346299.html)。但是,由於turf內部存在bug,當等值面非常復雜比如包含多個內環等情況時,其生成的等值面有誤。

       基於此,我們着手開始研究新的等值面生成方案。經搜尋資料,一種是可以基於wcontour在服務端生成,另一種是在博友GIS之家中發現的開源庫krigingjs來生成。考慮到預報的實時性,以及對服務器壓力的減輕,我們選用了采用krigingjs前端生成方案。

2.集成和優化

2.1集成

       在集成中,我們重點需要解決的是地理坐標與屏幕坐標的轉換,以及根據地圖的縮放等作出相應的重繪,這里不做詳細描述。

2.2優化

       我們實際試用中發現有如下問題:

       a.我們的區域邊界比較復雜,每次裁剪繪制時效率很低,容易出現卡頓。

       b無法對等值面進行閾值指定顏色的設置。

       c.插值間隔參數對插值效率和效果影響很大。如果設置小了,在地圖分辨率很高時,將直接導致繪制效率下降卡頓。如果設置大了,容易出現繪制鋸齒狀。

 

       針對以上問題,我們分別做了優化,基本重寫了krigingjs中的繪制代碼:

       a采用多線程進行插值計算,不影響前端其他操作。

       b.點面判斷不再通過矢量拓撲關系去判斷,而是改成預先給canvas進行二值化賦值,區域內是1,非區域內是0,在逐像素計算繪制時通過此二值來判斷是否進行透明設置。

       c.插值大小采用地圖各級別中的居中分辨率來計算。

3.成果展示    

   

 

                           -----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/

                                                                           如果您覺得本文確實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^

                                 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM