至校招來公司已有一年多時間了,記錄下在這一年多時間里工作經歷。2014.7.14,以C++語言技能作為生產力入職開始第一份工作,主要職責參與地圖引擎研發及維護。起初在老大的指導下熟悉引擎(MapEngine)中各個功能模塊的執行流並據需求完成功能上的擴充。后來項目需求,改造MapEngine供Chrome瀏覽器使用,現有的MapEngine代碼不夠模塊化重用度不高,里面包含了ATL簡單窗口對象(響應鼠標事件)以及渲染代碼混雜在Model代碼(COM對象)中並且都是使用OpenGL的路徑渲染完成繪制,這在瀏覽器OpenGLES的環境下無法支持。所以決定重新開發新的版本MapEngineES供瀏覽器,項目交付后該版本就停止更新。2015.3開年部門決定做平台,我的工作再次繼續為該平台做地圖插件,這次是在MapEngine的基礎之上進行代碼重構,移除里面的ATL窗口對象(因為含有窗口的控件在WPF顯示中有"空域"問題,並且使用”離屏渲染"后續再聊這個塊內容),將響應鼠標事件交給WPF UserControl去做並且支持JSON命令交互。到2015.11由於諸多原因部門宣布平台項目失敗了,重構后的MapEngine也就棄用了。
再后續思考着將PC端與瀏覽器端地圖引擎整合在一起,將代碼模塊化,便於復用。
功能規格說明:
地圖引擎(文中另一種叫法地圖組件)基於事件驅動來構架,事件產生消息主要分為兩大類:窗口鼠標輸入消息和JSON指令消息。
響應指令事件是本組件主要任務,MapEngine作為一個二維的地圖渲染引擎,功能上需要完成對二維圖片、點、線、面的顯示。組件中使用圖層的邏輯概念作為渲染的基本單位。圖層分為底圖層、點層、線層、面層,針對不同的圖層組件向上提供了相應的操作接口。
- 底圖層:被設計用來顯示不同類型的地圖,目前支持Arcgis與Pgis兩種格式的地圖。功能上響應用戶拖拽平移、大小縮放。
- 點層:顯示幾何圖元點,並可疊加不同的顯示樣,配置樣式在不同的地圖顯示級別上的可見性。功能接口上提供對熱點數量添加及刪除、改變熱點的空間位置、查詢指定的熱點及響應用戶空間操作的幾何區域計算,完成點選、線選、框選、面選、圈選。
- 線層:顯示幾何圖元線段,支持配色並可配置在相應的地圖級別上線段顯示的寬度。功能接口上提供實時更新線段空間位置及配色和類似點層中增、刪、改、查。
- 面層:對任意多邊形(凸、凹、自交)填充顯示。
- 臨時標繪圖層:自由繪筆、圖片標注、空間操作軌跡。
整體架構圖如下:
接口層負責與前端及遠程服務交互。