国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

ShapeFile格式文件寫入方法研究

2012-09-28 01:18柳佳佳欒曉巖
測(cè)繪通報(bào) 2012年9期
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu)實(shí)體長(zhǎng)度

柳佳佳,欒曉巖

(1.信息工程大學(xué)地理空間信息學(xué)院,河南鄭州450052;2.96669部隊(duì),北京100000)

ShapeFile格式文件寫入方法研究

柳佳佳1,欒曉巖2

(1.信息工程大學(xué)地理空間信息學(xué)院,河南鄭州450052;2.96669部隊(duì),北京100000)

針對(duì)寫ShapeFile文件所涉及的數(shù)據(jù)類型、賦值方法較少的現(xiàn)狀,詳細(xì)分析坐標(biāo)文件、屬性文件及索引文件中所包含的內(nèi)容,并在VC6.0中實(shí)現(xiàn)上述3種文件的寫入。

ShapeFile;數(shù)據(jù)結(jié)構(gòu);地理信息系統(tǒng)

一、引 言

地理信息系統(tǒng)是近20年來新興的一門集地理學(xué)、計(jì)算機(jī)技術(shù)、遙感技術(shù)和地圖學(xué)于一體的交叉學(xué)科,已廣泛應(yīng)用在城市、資源、環(huán)境、交通、人口、土地、災(zāi)害和規(guī)劃管理等領(lǐng)域。國外地理信息系統(tǒng)研究時(shí)間較長(zhǎng),已經(jīng)形成了許多成熟的GIS軟件,其中以ArcGIS最為典型,它是Esri公司集40余年GIS咨詢和開發(fā)經(jīng)驗(yàn)而研發(fā)出的一套完整的GIS平臺(tái)產(chǎn)品,其具有強(qiáng)大的地圖制作、空間數(shù)據(jù)管理、空間分析等功能,這些功能都是在數(shù)據(jù)的基礎(chǔ)上進(jìn)行的。而矢量數(shù)據(jù)是一種重要的數(shù)據(jù)格式,ShapeFile格式是Esri公司開發(fā)的用來描述空間數(shù)據(jù)的幾何特征和屬性特征的非拓?fù)鋵?shí)體矢量數(shù)據(jù)格式,是工業(yè)標(biāo)準(zhǔn)的矢量數(shù)據(jù)文件。目前,ArcGIS軟件在我國得到了廣泛的應(yīng)用,但是不同的行業(yè)有不同的矢量數(shù)據(jù)格式,只有充分研究ShapeFile格式,才能將不同的矢量格式轉(zhuǎn)換成ArcGIS能夠接受的數(shù)據(jù)格式。ShapeFile文件主要包括坐標(biāo)文件(SHP)、索引文件(SHX)和屬性文件(DBF)。3個(gè)基本文件的數(shù)據(jù)說明很多文獻(xiàn)中已經(jīng)作了詳細(xì)的敘述,讀取方法也有詳細(xì)介紹,雖然讀寫是一個(gè)相反的過程,但是在寫入文件時(shí),數(shù)據(jù)結(jié)構(gòu)中的內(nèi)容計(jì)算方法還比較模糊,本文主要針對(duì)格式中數(shù)據(jù)類型及需要計(jì)算的記錄項(xiàng)進(jìn)行詳細(xì)的分析。

二、ShapeFile文件數(shù)據(jù)結(jié)構(gòu)

1.坐標(biāo)文件(SHP)結(jié)構(gòu)

坐標(biāo)文件是ShapeFile文件中的主文件,用于記錄空間坐標(biāo)信息,是一個(gè)直接存取、變長(zhǎng)記錄的文件。其中,每個(gè)記錄描述一個(gè)實(shí)體,它由頭文件和實(shí)體信息兩部分構(gòu)成。

文件頭由100字節(jié)的說明信息組成,包括9個(gè)int型和7個(gè)double型數(shù)據(jù)。

