在百度電子地圖開發中,截圖功能是可視化成果留存的核心需求之一,尤其當場景涉及標記點(Marker)、多邊形覆蓋物等自定義元素時,需兼顧底圖完整性、元素精準性與顯示效果。本文結合實際開發痛點,梳理截圖方案的迭代過程與最優實踐。
最初採用主流的html2canvas方案時,底圖與Marker的截取相對順利,但多邊形覆蓋物始終存在兩大症結:一是百度地圖瓦片資源的跨域限制,即便配置useCORS參數仍頻繁觸發攔截;二是圖元漂移問題,因html2canvas對地圖容器transform樣式的解析偏差,多邊形位置與底圖無法精準對齊。後續嘗試瀏覽器打印API,雖能規避跨域,但選擇框等冗餘元素會被連帶截取,無法滿足純淨截圖需求。
轉向百度地圖原生API探索後,發現直接依賴getOverlays()獲取元素、結合Canvas手動繪製的思路更具可行性。最終確定“html2canvas底圖+原生API繪元素”的混合方案:先用html2canvas獲取完整底圖,解決底圖截取的兼容性問題;再通過map.pointToPixel()將多邊形經緯度轉換為Canvas像素座標,手動繪製覆蓋物。為避免覆蓋物遮擋底圖,將邊框設為rgba(51, 136, 255, 0.5)、填充色設為rgba(51, 136, 255, 0.2),通過透明化處理平衡顯示層級。
該方案既規避了純html2canvas的圖元問題,又解決了純原生API底圖獲取的兼容性難題。實踐表明,混合方案在元素精準性、顯示效果與兼容性上達到最優平衡,為百度地圖截圖功能開發提供了可靠參考。