• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Style符號(hào)庫的存取研究及符號(hào)選擇器實(shí)現(xiàn)

      2011-11-15 03:30:00樊文鋒葉芳宏
      測繪通報(bào) 2011年11期
      關(guān)鍵詞:選擇器序列化字段

      樊文鋒,王 懷,葉芳宏

      (國家測繪地理信息局衛(wèi)星測繪應(yīng)用中心,北京100830)

      基于Style符號(hào)庫的存取研究及符號(hào)選擇器實(shí)現(xiàn)

      樊文鋒,王 懷,葉芳宏

      (國家測繪地理信息局衛(wèi)星測繪應(yīng)用中心,北京100830)

      在ArcGIS Engine的應(yīng)用開發(fā)中,無法直接利用Style符號(hào)庫文件。通過對(duì)ArcGIS符號(hào)庫文件存儲(chǔ)結(jié)構(gòu)的剖析,詳細(xì)分析符號(hào)存取的接口方法,并在此基礎(chǔ)上開發(fā)出針對(duì)Style符號(hào)庫文件的符號(hào)選擇器組件,且該組件能夠在ArcGIS Engine的應(yīng)用開發(fā)系統(tǒng)中直接使用。

      符號(hào);序列化;重構(gòu)

      一、引 言

      符號(hào)是一種物質(zhì)的對(duì)象、屬性或過程,可用它來表示抽象的概念。符號(hào)是地圖的語言單位,是可視化表達(dá)地理數(shù)據(jù)信息內(nèi)容的基礎(chǔ)工具。地圖符號(hào)是符號(hào)應(yīng)用于地圖的一個(gè)子類,具有語義、語法和語用規(guī)則[1]。地形信息符號(hào)庫是地圖符號(hào)的匯集系統(tǒng),它利用計(jì)算機(jī)進(jìn)行管理,以實(shí)現(xiàn)符號(hào)數(shù)據(jù)的存儲(chǔ)、檢索和更新[2]。隨著地理信息系統(tǒng)技術(shù)和理論的發(fā)展及其在各行業(yè)的廣泛應(yīng)用,地理信息符號(hào)化表現(xiàn)形式已經(jīng)發(fā)生了巨大的變化,其功能也由認(rèn)知地圖空間為主擴(kuò)展至動(dòng)態(tài)導(dǎo)航、輔助決策。

      ArcGIS針對(duì)地理數(shù)據(jù)的點(diǎn)、線、面要素提供了不同類型的符號(hào),用戶可以選用任意一種類型符號(hào)對(duì)地理數(shù)據(jù)進(jìn)行符號(hào)化顯示。而且ArcGIS符號(hào)設(shè)計(jì)完全是在ArcGIS桌面環(huán)境ArcMap下實(shí)現(xiàn),以Style庫文件存儲(chǔ)。但是基于ArcGIS Engine的應(yīng)用開發(fā)中,采用的是ServerStyle符號(hào)文件,無法直接使用ArcGIS桌面環(huán)境下設(shè)計(jì)的Style符號(hào)文件,只有通過工具M(jìn)akeServerStyle把Style符號(hào)庫文件制作成ServerStyle符號(hào)庫文件才能供其使用。但在實(shí)際應(yīng)用中,很多ArcGIS Engine應(yīng)用開發(fā)都希望能夠在系統(tǒng)中直接使用Style符號(hào)庫文件,而不需要通過第三方工具轉(zhuǎn)換。

      筆者通過研究剖析Style符號(hào)庫文件的存儲(chǔ)結(jié)構(gòu),編程開發(fā)了利用Style符號(hào)庫文件的選擇器組件,使得在ArcGIS Engine應(yīng)用開發(fā)中能夠直接使用Style符號(hào)庫文件。本文主要探討Style符號(hào)庫文件的存儲(chǔ)結(jié)構(gòu)、符號(hào)存儲(chǔ)接口以及符號(hào)選擇器的實(shí)現(xiàn)。

      二、Style符號(hào)庫文件存儲(chǔ)結(jié)構(gòu)

      Style符號(hào)庫文件實(shí)際上是小型關(guān)系型數(shù)據(jù)庫文件,其文件的擴(kuò)展名為*.style,可以將擴(kuò)展名更改為*.mdb后用微軟的Access軟件打開。

      數(shù)據(jù)庫中的每個(gè)表結(jié)構(gòu)都相同,每個(gè)表都是由ID、Name、Category、Object 4個(gè)字段組成。其中,ID字段是整型數(shù)據(jù)類型,是該表的關(guān)鍵字,保持記錄的唯一性;Name字段是字符串類型,用來命名符號(hào)的名稱,在對(duì)地理數(shù)據(jù)符號(hào)化的過程中,可以將地理數(shù)據(jù)的屬性信息與該字段進(jìn)行自動(dòng)符號(hào)化;Category字段是字符串類型,用來表示符號(hào)的分類,可以通過該字段進(jìn)行分類查詢過濾;Object字段是OLE類型,用來存儲(chǔ)符號(hào)的信息,該字段包含了符號(hào)的CLSID值和符號(hào)信息數(shù)據(jù),是通過符號(hào)序列化接口序列化后的二進(jìn)制數(shù)據(jù)流。在符號(hào)二進(jìn)制數(shù)據(jù)流中,前16字節(jié)是符號(hào)對(duì)象的CLSID值,是GUID數(shù)據(jù)類型,通過CLSID值可以創(chuàng)建符號(hào)對(duì)象;余下的數(shù)據(jù)流是符號(hào)信息數(shù)據(jù),包含了符號(hào)的顏色、大小、寬度、旋轉(zhuǎn)角度等信息,可通過序列化和反序列化實(shí)現(xiàn)存儲(chǔ)和讀取。

      數(shù)據(jù)庫中的每一張表對(duì)應(yīng)著ArcGIS符號(hào)中的一類符號(hào),數(shù)據(jù)庫中存儲(chǔ)ArcGIS基本的點(diǎn)、線、面、文本符號(hào)以及其他顏色、比例尺、圖例等符號(hào)[3]。

      三、Style符號(hào)接口分析

      從ArcGIS的應(yīng)用開發(fā)包中可以看出,實(shí)現(xiàn)符號(hào)的存儲(chǔ)、顯示以及符號(hào)的選擇主要由符號(hào)序列化結(jié)構(gòu)、基本的符號(hào)接口、符號(hào)庫的訪問接口以及符號(hào)庫文件等接口組成。以下將描述主要的接口及其實(shí)現(xiàn)方法。

      1.序列化接口

      序列化是將對(duì)象狀態(tài)轉(zhuǎn)換為可存儲(chǔ)的數(shù)據(jù)流格式的過程。與序列化相對(duì)的是反序列化,它將流轉(zhuǎn)換為對(duì)象。將這兩個(gè)過程結(jié)合起來,可以輕松地存儲(chǔ)和重構(gòu)數(shù)據(jù)。序列化接口主要是實(shí)現(xiàn)符號(hào)的存儲(chǔ)和重構(gòu),包括 IPersist、IStream、IPersistStream、IBlobStream、IMemoryBlobStream等主要接口。其中,IPersist、IStream、IPersistStream是微軟提供的數(shù)據(jù)流標(biāo)準(zhǔn)接口。IPersist是獲取對(duì)象的CLSID值的接口; IStream是對(duì)數(shù)據(jù)流進(jìn)行讀取、寫入以及移位等操作的接口;IPersistStream是根據(jù)加載和保存數(shù)據(jù)流的接口。而IBlobStream、IMemoryBlobStream兩個(gè)接口主要實(shí)現(xiàn)符號(hào)對(duì)象的存取。其中,IMemoryBlobStream繼承IBlobStream、IStream接口,并在IMemory-BlobStream接口的實(shí)現(xiàn)類中全部實(shí)現(xiàn)其接口的方法以及屬性,還可實(shí)現(xiàn)將符號(hào)對(duì)象序列化成二進(jìn)制數(shù)據(jù)流存儲(chǔ)和從二進(jìn)制數(shù)據(jù)流中反序列化重構(gòu)符號(hào)對(duì)象。

      2.基本符號(hào)接口

      ArcGIS提供了 ISymbol、IMarkerSymbol、ILine-Symbol、IFillSymbol以及ITextSymbol等基本符號(hào)對(duì)象接口,根據(jù)這些接口可再衍生出其他豐富的符號(hào)接口,如IPictureMarkerSymbol等。其中,ISymbol是符號(hào)對(duì)象根據(jù)圖形設(shè)備接口進(jìn)行繪制,所有的符號(hào)必須繼承該接口;IMarkerSymbol、ILineSymbol、IFill-Symbol和ITextSymbol分別是點(diǎn)、線、面、文本符號(hào)的基本接口,且定義了符號(hào)的大小、寬度、顏色、旋轉(zhuǎn)角度、字體等信息。其派生的符號(hào)對(duì)象接口必須繼承基本符號(hào)接口,其實(shí)現(xiàn)類中必須實(shí)現(xiàn)其方法和屬性。同時(shí),IMarkerSymbol、ILineSymbol、IFillSymbol和ITextSymbol派生接口的實(shí)現(xiàn)類必須實(shí)現(xiàn)IPersist、IPersistStream接口的方法和屬性,以實(shí)現(xiàn)符號(hào)對(duì)象的存取。

      3.符號(hào)庫訪問接口

      符號(hào)庫的訪問接口主要由IStyleGallery、IStyle-GalleryStorage和數(shù)據(jù)庫訪問ADO接口組成,用于實(shí)現(xiàn)符號(hào)對(duì)象序列化成二進(jìn)制數(shù)據(jù)流存儲(chǔ)到符號(hào)庫中,以及從符號(hào)庫中取出二進(jìn)制數(shù)據(jù)流重構(gòu)符號(hào)對(duì)象。IStyleGallery接口是應(yīng)用系統(tǒng)從符號(hào)庫中提供符號(hào)對(duì)象和將符號(hào)對(duì)象保存到符號(hào)庫中的接口; IStyleGalleryStorage接口是管理多個(gè)符號(hào)庫文件的接口,并能使符號(hào)選擇器同時(shí)能夠打開多個(gè)符號(hào)庫文件;ADO接口是對(duì)數(shù)據(jù)庫表進(jìn)行插入、查詢、更新操作的接口。

      四、Style符號(hào)選擇器實(shí)現(xiàn)

      以下將闡述如何對(duì)IMemoryBlobStream接口實(shí)現(xiàn)在內(nèi)存中進(jìn)行數(shù)據(jù)流操作,如何以點(diǎn)符號(hào)對(duì)象為例實(shí)現(xiàn)符號(hào)序列化存儲(chǔ)和反序列化重構(gòu),如何以C#語言編程實(shí)現(xiàn)符號(hào)選擇器組件。圖1是符號(hào)對(duì)象序列化重構(gòu)的流程圖。

      圖1 符號(hào)序列化重構(gòu)流程圖

      1.IMemoryBlobStream接口實(shí)現(xiàn)類

      IMemoryBlobStream接口的實(shí)現(xiàn)類中,繼承實(shí)現(xiàn)了IStream的方法及屬性。其實(shí)現(xiàn)過程如下:

      1)創(chuàng)建內(nèi)存存儲(chǔ)區(qū)域,根據(jù)數(shù)據(jù)的大小動(dòng)態(tài)調(diào)整內(nèi)存空間的大小。

      2)實(shí)現(xiàn)IStream接口的Write、Read、Seek方法,即分別是寫入內(nèi)存、讀取內(nèi)存、內(nèi)存地址移動(dòng)。

      3)實(shí)現(xiàn)ExportToVariant方法,從內(nèi)存數(shù)據(jù)空間導(dǎo)出符號(hào)對(duì)象序列化得數(shù)據(jù)流,實(shí)現(xiàn)符號(hào)對(duì)象序列化操作。

      4)實(shí)現(xiàn)ImportFromMemory方法,加載外部內(nèi)存空間的符號(hào)對(duì)象的數(shù)據(jù)流,供符號(hào)對(duì)象使用,實(shí)現(xiàn)反序列化操作。

      2.序列化存儲(chǔ)操作

      以簡單點(diǎn)符號(hào)為例實(shí)現(xiàn)符號(hào)對(duì)象的序列化存儲(chǔ),如用簡單點(diǎn)符號(hào)的成員變量描述符號(hào)的大小、顏色、旋轉(zhuǎn)角度屬性。下面用部分代碼描述序列化過程。

      1)簡單點(diǎn)符號(hào)的成員變量

      int m_lColor;

      double m_dAngle;

      double m_dSize;

      2)簡單點(diǎn)符號(hào)序列化存儲(chǔ)函數(shù)Save,其中參數(shù)pStream實(shí)現(xiàn)了IMemoryBlobStream接口的Write方法向內(nèi)存中寫入數(shù)據(jù)

      Void Save(IStream*pStream)

      3)簡單點(diǎn)符號(hào)反序列化重構(gòu)函數(shù)Load,其中,參數(shù) pStream實(shí)現(xiàn)了 IMemoryBlobStream接口的Read方法向內(nèi)存中讀取數(shù)據(jù)

      3.IStyleGallery接口實(shí)現(xiàn)類

      在IStyleGallery接口實(shí)現(xiàn)類中,主要的方法是實(shí)現(xiàn)對(duì)符號(hào)庫文件的加載、符號(hào)分類獲取以及符號(hào)存儲(chǔ),下面是實(shí)現(xiàn)該接口的主要方法和屬性。

      1)LoadStyle方法,即加載符號(hào)庫文件,對(duì)多個(gè)符號(hào)庫文件進(jìn)行管理。

      2)SaveStyle方法,即保存符號(hào)至符號(hào)庫文件。

      3)AddItem方法,即存儲(chǔ)符號(hào)。

      4)Categories屬性,即獲取符號(hào)的分類。

      5)Items屬性,即獲取符號(hào)對(duì)象。

      4.符號(hào)選擇器

      符號(hào)選擇器為ArcGIS Engine的應(yīng)用開發(fā)提供了一個(gè)可視化的符號(hào)對(duì)象瀏覽工具,應(yīng)用開發(fā)系統(tǒng)可以通過它預(yù)覽符號(hào)庫中的符號(hào)。符號(hào)選擇器可以根據(jù)當(dāng)前要符號(hào)化的地理數(shù)據(jù)屬性(點(diǎn)、線、面)從符號(hào)庫文件中加載全部的符號(hào),也可以加載指定的類別的符號(hào)。在ArcGIS桌面環(huán)境ArcMap下的符號(hào)選擇器,能夠?qū)x定的符號(hào)作適當(dāng)?shù)木庉嬓薷暮髮?duì)地理數(shù)據(jù)進(jìn)行符號(hào)化,同時(shí)也能對(duì)修改后的符號(hào)進(jìn)行保存處理。在本文中實(shí)現(xiàn)的符號(hào)選擇組件暫時(shí)不能夠提供選定符號(hào)對(duì)象的編輯修改以及保存操作。

      本文描述的符號(hào)選擇器組件采用C#語言開發(fā),實(shí)現(xiàn)了對(duì)Style符號(hào)庫文件的符號(hào)選取,并應(yīng)用在以ArcGIS Engine開發(fā)的某省級(jí)基礎(chǔ)地理信息數(shù)據(jù)庫管理系統(tǒng)中。圖2、圖3是已實(shí)現(xiàn)的該符號(hào)選擇器組件截圖。

      圖2 多邊形符號(hào)選擇

      圖3 線型符號(hào)選擇

      五、結(jié)束語

      本文通過對(duì)ArcGIS Style符號(hào)庫文件存儲(chǔ)結(jié)構(gòu)、符號(hào)庫文件讀取結(jié)構(gòu)和各級(jí)序列化接口的研究剖析,在Microsoft framework.NET環(huán)境下設(shè)計(jì)并開發(fā)了ArcGIS Style符號(hào)庫文件的符號(hào)選擇器組件。該組件是一個(gè)獨(dú)立的模塊,可以獨(dú)立運(yùn)行,也可嵌入到其他基于ArcGIS Engine開發(fā)的應(yīng)用系統(tǒng)中,能夠方便地滿足應(yīng)用系統(tǒng)直接調(diào)用Style符號(hào)庫文件的需求,具有較好的開放性和實(shí)用價(jià)值。

      [1] 劉梅.地圖符號(hào)學(xué)在數(shù)字制圖條件下的應(yīng)用[J].現(xiàn)代測繪,2009,32(4):59-61.

      [2] 王哲.ArcGIS軟件平臺(tái)上基于基礎(chǔ)地理信息數(shù)據(jù)庫的地圖符號(hào)化表達(dá)[J].現(xiàn)代測繪,2008,31(4):39-41.

      [3] 張俊嶺,熊衛(wèi)東,夏斌.基于ArcEngine的地圖符號(hào)制作工具研建[J].測繪科學(xué),2007,32(5):86-87.

      Research on Style Symbol Library Access and the Implementation of the Symbol Selector

      FAN Wenfeng,WANG Huai,YE Fanghong

      0494-0911(2011)11-0025-03

      P208

      B

      2011-08-24

      樊文鋒(1970—),男,河北棗強(qiáng)人,工程師,主要從事航空與航天攝影測量、遙感、地理信息系統(tǒng)應(yīng)用開發(fā)工作。

      猜你喜歡
      選擇器序列化字段
      靶通道選擇器研究與優(yōu)化設(shè)計(jì)
      圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
      如何建構(gòu)序列化閱讀教學(xué)
      甘肅教育(2020年14期)2020-09-11 07:58:36
      四選一數(shù)據(jù)選擇器74LS153級(jí)聯(lián)方法分析與研究
      電腦與電信(2017年6期)2017-08-08 02:04:22
      Java 反序列化漏洞研究
      雙四選一數(shù)據(jù)選擇器74HC153的級(jí)聯(lián)分析及研究
      作文訓(xùn)練微格化、序列化初探
      CNMARC304字段和314字段責(zé)任附注方式解析
      無正題名文獻(xiàn)著錄方法評(píng)述
      關(guān)于CNMARC的3--字段改革的必要性與可行性研究
      宜君县| 新余市| 虎林市| 屏东市| 镇江市| 彝良县| 新民市| 屏山县| 长子县| 高要市| 灵璧县| 元江| 宣恩县| 两当县| 革吉县| 祁阳县| 陆川县| 天门市| 临武县| 汝州市| 霍邱县| 来凤县| 达州市| 城步| 齐河县| 孝义市| 广东省| 南宁市| 榆树市| 西峡县| 丰镇市| 安乡县| 金塔县| 长岭县| 安阳县| 民丰县| 中西区| 虹口区| 分宜县| 泽州县| 教育|