實(shí)體信息負(fù)責(zé)記錄坐標(biāo)信息,其記錄結(jié)構(gòu)基本相似,每條記錄都由記錄頭和記錄內(nèi)容(空間坐標(biāo)對(duì))兩部分組成。記錄頭的內(nèi)容包括記錄號(hào)(Record Number)和坐標(biāo)記錄長(zhǎng)度(Content Length)兩個(gè)記錄項(xiàng)。需要注意的是,它們的位置都是big。對(duì)于big數(shù)據(jù)寫入的時(shí)候須注意,因?yàn)橥ǔ?shù)據(jù)的位序都是little,需要將little型轉(zhuǎn)換成lig型才能進(jìn)行寫入操作。記錄號(hào)和坐標(biāo)記錄長(zhǎng)度都是int型,并且記錄號(hào)都是從1開始;坐標(biāo)記錄長(zhǎng)度則用16位字來衡量。記錄內(nèi)容包括目標(biāo)的幾何類型(ShapeType)和具體的坐標(biāo)記錄(X、Y),記錄內(nèi)容因要素幾何類型的不同其具體的內(nèi)容及格式都有所不同。地物類型可以分為點(diǎn)(Point)、線(PolyLine)和面(Polygon)3種類型。點(diǎn)狀地物在ShapeFile中存儲(chǔ)的是一組坐標(biāo)(X、Y),坐標(biāo)值為double型。線狀地物在ShapeFile中存儲(chǔ)的是一系列的點(diǎn)坐標(biāo)串(X1,Y1,X2,Y2),一個(gè)線目標(biāo)可能包括多個(gè)子線段,子線段之間可以是相離的,也可以相交。ShapeFile允許出現(xiàn)多個(gè)坐標(biāo)完全相同的連續(xù)點(diǎn),但是不允許出現(xiàn)某個(gè)退化的、長(zhǎng)度為0的子線段。線數(shù)據(jù)結(jié)構(gòu)主要包括:線目標(biāo)的坐標(biāo)范圍(Double[4]型),通過比較每個(gè)坐標(biāo)點(diǎn)的大小,分別求出X、Y坐標(biāo)的最大值和最小值,從而得到范圍;線目標(biāo)所包含的子線段的個(gè)數(shù)(int型);線目標(biāo)所包含的頂點(diǎn)個(gè)數(shù)(int型);每個(gè)子線段的第1個(gè)坐標(biāo)點(diǎn)在Points的位置(int[頂點(diǎn)數(shù)]型);記錄所有坐標(biāo)點(diǎn)的數(shù)組(Point[頂點(diǎn)數(shù)]型)。面狀地物在ShapeFile中存儲(chǔ)的是一系列封閉的坐標(biāo)串(X1,Y1,X2,Y2,…,X1,Y1),這些封閉的坐標(biāo)串至少由4個(gè)頂點(diǎn)構(gòu)成,并且是封閉的,無自相交現(xiàn)象。由于多邊形經(jīng)常會(huì)出現(xiàn)包含關(guān)系,則對(duì)于含有島的多邊形,構(gòu)成它的環(huán)有內(nèi)外環(huán)之分,可通過每個(gè)環(huán)的頂點(diǎn)的排列順序或者方向來區(qū)分這個(gè)環(huán)到底是內(nèi)環(huán)還是外環(huán):內(nèi)環(huán)的頂點(diǎn)按照逆時(shí)針順序排列,而外環(huán)的頂點(diǎn)排列順序是順時(shí)針方向。如果一個(gè)多邊形只由一個(gè)環(huán)構(gòu)成,那么它的頂點(diǎn)排列順序?yàn)轫槙r(shí)針方向,每條多邊形記錄的數(shù)據(jù)結(jié)構(gòu)與線目標(biāo)的數(shù)據(jù)結(jié)構(gòu)完全相同。

2.屬性文件(DBF)結(jié)構(gòu)

