




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、S57文件存儲結(jié)構(gòu)、DDRDDR 結(jié)構(gòu)DDRDDR 中定義了文件的總體信息,包括文件名,字段名,字段類型,字段格式和長度,字段間 的關(guān)系,及子字段.1.1.文件頭區(qū)2424 個字節(jié),內(nèi)容如下表區(qū)內(nèi)起始地址子字段長度(字節(jié))項目名內(nèi)容05記錄長度記錄中的字節(jié)數(shù)51交換級別3”61頭標(biāo)區(qū)標(biāo)識符71線內(nèi)擴(kuò)充代碼指不符8版本號91應(yīng)用指7K符u”(空格)102字段控制長度站09125字段反基地址字段起始位置 (頭標(biāo)區(qū)加目次 區(qū)字節(jié)長度173擴(kuò)充字符集指示符“ ?。崭瘢】崭瘢?01字段長度字段的大小19(自定義)211字段位置字段的大小19(自定義)221預(yù)留字“CT231字段標(biāo)識字段的大小1記錄長度
2、是指 DDRDDR 的總長度. .2.2. 記錄區(qū)記錄區(qū)從第 2525 個字節(jié)開始,直到字節(jié)值=30=30 為止.30.30 稱為字段終結(jié)符(FT=30FT=30). .每個記錄的長度由:文件頭區(qū)中的,字段長度大小,字段位置大小,字段標(biāo)識的大小之和決 定.每個記錄描述一個,段的基本信息(名稱、長度、起始位置)每個記錄是定長的.3.3. 字段區(qū)記錄區(qū)中的每一條記錄對應(yīng)一個字段,然后在字段描述區(qū)進(jìn)一步給出字段的具體信息。每個字段的描述信息 之間由字段終結(jié)符(FTFT 3030)隔開。每個字段的描述信息 內(nèi)部不同部分 由單元終結(jié)符(UT=31UT=31 )隔開。其中每個字段描述信息的 第一部分為字段
3、的控制信息, 共 9 9 個字節(jié)組成。起始地址長度 類型名稱內(nèi)容01數(shù)據(jù)結(jié)構(gòu)代碼o-ffiifi, 1-線性,2-多維,3-其它11數(shù)據(jù)類型代碼“0”字符串】整數(shù)“5”二進(jìn)制“6”混 合2i2輔助控制代碼00”42一可打印圖形氣&” 一63L_截取轉(zhuǎn)義序列詞匯級別0”詞匯級別1H詞匯級別DDRDDR 的第一個字段 為控制字段,字段名為0000(地址為:目錄區(qū) 后的第一個字節(jié)(文件頭+目錄區(qū)的長度)控制字段給出了:件名、及全部字段的結(jié)構(gòu)信息。Field controlsExternal file tite (Not used for &57)UTbst of field tag
4、pairsFT例如:如下控制字段數(shù)據(jù)可生成對應(yīng)的字段結(jié)構(gòu)圖字段控制字段:-0000;&-0000;&7Csahara.7Csahara. 000-000-OOOICATDOOOIDSIDDSIDDSSTOOOIDSPMOOOIFRTDFRIDFOIDFRIDATTFFRIDNATFFRIDFFOOOICATDOOOIDSIDDSIDDSSTOOOIDSPMOOOIFRTDFRIDFOIDFRIDATTFFRIDNATFFRIDFFPCFRlDFFPTFRIDFSPCFRIDFSPTOOOlVRIDVRIDAnVVRIDVRPCVRJDVRPTVRTDSGCCVRIDPCFRlD
5、FFPTFRIDFSPCFRIDFSPTOOOlVRIDVRIDAnVVRIDVRPCVRJDVRPTVRTDSGCCVRIDSG2DVRIDSG3DSG2DVRIDSG3DDDRDDR 的其余字段 為數(shù)據(jù)描述字段,(地址為:目錄區(qū) 后的第一個字節(jié)+該字段的偏移量)Field controlsField nameUTArrayArray descdesc riptorriptorUTUTFormatFormat controlscontrolsFTFT例如:如下的字段描述字段為ISO 8211 Record IdcntifierfblS)-記親標(biāo)識符二進(jìn)制無符號整形,精度為 2;1600;&a
6、mp;線形混合型.伺匯級別 0Catalogue Directory Field-RCNM!RCD!FlIimL!VOIJvIfIMPL!SLAT!WLON!NLAr!EjON!CRCS!COMT-(A(2)5I(10)t3ATA(3)I4RJ2A目錄索引字段;RCNM (記錄名)2 位字符RCID (記錄標(biāo)識號)1。位整數(shù)FILE (文件名)字符LHL (文件長名)字符V0LM (卷標(biāo))字符SMPL (實現(xiàn)方法)3 位字符SLAT (南端緯度實數(shù)WL0N (西邊經(jīng)度)實數(shù)NIAT (北邊緯度)實數(shù)ELON (東邊精度)實數(shù)CRCS (校驗和值)字符C0MT (注釋)字符4.4.程序?qū)崿F(xiàn)S57
7、-文件對應(yīng)的DDFModul歐,在該類中讀入DDR言息。其中,DDF&件頭存入achLeader中。char achLeadernLeaderSize;/ nLeaderSize=24DDRDDR 中完整數(shù)據(jù)存入:pachRecord中。pachRecord = ( char *) CPLMalloc(_recLength);/ _recLength在文件頭中的第一個域中定義。根據(jù)DD反件頭中定義內(nèi)容和終止符計算DDIR字段的記錄個數(shù)。for ( i = nLeaderSize; i _recLength; i += nFieldEntryWidth )if ( pachRecordi
8、 = DDF_FIELD_TERMINATOR ) break;nFDCount+;在字段的每一條記錄中,得到每一個字段的標(biāo)識、 長度、起始位置(從記錄區(qū)后面的第一個字節(jié)開始計算)。根據(jù)記錄區(qū)中定義的各字段標(biāo)識、長度、起始位置在字段區(qū)中取到該字段對應(yīng)的描述信息。主要包括字段名稱、描述及在后面數(shù)據(jù)區(qū)中占的位置和轉(zhuǎn)換格式。例如 SG2DSG2D 對應(yīng)的描述為:2200 ; & J 2-D: Coordiriate lildA*YCOO 1XCOOA(2R) V定義了 Y Y、X X 坐標(biāo)為 2 2 個實數(shù)。程序處理中,將每一個記錄定義為一個對象,其基類為:DDFFieldDefnDDFFi
9、eldDefn *poFDefn;AddField( poFDefn );void DDFModule:AddField( DDFFieldDefn *poNewFDefn )nFieldDefnCount+;papoFieldDefns = (DDFFieldDefn *)CPLRealloc(papoFieldDefns, sizeof (void *)*nFieldDefnCount);papoFieldDefnsnFieldDefnCount-1 = poNewFDefn;其中:DDFFieldDefn *papoFieldDefns;注:*poFDefn本身為DDFFieldDefn
10、指針,而每一個字段對應(yīng)一個指針,故papoFieldDefns為二級指針。特別注意:switch ( pachFieldArea0)/字段區(qū)的第一個字節(jié),即控制字段的第一個字節(jié)case 0:_data_struct_code = dsc_elementary; break;if(舊uildSubfields() return FALSE;if ( !ApplyFormats() return FALSE;其中,BuildSubfields定義如下:int DDFFieldDefn:BuildSubfields() char *papszSubfieldNames;const char *psz
11、Sublist = _arrayDescr;/字段描述區(qū)字符,在Initialize中定義if ( pszSublist0 =*)bRepeatingSubfields = TRUE;pszSublist+;papszSubfieldNames = CSLTokenizeStringComplex( pszSublist, FALSE, FALSE );int nSFCount = CSLCount( papszSubfieldNames );for ( int iSF = 0; iSF SetName( papszSubfieldNamesiSF);AddSubfield( poSFDefn
12、, TRUE );CSLDestroy( papszSubfieldNames );return TRUE;例如:1600;& Catalogue Directory FieldRCXAfRCID:FILE:LFIL:VOLM:IMPL:SLAT:WLON:NLAT:ELON: CRCS! COMT (A(2), 1(10), 3A, A(3), 4R, 2A)共定義了 1212 個字段的格式,分別為A A,I(10),3A,A(3),4R,2A,I(10),3A,A(3),4R,2A 定義的子字段存入papoSubfields中,而papoSubfields定義為:DDFSubfie
13、ldDefn *papoSubfields;注意:每一個字段對應(yīng)一個對象,存入DDFModule類中的DDFFieldDefn *papoFieldDefns;數(shù)組內(nèi)。if ( _data_struct_code!=dsc_elementary )H III而每一個子字段DDFSubfieldDefn *papoSubfields乂存入字段類DDFFieldDefn中。ApplyFormats功能為將字段區(qū)內(nèi)的格式域應(yīng)用于各子字段中。int DDFFieldDefn:ApplyFormats()char*pszFormatList;char*papszFormatItems;if ( strl
14、en(_formatControls) =0 & *pszPastPrefix = nSubfieldCount )CPLError( CE_Warning, CPLE_AppDefined,格式項與子字段項不 等、s.n , pszTag );break;if ( !papoSubfieldsiFormatItem-SetFormat(pszPastPrefix) return FALSE;CSLDestroy( papszFormatItems );if ( iFormatItem nSubfieldCount )CPLError( CE_Failure, CPLE_AppDefi
15、ned,Got less formats than subfields for field、s,n”pszTag );return FALSE;判斷該字段是否為定長,nFixedWidth = 0;for ( int i = 0; i GetWidth() = 0 )nFixedWidth = 0;只要有一個子字段不定長時,則該字段不定長,即nFixedWidth = 0;break ;elsenFixedWidth += papoSubfieldsi-GetWidth();return TRUE;二、DRDR 結(jié)構(gòu)1.1.文件頭區(qū)2424 個字節(jié),內(nèi)容如下表區(qū)內(nèi)起始地址項目長度字節(jié))項目名內(nèi)
16、容5.記錄長度記錄中的字節(jié)數(shù)51交換級別“3”61頭標(biāo)區(qū)標(biāo)識符 y71線內(nèi)擴(kuò)充代碼指示符181版本號Uf 991應(yīng)用指示符空格)1 102字段控制長度“09,125字段區(qū)基地址字段起始位置頭標(biāo)區(qū)加目次 區(qū)字節(jié)長度)173擴(kuò)充字符集指不符“ !”(空格!空格)201.字段長度字段的大小19(自定義)211字段位置字段的大小19(自定義)221預(yù)留字II “0垮231字段標(biāo)識字段的大小寸記錄長度是指 DRDR 的總長度. .3.3.記錄區(qū)與 DDRDDR 相同3.3.字段區(qū)與 DDRDDR 相同DRDR 程序分析:在 DRDR 區(qū)內(nèi)每次讀入一條記錄,存入DDFModul歐內(nèi)的poRecord。而p
17、oRecord類型為:DDFRecord *poRecord;注意:每一個 DRDR 讀入后,即開始處理,并未保存poRecord;在每次 DRDR 的讀入過程中,首先判斷上一次讀入的DRDR 文件頭是否要重要使用,若否,則先讀入該 DRDR 的文件頭。if ( !nReuseHeader )(return ( ReadHeader();其中,nReuseHeade在上一個DR勺文件頭中定義。if ( _leaderIden =R ) nReuseHeader = TRUE;DRDR 中的數(shù)據(jù)存入DDFRecord類的pachData中。本DR勺字段個數(shù)存入DDFRecord類中的nField
18、Count。DFfr的字段存入paoFields = newDDFFieldnFieldCount中;初始化paoFields后得到各字段的數(shù)據(jù)、長度,并在DDFModul歐中定義的DDFFieldDefn *papoFieldDefns;找到對應(yīng)項,取到相應(yīng)的格式。然后,調(diào)用CParseS57_VC6Do中的函數(shù):ViewRecordField來解析本DR中的全 部字段。得到物標(biāo)的特征屆性數(shù)據(jù)和空間屆性數(shù)據(jù)。DDFFieldDefn *poFieldDefn = poModule-FindFieldDefn(szTag);讀 DRDR 時,調(diào)用oModule.ReadRecord().每個D
19、FM應(yīng)一個oModule.ReadRecord().在oModule.ReadRecord()中,先讀出文件頭區(qū),然后讀出記錄區(qū),每條記錄對應(yīng)一個字段.然后調(diào)用ViewRecordField來解析該字段對應(yīng)的 數(shù)據(jù).while ( (poRecord = oModule.ReadRecord() != NULL )(/ debuginfo(DDFRecordstartn);for ( int iField = 0; iField GetFieldCount();iField+ )(DDFField *poField = poRecord-GetField( iField );ViewRecor
20、dField( poField );nFieldCount+;nRecordCount+;字段數(shù)據(jù)解析函數(shù)void CParseS57Doc:ViewRecordField(DDFField * poField)(int nBytesRemaining;const char *pachFieldData;DDFFieldDefn *poFieldDefn = poField-GetFieldDefn();char str300;if (strncmp(poFieldDefn-GetName(), VRID, 4)=0)|(strncmp(poFieldDefn-GetName(), FRID,
21、 4)=0)(為空間數(shù)據(jù)就打印,并賦m_datatype值m_datatype=NEED_TYPE;elseif(strncmp(poFieldDefn-GetName(),ATTF,4)=0)( m_datatype=OBJT_TYPE|SUB3_TYPE;else if (strncmp(poFieldDefn-GetName(), FSPT, 4) = 0)(m_datatype=OBJT_TYPE|SUB4_TYPE;pachFieldData = poField-GetData();nBytesRemaining = poField-GetDataSize();int iRepeat;for ( iRepeat = 0; iRepeat GetRepeatCount(); iRepeat+ ) (int iSF;for ( iSF = 0; iSF GetSubfieldCount(); iSF+ )(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 深度解析現(xiàn)代康復(fù)的課件
- 2024年美術(shù)設(shè)計師色彩理論與運用試題及答案
- 工學(xué)矛盾面試題及答案
- 紡織品行業(yè)基礎(chǔ)知識的重要性試題及答案
- 破產(chǎn)法試題及答案
- 廣告設(shè)計師考試中的必知試題與答案
- 稅收基礎(chǔ)歷年試題及答案
- 提升消費力激發(fā)內(nèi)需增長的有效路徑與策略
- 《骨關(guān)節(jié)炎與鈣質(zhì)流失》課件
- 農(nóng)業(yè)機(jī)器人發(fā)展趨勢與市場前景洞察
- 上海市金山區(qū)2025屆高三高考二模地理試卷(含答案)
- 《電氣控制技術(shù)》課件-反接制動控制
- 華為市場面試題及答案
- 旅游港澳7天計劃
- 2024年初級會計實務(wù)考試真題及答案(5套)
- 2024年高考化學(xué)真題完全解讀(廣東卷)
- 預(yù)防老年人癡呆
- 三年級信息科技第23課《分解描述問題》教學(xué)設(shè)計、學(xué)習(xí)任務(wù)單及課后練習(xí)
- 數(shù)據(jù)庫應(yīng)用技術(shù)-第三次形考作業(yè)(第10章~第11章)-國開-參考資料
- 設(shè)備調(diào)試工作流程
- 農(nóng)業(yè)水利工程基礎(chǔ)知識單選題100道及答案
評論
0/150
提交評論