國育家,孫歧軍,劉海良
(山東中移通信技術有限公司,山東 濟南 250000)
隨著移動通信技術的高速發展,LTE 網絡規模不斷擴大,5G 網絡建設也持續推進。移動通信技術已經成為當今社會最重要的通信方式。隨著移動用戶的數量增長以及用戶在網時間的延長,用戶對網絡感知的要求也越來越高。因此,移動網絡的網絡規劃逐漸成為各大運營商從規模建設向精細化建設轉變的工作重點[1]。總體掌握網絡分布,快速定位問題區域,掌握覆蓋區域周邊地理分布,能為用戶提供更好的網絡服務,是提升用戶感知,加強網絡優化,增強深度覆蓋力度,提升網絡質量的關鍵。
本文介紹的基于C#和GMap.NET 的移動網絡規劃軟件可以通過在線或者離線緩存地圖直觀地向網絡優化工程師呈現無線網絡分布的地理位置、周邊建筑分布、周邊基站分布和當前位置到問題網絡點的路線等信息,有效幫助優化工程師總體掌握網絡分布情況,極大地提高了網絡優化人員合理規劃網絡與解決網絡覆蓋問題的工作效率。
根據實際工作需求,該軟件系統是以PC 機為主要規劃平臺,利用G map.Net 加載的電子地圖模擬實際地理環境,通過人機交互來完成對網絡工程參數的采集、存儲、分析、顯示和規劃輸出的功能。
從軟件系統架構出發,該軟件系統是由C#結構和G Map.NET 軟件結構兩大部分組成,軟件模塊功能設計,如圖1 所示。

圖1 軟件系統功能模塊
本軟件系統基于C#編程語言、Win Form 應用、Aspose.Cells 與G Map.NET 開源組件以及SQ Lite 數據庫引擎進行的設計與開發,實現了對谷歌中國地圖、高德地圖等電子地圖數據的調用。網絡優化工程師可以使用在線或者離線緩存的地圖數據和網絡參數,通過數據交互的方式實現對區域內的無線網絡可視化呈現與規劃。
GMap.NET 在默認情況下沒有自帶國內地圖服務商提供的地圖產品接口,需要開發者在項目中創建相對應的類才能調用,創建高德地圖類Amap Provider Base,使其繼承Gmap Provider,并在窗體代碼中對地圖進行初始化。
網絡規劃軟件系統在開發過程中,需要考慮到網絡數據經常會有變動,包括更新、刪除以及增加。將網絡數據存儲到SQ Lite 數據庫,便于用戶在操作軟件時進行查詢和更新,降低了系統內存的耗費[5]。SQ Lite Helper 類是一個幫助類,不僅可以幫助用戶創建和訪問SQLite 數據庫,而且提供了對數據庫中數據進行增、刪、改、查等功能。
在系統的數據庫中設計了2 張表,分別為 base_gongcan,new_modify。其中,base_gongcan 中存放了網絡基礎數據。new_modify 中存放了變更的數據,包括新增加的網絡數據、刪除的網絡數據等。base_gongcan表信息,如表1 所示。

表1 base_gongcan 表信息
圓形規劃是通過自定義Gmap Marker Circle 類并繼承Gmap Marker 類來實現的。通過監聽鼠標操作實現圓形規劃操作,具體實現流程為以下幾步。
第一步:創建圖層top Circle,定義圓形規劃標志,聲明一個布爾類型變量open Circle Plan 來判斷是否選擇圓形規劃,如果開啟圓形規劃,那么open Circle Plan 為true。
第二步:為Gmap Control 添加Mouse Down 監聽事件private void g Map Control1_Mouse Down99(object sender,Mouse Event Args e),如果開啟了圓形規劃功能,獲取按下的地圖坐標為圓心,Point Lat Lng pcircle=g Map Control1.From Local To Lat Lng (e.X,e.Y),并將pcircle 作為參數傳入自定義方法 private void Deal With Select Circle Click(Point Lat Lng p)中。
第三步:在Deal With Select Circle Click 方法中創建List
第四步:將圓心和這個點的坐標通過Gmap Route類進行兩點之間的直線繪制,作為圓的半徑標注。通過Gmap Route.Distance 屬性獲得兩點之間的直線距離即半徑。創建自定義類Gmap Marker Circle 繼承自Gmap Marker,以圓心坐標為參數1,兩個點之間的距離作為參數2,構造圓形初始化。new G Map Marker Circle(this.list Point Test[0],(int)Math.Floor(g Map Route.Distance* 1000.0))。
第五步:計算連線相對于正北方向的角度。將經緯度轉換成度分秒的形式,經緯度中的整數部分作為度,經緯度中的小數部分×60 的整數部分就是分,最后經緯度的小數部分×3 600 就是秒。為了修正因緯度不斷變化的球半徑長度,記為EC。