屬性文件用于記錄屬性信息,是一個(gè)標(biāo)準(zhǔn)的DBF文件,由頭文件和實(shí)體信息兩部分構(gòu)成。文件頭部分的長(zhǎng)度是不定長(zhǎng)的,其主要是對(duì)DBF文件作一些總體說明。其中,最主要的是對(duì)該BDF文件記錄項(xiàng)的信息進(jìn)行詳細(xì)的描述,包括每個(gè)記錄項(xiàng)的名稱、數(shù)據(jù)類型、長(zhǎng)度等信息。屬性文件實(shí)體信息部分是一條條屬性記錄,每條記錄都是由若干個(gè)記錄項(xiàng)構(gòu)成。因此,只要依次循環(huán)寫入每條記錄即可。

3.索引文件(SHX)結(jié)構(gòu)

索引文件主要包含坐標(biāo)文件的索引信息,文件中每個(gè)記錄包含對(duì)應(yīng)的坐標(biāo)文件記錄距離坐標(biāo)文件文件頭的偏移量。通過索引文件可以很方便地在坐標(biāo)文件中定位到指定目標(biāo)的坐標(biāo)信息。

索引文件也是由頭文件和實(shí)體信息兩部分構(gòu)成,其中文件頭部分是一個(gè)長(zhǎng)度固定為100字節(jié)的記錄段,其內(nèi)容與坐標(biāo)文件的文件頭基本一致;實(shí)體信息部分以記錄為基本單位,每一條記錄包括偏移量(offset)和記錄段長(zhǎng)度(Content Length)兩個(gè)記錄項(xiàng),兩個(gè)記錄項(xiàng)數(shù)據(jù)類型是int型,位序?yàn)閎ig。

三、數(shù)據(jù)寫入方案

根據(jù)數(shù)據(jù)結(jié)構(gòu)在VC6.0中實(shí)現(xiàn)了寫入3種文件,對(duì)其中的數(shù)據(jù)類型以及需要計(jì)算的內(nèi)容進(jìn)行了分析和實(shí)現(xiàn)。

1.數(shù)值位序轉(zhuǎn)換

將little型轉(zhuǎn)換成big型,實(shí)現(xiàn)方法如下:

2.FileLength的計(jì)算方法

文件長(zhǎng)度值是用16位字表示的文件總長(zhǎng)度,包括文件頭100字節(jié),即50個(gè)16位字。由于實(shí)體信息的長(zhǎng)度隨著要素類型的不同而不同,計(jì)算方法如下:

1)點(diǎn)要素 FileLength=14*記錄數(shù)+50。其中,14為實(shí)體信息的16位字?jǐn)?shù),包含8字節(jié)的記錄頭和20字節(jié)的記錄內(nèi)容。

2)線要素的FileLength與點(diǎn)要素的區(qū)別主要在于實(shí)體信息中所包含的記錄內(nèi)容不同,線要素每條記錄的contentlength=(4+32+4+4+4*子段數(shù)+16 *每條記錄中的點(diǎn)數(shù))/2。那么線要素的FileLength就是每條記錄的contentlength與記錄頭的和的總和。

3)面要素的FileLength與線的相似,在計(jì)算contentlength時(shí)子段數(shù)為面的子環(huán)數(shù)。

3.屬性文件變化的記錄項(xiàng)及計(jì)算方法

1)文件頭中的字節(jié)數(shù)。HeaderByteNum=32*屬性子段數(shù)+32。

2)一條記錄中的字節(jié)長(zhǎng)度。RecordBytenum= 19* 屬性中double型字段數(shù)+9* 屬性中int型子段數(shù)+char型的子段長(zhǎng)度和。從上述計(jì)算中可以看出,double型在ShapeFile文件中對(duì)應(yīng)的字符數(shù)為19,int型為9,char型可根據(jù)實(shí)際需要?jiǎng)討B(tài)設(shè)定。

4.索引文件偏移量的計(jì)算方法

在索引文件中,每個(gè)記錄包含對(duì)應(yīng)主文件記錄距離主文件頭起始位置的偏移量。

