地圖改造總結
應用地圖兼容百度地圖、高德地圖改造背景
滿足需求所用高德地圖更換為百度地圖,進而對該應用地圖進行開發拓展,以滿足不同的地圖需求。
2. 地圖改造總結
2.1. 在lib文件夾下創建mapAdapter文件夾,相關文件介紹如下圖:
2.2. 提取業務代碼中使用的地圖公共api,進行封裝在基類ladapter.ts文件中,如圖:
2.3. 在amaplib.ts中繼承基類基類ladapter.ts並根據高德地圖api以及相關業務需求進行重寫或擴展該基類方法,如圖:
2.4. 在bmaplib.ts中繼承基類基類ladapter.ts並根據百度地圖api以及相關業務需求進行重寫或擴展該基類方法,如圖:
2.5. 在mapAdapter文件index.js中將所用地圖api方法進行封裝統一輸出,並默認加載高德地圖api如圖:
2.6. 在bankConfig文件platformSupport.ts中可根據需求修改配置加載對應的地圖api,配置修改如下圖:
2.7. 在業務代碼中例如setgps.vue考勤地點設置中使用如下圖所示:
3. 地圖擴展補充說明;
①在實際銀行本地開發中,如有需求更改考勤應用所使用地圖,可在bankConfig文件platformSupport.ts中修改bmapFlag值,值為true加載百度地圖,值為false默認加載高德地圖;
②如有需求更改地圖相關api,可在bankConfig文件中新建customBmaplib.ts文件,並在platformSupport.ts文件中引入customBmaplib.ts地圖api擴展類並修改對應配置代碼,該ts文件內容可繼承lib/mapAdapter/impl/bmaplib.ts地圖api類,進行擴展重寫百度地圖api方法,以達到滿足地圖相關業務需求;(高德地圖api擴展修改同上);
4. 改造中遇到的問題;
- 動態創建script標簽加載百度地圖后地圖加載不成功,地圖出不來;
原因:
解決方法:在地圖加載地址上加入參數&callback=onBMapCallback;
2.使用百度地圖BMap定位點總是顯示在左上角,不居中;
原因:由於百度地圖加載地圖的dom元素上設置了v-show等顯示隱藏屬性 導致在地圖加載后定位點無法居中顯示;
解決方法:去除百度地圖綁定的dom元素上的v-show、v-if等顯示隱藏屬性;如圖:
3.Native返回的坐標值顯示在地圖上,定位不准;
原因:由於native返回的坐標系為谷歌坐標系GCJ-02,而web端百度地圖使用坐標系BD09,導致顯示定位有幾公里偏移;
解決方法:將native端返回的坐標(谷歌坐標系GCJ-02)轉換為百度坐標系BD09;案例如下圖: