2.1.11 電子海圖系統(tǒng)解析及開發(fā) 海圖解析 - 物標(biāo)屬性

與物標(biāo)目錄數(shù)據(jù)字典類似,S-57附錄A第二章是物標(biāo)屬性的數(shù)據(jù)字典丹泉。

物標(biāo)屬性實(shí)例

圖中顯示情萤,屬性浮標(biāo)形狀,首字母縮寫為BOYSHP摹恨,代碼4筋岛,數(shù)據(jù)類型為枚舉型,取值范圍為1~8晒哄,分別對(duì)應(yīng)錐形睁宰、鑵形、球形揩晴、柱形勋陪、桿形、桶形硫兰、超大型浮標(biāo)诅愚、冰區(qū)浮標(biāo),各取值的具體定義也簡(jiǎn)要列出。

每個(gè)屬性用如下標(biāo)準(zhǔn)格式項(xiàng)目定義(指定):

  • 屬性:屬性名稱(Buoy shape 浮標(biāo)形狀)违孝;
  • 首字母組合詞:屬性的六個(gè)字符代碼(BOYSHP)刹前;
  • 代碼:數(shù)據(jù)編碼為整數(shù)(4:用整數(shù)代替六字母縮寫,能減小文件大写粕!)喇喉;
  • 屬性值類型:表示屬性值類型的單字符代碼:
    • 枚舉型 E:期望輸入值從規(guī)定的屬性值表中選擇,必須選定一個(gè)正確的值校坑;
    • 列表型 L:期望輸入是從預(yù)定的屬性值列表中選出一個(gè)或多個(gè)值拣技,當(dāng)用多個(gè)數(shù)值時(shí),它們必須用逗號(hào)(,)分開耍目,但在特殊情況下膏斤,也可用斜杠(/)分隔;
    • 浮點(diǎn)型 F:期望輸入是具有限定范圍邪驮、分辨率莫辨、單位和格式的浮點(diǎn)數(shù)值;
    • 整數(shù)型 I:期望輸入是具有限定范圍毅访、單位和格式的整數(shù)值沮榜;
    • 編碼字符型串 A:期望輸入是在指定格式中的ASCII字符串,信息是按照規(guī)定的代碼系統(tǒng)編碼的喻粹,如國(guó)籍將由國(guó)際標(biāo)準(zhǔn)化組織(ISO)3166規(guī)定的由兩個(gè)字母字段編碼蟆融;
    • 任意字符型 S:期望輸入是自由格式字母數(shù)字混合字符串,可以是正文或圖形文件的文件名守呜;
  • 期望輸入:
    • 對(duì)于E和L型屬性振愿,要給出帶有相互關(guān)聯(lián)、特殊規(guī)定和確切含義的一組標(biāo)識(shí)號(hào)列表弛饭;
    • 對(duì)A冕末、F、I和S型屬性侣颂,期望輸入與其類型定義相同档桃;
    • 如物標(biāo)類別為未知,則用零長(zhǎng)度屬性值編碼憔晒,例如顏色COLOUR▽(其中▽為分區(qū)分隔符)藻肄。
  • 定義:屬性的定義或在E或L屬性類型情況下,每個(gè)屬性值的定義拒担;
  • 參考:
    • INT 1:《國(guó)際海圖系列INT 1 - 海圖所用符號(hào)嘹屯、縮寫、名詞》中的紙質(zhì)海圖特征編號(hào)是定義物標(biāo)類的主要指南之一从撼;
    • M-4:指《IHO海圖編繪規(guī)范》中的相應(yīng)章節(jié)號(hào)州弟。M-4是定義和屬性的另一指南;
    • 最小值:是指浮點(diǎn)和整數(shù)類型屬性期望輸入的最小值;
    • 最大值:是指浮點(diǎn)和整數(shù)類型屬性期望輸入的最大值婆翔;
    • 備注:提供更進(jìn)一步的說(shuō)明和注釋拯杠。

結(jié)合物標(biāo)目錄與物標(biāo)屬性字典數(shù)據(jù),即可解讀出物標(biāo)的所攜帶的信息啃奴。以錨地(ACHARE)為例:

屬性代碼 屬性類別 屬性值類型 屬性名稱及含義
CATACH A L 錨地類型:取值1~10潭陪,分別代表不同類型錨地,如2=深水錨地
DATEND A A 終止日期:若當(dāng)前日期在該日期之后最蕾,則此物標(biāo)不再顯示
DATSTA A A 起始日期:若當(dāng)前日期在該日期之前依溯,則此物標(biāo)不再顯示
NOBJNM A S 物標(biāo)名稱:用本地語(yǔ)言表示
OBJNAM A S 物標(biāo)名稱:用英語(yǔ)表示
PEREND A A 定期終止日期:與DATEND類似
PERSTA A A 定期起始日期:與DATSTA類似
RESTRN A L 限制信息:取值1~27,分別代表不同限制信息瘟则,如3=禁止捕魚
STATUS A L 使用狀態(tài):取值1~18誓沸,分別代表不同的使用狀態(tài),如7=臨時(shí)性的
INFORM B S 物標(biāo)信息:用英語(yǔ)表示
NINFOM B S 物標(biāo)信息:用本地語(yǔ)言表示
NTXTDS B S 附件信息:存儲(chǔ)的是附件的名稱壹粟,具體信息在附件中,用本地語(yǔ)言表示
SCAMAX B I 最大比例尺:若當(dāng)前比例尺大于該值宿百,則此物標(biāo)不再顯示
SCAMIN B I 最小比例尺:若當(dāng)前比例尺小于該值趁仙,則此物標(biāo)不再顯示
TXTDSC B S 附件信息:存儲(chǔ)的是附件的名稱,具體信息在附件中垦页,用英語(yǔ)表示
RECDAT C A 記錄日期:該物標(biāo)被獲取雀费、編輯或刪除的日期
RECIND C A 記錄指示:用于指示數(shù)據(jù)輸入和編碼的流程
SORDAT C A 數(shù)據(jù)來(lái)源日期:原數(shù)據(jù)生產(chǎn)日期,如測(cè)量日期
SORIND C A 數(shù)據(jù)來(lái)源指示:關(guān)于物標(biāo)來(lái)源的信息

編制物標(biāo)屬性數(shù)據(jù)字典

S-57中所有物標(biāo)屬性都具有一個(gè)可讀性強(qiáng)的名稱痊焊、全局唯一的六字母縮寫盏袄、全局唯一的編號(hào)。若屬性值類型為枚舉型或列表型薄啥,會(huì)給出全部可選項(xiàng)辕羽。仿照物標(biāo)屬性特點(diǎn),新建文本文件S57Attributes將S-57物標(biāo)屬性中的條目錄入垄惧,格式如下:

[
  Attribute: Agency responsible for production
  Acronym: AGENCY
  Code: 1
  Attribute type: A
],
[
  Attribute: Beacon shape
  Acronym: BCNSHP
  Code: 2
  Attribute type: E
    1 : stake, pole, perch, post  
    2 : withy  
    3 : beacon tower  
    4 : lattice beacon  
    5 : pile beacon
    6 : cairn  
    7 : buoyant beacon  
  enum end
],
... //其他條目
[
  Attribute: Quality of position
  Acronym: QUAPOS
  Code: 402
  Attribute type: E
    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
  enum end
]

讀取物標(biāo)屬性

將字典文件以資源文件的形式添加進(jìn)項(xiàng)目S57Parser刁愿,仿照屬性目錄條目,新建類S57Attribute到逊。然后新建單例模式的類S57Attributes铣口,對(duì)外提供編號(hào)或縮寫的索引器,以快速查詢屬性的詳細(xì)信息觉壶。如:獲取編號(hào)為1的屬性S57Attributes.Instance[1]脑题,獲取縮寫為"AIRARE"的物標(biāo)S57Attributes.Instance["BCNSHP"]

    //屬性
    public class S57Attribute
    {
        public string Attribute;            //屬性名
        public string Acronym;              //縮寫
        public UInt16 Code;                 //編號(hào)
        public string AttributeType;        //類型

        //對(duì)于枚舉型和列表型屬性的可選選項(xiàng)
        public Dictionary<UInt16, string> Options;
    }

    //物標(biāo)屬性
    public sealed class S57Attributes
    {
        private static readonly S57Attributes instance = new S57Attributes();

        //顯示的static 構(gòu)造函數(shù)
        static S57Attributes() { }

        private S57Attributes() { }

        public static S57Attributes Instance => instance;

        Dictionary<UInt16, S57Attribute> codeAttrs = new Dictionary<UInt16, S57Attribute>();
        Dictionary<string, S57Attribute> acronymAttrs = new Dictionary<string, S57Attribute>();

        public S57Attribute this[UInt16 code]
        {
            get
            {
                LoadResource();
                return codeAttrs[code];
            }
        }

        public S57Attribute this[string acronym]
        {
            get
            {
                LoadResource();
                return acronymAttrs[acronym];
            }
        }

        private void LoadResource()
        {
            if (codeAttrs.Count > 0) return;  //首次才需要加載資源文件

            var lines = Encoding.ASCII.GetString(Properties.Resources.S57Attributes).Split('\n');

            S57Attribute attr = null;
            for (int i = 0; i < lines.Length; i++)
            {
                if (string.IsNullOrWhiteSpace(lines[i])) continue;
                if (lines[i][0] == '[')  //開始
                {
                    attr = new S57Attribute();
                    continue;
                }
                if (lines[i][0] == ']') //結(jié)束
                {
                    codeAttrs.Add(attr.Code, attr);
                    acronymAttrs.Add(attr.Acronym, attr);
                    continue;
                }

                if (lines[i].Contains(":"))
                {
                    var ls = lines[i].Split(':');
                    var column = ls[0].Trim();
                    if (column == "Attribute") attr.Attribute = ls[1].Trim();
                    else if (column == "Acronym") attr.Acronym = ls[1].Trim();
                    else if (column == "Code") attr.Code = UInt16.Parse(ls[1].Trim());
                    else if (column == "Attribute type") attr.AttributeType = ls[1].Trim();
                    else
                    {
                        if(attr.AttributeType == "L" || attr.AttributeType == "E")
                        {
                            if (attr.Options == null) attr.Options = new Dictionary<ushort, string>();
                            attr.Options.Add(UInt16.Parse(column), ls[1].Trim());
                        }
                    }
                }
                else
                {
                    continue;
                }
            }
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末铜靶,一起剝皮案震驚了整個(gè)濱河市叔遂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異题画,居然都是意外死亡似枕,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門报账,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事幔嫂。” “怎么了誊薄?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵履恩,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我呢蔫,道長(zhǎng)切心,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任片吊,我火速辦了婚禮绽昏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘俏脊。我一直安慰自己全谤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布爷贫。 她就那樣靜靜地躺著认然,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漫萄。 梳的紋絲不亂的頭發(fā)上卷员,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音腾务,去河邊找鬼子刮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛窑睁,可吹牛的內(nèi)容都是我干的挺峡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼担钮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼橱赠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起箫津,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤狭姨,失蹤者是張志新(化名)和其女友劉穎宰啦,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饼拍,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赡模,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了师抄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漓柑。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖叨吮,靈堂內(nèi)的尸體忽然破棺而出辆布,到底是詐尸還是另有隱情,我是刑警寧澤茶鉴,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布锋玲,位于F島的核電站,受9級(jí)特大地震影響涵叮,放射性物質(zhì)發(fā)生泄漏惭蹂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一割粮、第九天 我趴在偏房一處隱蔽的房頂上張望盾碗。 院中可真熱鬧,春花似錦穆刻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至幽歼,卻和暖如春朵锣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背甸私。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工诚些, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人皇型。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓诬烹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親弃鸦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绞吁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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