1)點(diǎn)要素位移量Offset=50+14* 序號(hào)。

2)面要素位移量隨著坐標(biāo)文件中的對(duì)應(yīng)記錄長(zhǎng)度contentlength的變化而變化。部分實(shí)現(xiàn)代碼如下:

四、結(jié)束語

本文首先介紹了地理信息最基本的矢量數(shù)據(jù)內(nèi)容寫入ShapeFile文件所涉及的3個(gè)基本文件的數(shù)據(jù)結(jié)構(gòu);然后介紹了實(shí)現(xiàn)過程中需要計(jì)算的內(nèi)容的方法。按照上述方法既能完成地理信息中點(diǎn)、線、面要素的寫入,同時(shí)也為其他格式轉(zhuǎn)換為Shape-File格式奠定了基礎(chǔ)。

[1] 肖強(qiáng),趙國成.ShapeFile與軍用交換格式數(shù)據(jù)轉(zhuǎn)換的研究與實(shí)現(xiàn)[J].海洋測(cè)繪,2010,30(5):59-61.

[2] http:∥blog.163.com/adslxk@126/blog/static/1006106 7120105250560946.

[3] 陳文玲.空間數(shù)據(jù)轉(zhuǎn)換研究與探討[D].合肥:合肥工業(yè)大學(xué),2009.

[4] 馬英杰.基于3GS的核勘查數(shù)據(jù)采集及處理系統(tǒng)研究[D].成都:成都理工大學(xué),2010.

[5] 鄭翠玲.空間數(shù)據(jù)的格式轉(zhuǎn)換研究與實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī):下半月版,2010(9):171-174.

[6] 郝燕玲,唐文靜,趙玉新,等.Shapefile格式電子海圖數(shù)據(jù)集成存儲(chǔ)研究[J].微計(jì)算機(jī)信息,2008,24(21):26-28.

[7] 涂圣文.CAD、GIS及VR集成技術(shù)在工程領(lǐng)域的應(yīng)用研究[D].武漢:華中科技大學(xué),2005.

Research of the Method to Write a ShapeFile-format File

LIU Jiajia,LUAN Xiaoyan

0494-0911(2012)09-0090-03

P208

B

2012-08-13

國家863計(jì)劃(2009AA12Z228)

柳佳佳( 1981—) ,女,遼寧丹東人,博士生,主要研究方向?yàn)榭臻g認(rèn)知。

猜你喜歡
數(shù)據(jù)結(jié)構(gòu)實(shí)體長(zhǎng)度
數(shù)據(jù)結(jié)構(gòu)線上線下混合教學(xué)模式探討
1米的長(zhǎng)度
前海自貿(mào)區(qū):金融服務(wù)實(shí)體
愛的長(zhǎng)度
怎樣比較簡(jiǎn)單的長(zhǎng)度
實(shí)體的可感部分與實(shí)體——兼論亞里士多德分析實(shí)體的兩種模式
兩會(huì)進(jìn)行時(shí):緊扣實(shí)體經(jīng)濟(jì)“釘釘子”
振興實(shí)體經(jīng)濟(jì)地方如何“釘釘子”
“翻轉(zhuǎn)課堂”教學(xué)模式的探討——以《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)為例
高職高專數(shù)據(jù)結(jié)構(gòu)教學(xué)改革探討
汪清县| 自贡市| 呼和浩特市| 容城县| 五家渠市| 岑巩县| 金华市| 吴堡县| 微山县| 库尔勒市| 阳城县| 淳安县| 海晏县| 勃利县| 太康县| 小金县| 武清区| 二手房| 同心县| 旺苍县| 广汉市| 双辽市| 方山县| 车致| 林周县| 三穗县| 莆田市| 子长县| 三亚市| 宁武县| 商丘市| 吴忠市| 团风县| 阿克苏市| 绍兴市| 北海市| 潞城市| 新干县| 宜昌市| 蒙城县| 青浦区|