當前點所在緯度的緯度圈的半徑,記為Ed:

再計算兩點連線相對于正北方向的夾角。
第六步:規劃完成后,點擊鼠標右鍵選擇導出。通過SQ Lite Helper 類連接數據庫,將數據庫中存儲的數據取出,并依次計算與圓心點之間的距離,凡是小于規劃圓形半徑的點即為符合要求的點,并將這些點納入到List

圖2 圓形規劃
對于多邊形規劃,最少需要3 個點才能確定一個多邊形,因此在多邊形規劃時需要確定至少3 個端點。多邊形規劃是通過自定義Deal With Select Circle Click 方法,監聽鼠標按下并抬起事件,獲取多邊形的端點,進而運用GmapRoute 方法根據臨近的兩個端點繪制多邊形的邊界。
具體規劃原理為以下幾步。
第一步:定義多邊形規劃標志,聲明一個布爾類型變量open Polygon Plan 來判斷是否選擇多邊形規劃。如果開啟多邊形規劃,那么open Circle Plan 為true。
第二步:創建List
第三步:為G map Control 添加Mouse Down 監聽事件,將每次鼠標按下的點坐標添加到pointsg,當pointsg中的元素達到2 個時,通過G map Route 繪制兩點之間的連線。當pointsg 中的元素達到3 個時,清除索引為0 的元素,再通過Gmap Route 類繪制兩點之間的連線作為臨時邊界。
第四步:當規劃完成時,需要對多邊形的點個數進行判斷。如果小于3 個點,則提示:Message Box.Show(“規劃一個多邊形至少需要3 個點,而現在只有‘+new polygon.Count+’個點”);如果至少有3 個點,執行畫多邊形,會自動進行第一個端點和最后一個端點進行相連(見圖3)。

圖3 完成多邊形規劃
第五步:選擇導出規劃的數據時,通過SQ Lite Helper 類連接數據庫,將數據庫中存儲的數據取出,并通過G map Polygon 類的Is Inside 方法判斷小區的經緯度是否在規劃的多邊形范圍內。
在網絡規劃中,需要考慮實際中網絡設備的新增和刪除。為了將小區參數從子窗體傳遞到主窗體,應用了C#中的委托delegate 和事件event 并進行關聯。在子窗體中根據具體需求聲明一個委托set Form Value,根據這個委托聲明該類型的事件set Form All Value,將委托與動作進行關聯。在子窗體中的Button 按鈕中實現該委托事件。
在主窗體中,實例化子窗體時,同時初始化在子窗體中實現的委托事件:add.set Form All Value +=new Add.set Form Value(add_set Form Text Value);在刪除小區模塊中,通過設置一個類型為G Map Polygon 全局變量Selected Polygon 用于存儲點擊的多邊形扇區。當點擊查看某個小區的扇區時,會將該多邊形對象賦值給Selected Polygon,當點擊刪除按鈕時,觸發gMap Overlay.Polygons.Remove (Selected Polygon),將所選中的多邊形進行刪除。
為進一步合理規劃網絡和提升用戶的網絡感知,本系統基于VS2019 開發工具,設計了基于C#與GMap.NET 的移動網絡規劃軟件系統,具有界面簡潔、操作簡單、可擴展等特性,滿足網絡規劃應用的實際需求。