一種電子海圖中船舶電子標牌的自動排列方法
【技術領域】
[0001]本發(fā)明涉及一種電子海圖信息處理技術領域,特別是應用于船舶交通管理系統(tǒng)(以下簡稱VTS)電子海圖中的船舶信息標牌的自動排列方法。
【背景技術】
[0002]船舶交通管理系統(tǒng)是指在一定水域內用以保證航行船舶安全和效率的管理系統(tǒng)。水域內主動上報或被雷達發(fā)現(xiàn)的船舶經(jīng)情報中心融合處理后會以報文的形式傳送給VTS臺位,VTS臺位顯示軟件接收到船舶航跡報文(包括船舶名稱、類型、國籍、經(jīng)瑋度位置、方向、航速等信息)后分析船舶航跡的經(jīng)瑋度位置,會在電子海圖上對應的經(jīng)瑋度位置以標號的方式將收到的船舶航跡實時地繪制出來,供工作人員監(jiān)視、管理、使用。電子海圖上顯示的船舶標號為一個簡單的圖標,包含的信息有限,其他信息,如船名、類型、國籍等,需要以標牌的形式出現(xiàn)在對應的船舶標號附近,并以直線與之相連,標牌與船舶航跡一一對應。當船舶聚集在某一區(qū)域時,在電子海圖上繪制出來的船舶標號也會聚集在一起,這些船舶對應的電子標牌默認情況下也聚集在一起,這就導致工作人員無法分清標牌上顯示的信息。
[0003]目前解決標牌遮蔽的方法主要是為用戶提供人工標牌拖動的功能。用戶可以用鼠標逐次拖動聚集在一起的船舶標牌到電子海圖上的空閑區(qū)域,使得標牌不再聚集在一起??臻e區(qū)域是指電子海圖上沒有分布船舶或標牌的區(qū)域,或者分布較少的區(qū)域。但是這種方法有兩個不足之處。一、當聚集在一起的船舶標牌很多時,逐個手動拖動標牌費時費力,此外隨著船舶的航行,以及用戶對電子海圖的漫游操作,分散開的船舶標牌的位置也會相應變化,可能產(chǎn)生新的聚集,那么用戶需要再次重復逐個拖動標牌的過程,過于繁瑣;二、手動拖動標牌,標牌的位置往往比較隨意,排列并不整齊,既不美觀。
[0004]VTS臺位顯示軟件收到船舶航跡報文(包括船舶名稱、類型、國籍、經(jīng)瑋度位置、方向、航速等信息),在內存中維護一張船舶航跡的列表,每艘船舶對象中包括與之對應的電子標牌信息,并且在軟件加載的S57標準的電子海圖上,將這些船舶航跡按對應的經(jīng)瑋度位置展現(xiàn)出來。船舶對應的電子標牌也默認展示在船舶附近。隨著船舶的移動、地圖的漫游,船舶有可能聚集在一起,對應的電子標牌也隨之聚集在一起。
【發(fā)明內容】
[0005]發(fā)明目的:本發(fā)明所要解決的技術問題是針對現(xiàn)有技術的不足,提供一種電子海圖中船舶電子標牌的自動排列方法。
[0006]本發(fā)明針對這種情況進行處理,公開了一種電子海圖中船舶電子標牌的自動排列方法,包括如下步驟:
[0007]步驟1,對用戶框選中的船舶電子標牌,在計算機內存中生成框選標牌所對應的船舶信息結構體列表,提取船舶信息結構體列表匹配船舶電子標牌排列模式;
[0008]步驟2,對用戶框選中的聚集在一起的船舶電子標牌列表進行排序;
[0009]步驟3,遍歷船舶電子標牌列表,根據(jù)步驟I中獲得的匹配模式重排船舶電子標牌;
[0010]步驟4,處理完所有船舶電子標牌位置后自動重新繪制船舶電子標牌。
[0011]其中,步驟I包括:
[0012]步驟1-1,用戶使用標牌框選功能,框選中船舶電子標牌,根據(jù)選中的船舶電子標牌找到其對應的船舶信息,在計算機內存中生成一個船舶信息結構體列表,船舶信息結構體中包括船舶當前的經(jīng)瑋度位置以及船舶電子標牌結構體信息;
[0013]步驟1-2,求出船舶符號位置在屏幕分布的最小外接矩形區(qū)域:
[0014]船舶符號是指表示船舶航跡位置的符號,軟件截圖的中三角符號。遍歷船舶符號的屏幕坐標的橫坐標X值和縱坐標Y值,記錄橫坐標的最小值X1、縱坐標的最小值Y1和橫坐標的最大值X2、縱坐標的最大值y2,如果下一個船舶符號的橫坐標X值小于當前船舶符號橫坐標最小值X1,則更新最小值X1,如果橫坐標X值大于當前最大值x2,則更新最大值x2,如果下一個船舶符號的縱坐標y值小于當前船舶符號縱坐標最小值Y1,則更新最小值丫工,如果縱坐標y值大于當前最大值y2,則更新最大值y2,最后根據(jù)矩形左上角點(U1)和矩形右下角點(χ2,y2)求出該矩形區(qū)域的寬度(X2-Xi)和高度(y2_yi);
[0015]步驟1-3,根據(jù)框選船舶電子標牌的累積高度匹配排列模型:
[0016]遍歷船舶電子標牌結構體中的標牌高度屬性,并計算出累積高度值Hsum,累計高度值Hsum等于每一個標牌的高度值相加,并加上每兩個標牌之間的間隔常數(shù),本發(fā)明中該常數(shù)取值為5 ;計算屏幕右側可利用區(qū)域的最大高度H1,氏為矩形區(qū)域高度(y2_yi),矩形區(qū)域底部到屏幕下邊框的高度dy2,以及一個常量Cly1的三者之和,單位為屏幕像素,本發(fā)明中常量(Iy1取值為80,單位為像素。
[0017]如果累積高度值Hsum小于右側可利用區(qū)域的最大高度H1,那么匹配單列排列模式;
[0018]如果累積高度值Hsum大于屏幕右側可利用區(qū)域的最大高度H1,那么對超出的高度值Hex進行判斷,如果超出的高度值Hex小于第一閾值,第一閾值為矩形區(qū)域高度的一半(Y2-Y1)/2與矩形區(qū)域底部到屏幕下邊框的高度dy2之和,那么匹配雙列排列模式一;
[0019]如果超出的高度值Hex大于第二閾值,第二閾值為矩形區(qū)域高度的一半(y2_yi)/2與矩形區(qū)域底部到屏幕下邊框高度dy2之和,但小于矩形區(qū)域高度(y2_yi)與矩形區(qū)域底部到屏幕下邊框高度dy2之和,那么匹配雙列排列模式二 ;
[0020]如果超出的高度值Hex大于矩形區(qū)域高度(y2_yi)與矩形區(qū)域底部到屏幕下邊框高度dy2之和,那么匹配底部追加單行排列模式。
[0021]步驟1-3中所述屏幕右側可利用區(qū)域的最大高度氏為矩形區(qū)域高度(y2_yi),矩形區(qū)域底部到屏幕下邊框的高度dy2,以及一個常量Cly1的三者之和,本發(fā)明中dy i取值為80,單位為屏幕像素;
[0022]步驟2包括:
[0023]步驟2-1,以船舶信息結構體中存儲的船舶瑋度位置為關鍵值,對船舶信息結構體列表進行希爾排序,使得瑋度值大的船舶信息結構體排在表列前部,瑋度值小的標牌排在表列后部。
[0024]步驟3包括:
[0025]步驟3-1,如果是單列排列模式,將船舶電子標牌排列在船舶符號右側,以船舶符號外接矩形的寬度的一半為間隔,確定右側船舶電子標牌區(qū)的起始橫坐標,以船舶符號外接矩形上部縱坐標Y1減去常數(shù)值dy i作為右側船舶電子標牌區(qū)的縱坐標,本發(fā)明中dy 1取值為80,確定第一個船舶電子標牌的位置,然后沿第一個船舶電子標牌下方依次排列下一個船舶電子標牌,完成船舶電子標牌重新排列,本發(fā)明中標牌間的間隔常數(shù)為5像素;
[0026]步驟3-2,如果是雙列排列模式一,則在完成步驟3-1的基礎上,對超出高度的船舶電子標牌進行第二列排列,遍歷超出高度的船舶電子標牌,確定船舶電子標牌的最大寬度,在船舶符號外接矩形左側,以船舶符號外接矩形的寬度的一半為間隔并加上標牌最大寬度,確定第二列起始位置的橫坐標,以船舶符號外接矩形高度的一半作為第二列起始位置的縱坐標,確定第一個船舶電子標牌的屏幕位置,沿第一個船舶電子標牌下方依次排列下一個船舶電子標牌,完成船舶電子標牌重新排列,本發(fā)明中標牌間的間隔常數(shù)為5像素;
[0027]步驟3-3,如果是雙列排列模式二,則在完成步驟3-1的基礎上,對超出高度的船舶電子標牌進行第二列排列,以船舶符號外接矩形的寬度的一半為間隔并加上標牌最大寬度,確定第二列起始位置的橫坐標,以船舶符號外接矩形上部縱坐標Y1減去常數(shù)值dy i,本發(fā)明中該常數(shù)取值為80。作為右側船舶電子標牌區(qū)的縱坐標,從而確定第一個船舶電子標牌的屏幕位置,然后沿第一個船舶電子標牌下方依次排列下一個船舶電子標牌,完成船舶電子標牌重新排列,本發(fā)明中標牌間的間隔常數(shù)為5像素;
[0028]步驟3-4,如果是底部追加單行排列模式,則在完成步驟3-2的基礎上,對超出高度的船舶電子標牌進行底部追加單行排列:對剩余船舶電子標牌進行以船舶信息結構體中存儲的船舶經(jīng)度為關鍵值的希爾排序生成新的待排列序列