1. 程式人生 > >二維地圖引擎

二維地圖引擎

轉自:https://www.cnblogs.com/rhinoxy/p/4997884.html

  至校招來公司已有一年多時間了,記錄下在這一年多時間裡工作經歷。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作為一個二維的地圖渲染引擎,功能上需要完成對二維圖片、點、線、面的顯示。元件中使用圖層的邏輯概念作為渲染的基本單位。圖層分為底圖層、點層、線層、面層,針對不同的圖層元件向上提供了相應的操作介面。

  1. 底圖層:被設計用來顯示不同型別的地圖,目前支援Arcgis與Pgis兩種格式的地圖。功能上響應使用者拖拽平移、大小縮放。
  2. 點層:顯示幾何圖元點,並可疊加不同的顯示樣,配置樣式在不同的地圖顯示級別上的可見性。功能介面上提供對熱點數量新增及刪除、改變熱點的空間位置、查詢指定的熱點及響應使用者空間操作的幾何區域計算,完成點選、線選、框選、面選、圈選。
  3. 線層:顯示幾何圖元線段,支援配色並可配置在相應的地圖級別上線段顯示的寬度。功能介面上提供實時更新線段空間位置及配色和類似點層中增、刪、改、查。
  4. 面層:對任意多邊形(凸、凹、自交)填充顯示。
  5. 臨時標繪圖層:自由繪筆、圖片標註、空間操作軌跡。

整體架構圖如下:

介面層負責與前端及遠端服務互動。