2.2.16 電子海圖系統(tǒng)解析及開發(fā) 海圖顯示 - 符號(hào)化指令:顯示條件符號(hào)

條件符號(hào)一般需要根據(jù)用戶設(shè)置動(dòng)態(tài)繪制敦跌,如非雙色顯示時(shí)挤渐,海洋會(huì)根據(jù)用戶設(shè)備的等深線痪欲,被分成四部分外里,每部分有著不同的顏色。因此每一條件符號(hào)的流程都是獨(dú)立的螟够,其擁有唯一的流程名桥胞。

條件符號(hào)命令

參數(shù)說明:

  • PROCNAME ?流程名
    ?????流程名由8位字母或數(shù)字組成导俘,前6位字母代表流程所涉及的物標(biāo)目錄名治笨,后2位數(shù)字代表版本號(hào)驳概。

示例:CS(DEPARE02)
含義:執(zhí)行名為DEPARE02的條件符號(hào)流程,該流程作用對(duì)象為深水區(qū)(DEPARE)旷赖。

現(xiàn)有的條件符號(hào)流程

S-52顯示庫中有如下流程顺又,流程名后2位數(shù)字代表當(dāng)前版本號(hào)。

流程名 適用對(duì)象
CLRLIN01 安全導(dǎo)航線
DATCVR02 數(shù)據(jù)覆蓋范圍等孵,比例尺邊界稚照,超比例尺顯示
DEPARE02 水深區(qū)顏色填充和疏浚區(qū)圖案填充
DEPCNT03 等深線,包括安??全等深線
DEPVAL02 水深值
LEGLIN03 計(jì)劃航線
LIGHTS05 燈標(biāo)燈質(zhì)、光弧及范圍
LITDSN01 燈標(biāo)的描述說明
OBSTRN06 障礙物和巖石
OWNSHP02 本船
PASTRK01 航跡
QUAPOS01 位置精度
QUALIN01 線物標(biāo)的位置精度
QUAPNT02 點(diǎn)和面物標(biāo)的位置精度
RESARE03 限制區(qū)域
RESTRN01 限制區(qū)域的入口程序
RESCSP02 限制區(qū)域–屬性RESTRN
SAFCON01 等深線標(biāo)簽
SLCONS03 海岸線果录,包括位置精度上枕。
SEABED01 水深區(qū)的顏色填充
SNDFRM03 水深點(diǎn)符號(hào)化,包括安全水深
SOUNDG02 水深點(diǎn)繪制的入口程序
SYMINSnn 繪制由IMO指定符號(hào)
TOPMAR01 燈標(biāo)的項(xiàng)標(biāo)
UDWHAZ04 孤立危險(xiǎn)物
VESSEL02 本船以外的船只
VRMEBL02 VRM和EBL
WRECKS04 沉船

S-52標(biāo)準(zhǔn)中的條件流程可能包含子流程弱恒,子流程可以被共享辨萍。

流程名 物標(biāo) 子流程名
DATCVR M_COVR(a), M_CSCL(a)
DEPARE DEPARE(a), DRGARE(a) RESCSP, SEABED, SAFCON
DEPCNT DEPARE(l), DEPCNT(l) SAFCON
LIGHTS LIGHTS(p) LITDSN
OBSTRN OBSTRN(pla), UWTROC(p) DEPVAL, QUAPNT, SNDFRM, UDWHAZ
QUAPOS LNDARE(pl), COALNE(l) QUAPNT, QUALIN
RESARE RESARE(a)
RESTRN ACHARE(a), CBLARE(a), DMPGRD(a), DWRTPT(a),
FAIRWY(a), ICNARE(a), ISTZNE(a), MARCUL(a),
MIPARE(a), OSPARE(a), PIPARE(a), PRCARE(a),
SPLARE(a), SUBTLN(a), TESARE(a), TSSCRS(a),
TSSLPT(a), TSSRON(a)
RESCSP
SOUNDG SOUNDG(p) SNDFRM
WRECKS WRECKS(pa) DEPVAL, QUAPNT, SNDFRM, UDWHAZ

物標(biāo)括號(hào)中的字母代表:p = 點(diǎn)物標(biāo);l = 線物標(biāo)斤彼;a = 面物標(biāo)分瘦。
如:繪制水深點(diǎn)針對(duì)的是點(diǎn)物標(biāo)SOUNDG蘸泻,具體流程為條件符號(hào)流程SOUNDG琉苇,其還使用到子流程SNDFRM

示例

需要針對(duì)每一條件符號(hào)流程單獨(dú)編碼悦施,如水深點(diǎn)是以符號(hào)形式而非文本形式顯示在電子海圖中的并扇。條件符號(hào)流程SOUNDG:

水深點(diǎn)顯示流程
水深值符號(hào)化

條件符號(hào)流程SOUNDG的邏輯很簡單:遍歷本物標(biāo)的水深點(diǎn)信息,將水深值傳給子流程SNDFRM抡诞,將返回的符號(hào)數(shù)組顯示在水深點(diǎn)處穷蛹。
子流程SNDFRM,根據(jù)水深值(是否大于安全水深)添加符號(hào)前緣昼汗,根據(jù)自身物標(biāo)特點(diǎn)(水深點(diǎn)性質(zhì)及精度)肴熏,添加相應(yīng)修飾符號(hào)。然后將水深值拆分顷窒,按照一定規(guī)則找到相應(yīng)的符號(hào)蛙吏。最后將符號(hào)號(hào)組成的數(shù)組返回給上層流程。

安全水深由用戶設(shè)置鞋吉,默認(rèn)值為30米鸦做。

編碼實(shí)現(xiàn)

添加全局設(shè)置,存在用戶設(shè)定的安全水深:

    public static class MySettings
    {
        // ...
        internal static double SafetyDepth = 30;                        //用戶設(shè)定的安全水深
    }

對(duì)物標(biāo)做預(yù)處理谓着,將位置信息組裝成路徑泼诱,水深信息轉(zhuǎn)化成浮點(diǎn)數(shù)組,并取出物標(biāo)屬性'TECSOU'(測深所使用的技術(shù))赊锚,‘STATUS’(位置狀態(tài))治筒,‘QUASOU’(測深質(zhì)量),‘QUAPOS’(位置質(zhì)量)舷蒲,將其傳入函數(shù)矢炼。

TECSOU STATUS QUASOU QUAPOS
1 : found by echo-sounder
2 : found by side scan sonar
3 : found by multi-beam
4 : found by diver
5 : found by lead-line
6 : swept by wire-drag
7 : found by laser
8 : swept by vertical acoustic system
9 : found by electromagnetic sensor
10 : photogrammetry
11 : satellite imagery
12 : found by levelling
13 : swept by side-scan sonar
14 : computer generated
1 : permanent
2 : occasional
3 : recommended
4 : not in use
5 : periodic/intermittent
6 : reserved
7 : temporary
8 : private
9 : mandatory
10 : destroyed/ruined
11 : extinguished
12 : illuminated
13 : historic
14 : public
15 : synchronized
16 : watched
17 : un-watched
18 : existence doubtful
1 : depth known
2 : depth unknown
3 : doubtful sounding
4 : unreliable sounding
5 : no bottom found at value shown
6 : least depth known
7 : least depth unknown,
safe clearance at value shown
8 : value reported (not surveyed)
9 : value reported (not confirmed)
10 : maintained depth
11 : not regularly maintained

1 : surveyed
2 : unsurveyed
3 : inadequately surveyed
4 : approximate
5 : position doubtful
6 : unreliable
7 : reported (not surveyed)
8 : reported (not confirmed)
9 : estimated
10 : precisely known
11 : calculated
        public static void DrawCS_SOUNDG(SKCanvas ca, SKPath path, double[] depths,
            string tecsou, string status, string quasou, string quapos)
        {
            for (int i = 0; i < depths.Length; i++)
            {
                //轉(zhuǎn)入水深點(diǎn),返回符號(hào)數(shù)組
                var symbols = DrawCS_SNDFRM(depths[i], tecsou, status, quasou, quapos); 

                //依次繪制
                foreach (var sy in symbols)
                {
                    DrawSymbolAtXY(ca, path.Points[i].X, path.Points[i].Y, sy);
                }
            }
        }

        public static List<string> DrawCS_SNDFRM(double depth,
            string tecsou, string status, string quasou, string quapos)
        {
            var symbols = new List<string>();
            var prefix = depth < MySettings.SafetyDepth ? "SOUNDS" : "SOUNDG"; //前綴

            if (tecsou == "6") //掃海水深
            {
                symbols.Add(prefix + "B1");
            }

            if(status == "18") //疑存
            {
                symbols.Add(prefix + "C2");
            }
            else if (quasou == "3" || quasou == "4" || quasou == "5" || quasou == "8" || quasou == "9")
            {
                symbols.Add(prefix + "C2");
            }
            else if (quapos == "2" || quapos == "3" || quapos == "4" || quapos == "5" || quapos == "6" 
                || quapos == "7" || quapos == "8" || quapos == "9")
            {
                symbols.Add(prefix + "C2");
            }

            if (depth < 0)
            {
                symbols.Add(prefix + "A1");
            }
            else if (depth < 10)
            {
                var f = (int)depth;
                var s = (int)(depth * 10 % 10);
                symbols.Add(prefix + (10 + f).ToString());
                symbols.Add(prefix + (50 + s).ToString());
            }
            else if (depth < 31)
            {
                var f = (int)(depth / 10);
                var s = (int)(depth % 10);
                var t = (int)(depth * 10 % 10);
                symbols.Add(prefix + (20 + f).ToString());
                symbols.Add(prefix + (10 + s).ToString());
                symbols.Add(prefix + (50 + t).ToString());
            }
            else if (depth < 100)
            {
                var f = (int)(depth / 10);
                var s = (int)(depth % 10);
                symbols.Add(prefix + (10 + f).ToString());
                symbols.Add(prefix + s.ToString("00"));
            }
            else if (depth < 1000)
            {
                var f = (int)(depth / 100);
                var s = (int)(depth % 100 / 10);
                var t = (int)(depth % 10);
                symbols.Add(prefix + (20 + f).ToString());
                symbols.Add(prefix + (10 + s).ToString());
                symbols.Add(prefix + t.ToString("00"));
            }
            else if (depth < 10000)
            {
                var f = (int)(depth / 1000);
                var s = (int)(depth % 1000 / 100);
                var t = (int)(depth % 100 / 10);
                var l = (int)(depth % 10);
                symbols.Add(prefix + (20 + f).ToString());
                symbols.Add(prefix + (10 + s).ToString());
                symbols.Add(prefix + t.ToString("00"));
                symbols.Add(prefix + (40 + l).ToString());
            }
            else
            {
                var f = (int)(depth / 10000);
                var s = (int)(depth % 10000 / 1000);
                var t = (int)(depth % 1000 / 100);
                var l = (int)(depth % 100 / 10);
                var m = (int)(depth % 10);
                symbols.Add(prefix + (30 + f).ToString());
                symbols.Add(prefix + (20 + s).ToString());
                symbols.Add(prefix + (10 + t).ToString());
                symbols.Add(prefix + l.ToString("00"));
                symbols.Add(prefix + (40 + m).ToString());
            }

            return symbols;
        }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末阿纤,一起剝皮案震驚了整個(gè)濱河市句灌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖胰锌,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骗绕,死亡現(xiàn)場離奇詭異,居然都是意外死亡资昧,警方通過查閱死者的電腦和手機(jī)酬土,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來格带,“玉大人撤缴,你說我怎么就攤上這事∵闯” “怎么了屈呕?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棺亭。 經(jīng)常有香客問我虎眨,道長,這世上最難降的妖魔是什么镶摘? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任嗽桩,我火速辦了婚禮,結(jié)果婚禮上凄敢,老公的妹妹穿的比我還像新娘碌冶。我一直安慰自己,他們只是感情好涝缝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布扑庞。 她就那樣靜靜地躺著,像睡著了一般俊卤。 火紅的嫁衣襯著肌膚如雪嫩挤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天消恍,我揣著相機(jī)與錄音岂昭,去河邊找鬼。 笑死狠怨,一個(gè)胖子當(dāng)著我的面吹牛约啊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播佣赖,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恰矩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了憎蛤?” 一聲冷哼從身側(cè)響起外傅,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤纪吮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后萎胰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碾盟,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年技竟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冰肴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡榔组,死狀恐怖熙尉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情搓扯,我是刑警寧澤检痰,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站擅编,受9級(jí)特大地震影響攀细,放射性物質(zhì)發(fā)生泄漏箫踩。R本人自食惡果不足惜爱态,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望境钟。 院中可真熱鬧锦担,春花似錦、人聲如沸慨削。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缚态。三九已至磁椒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間玫芦,已是汗流浹背浆熔。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留桥帆,地道東北人医增。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像老虫,于是被迫代替她去往敵國和親叶骨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容