資源描述:
《shp文件詳細格式.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、2.2.2?????????Shapefiles數(shù)據(jù)說明Shapefiles是ESRI提供的一種矢量數(shù)據(jù)格式,它沒有拓撲信息,一個Shapefiles由一組文件組成,其中必要的基本文件包括坐標文件(.shp)、索引文件(.shx)和屬性文件(.dbf)三個文件。1.????????坐標文件的結(jié)構(gòu)說明坐標文件(.shp)用于記錄空間坐標信息。它由頭文件和實體信息兩部分構(gòu)成(如圖2.1所示)。1)?????坐標文件的文件頭坐標文件的文件頭是一個長度固定(100bytes)的記錄段,一共有9個int型和7個d
2、ouble型數(shù)據(jù),主要記錄內(nèi)容見表2.2。文件頭記錄頭記錄內(nèi)容記錄頭記錄內(nèi)容記錄頭記錄內(nèi)容記錄頭記錄內(nèi)容…………記錄頭記錄內(nèi)容圖2.1坐標文件的結(jié)構(gòu)起始位置名稱數(shù)值類型位序0FileCode9994Integerbig4Unused0Integerbig8Unused0Integerbig12Unused0Integerbig16Unused0Integerbig20Unused0Integerbig24文件長度文件的實際長度Integerbig28版本號1000IntegerLittle32幾何類型表
3、示這個Shapefile文件所記錄的空間數(shù)據(jù)的幾何類型IntegerLittle36Xmin空間數(shù)據(jù)所占空間范圍的X方向最小值DoubleLittle44Ymin空間數(shù)據(jù)所占空間范圍的Y方向最小值DoubleLittle52Xmax空間數(shù)據(jù)所占空間范圍的X方向最大值DoubleLittle60Ymax空間數(shù)據(jù)所占空間范圍的Y方向最大值DoubleLittle68*Zmin空間數(shù)據(jù)所占空間范圍的Z方向最小值DoubleLittle76*Zmax空間數(shù)據(jù)所占空間范圍的Z方向最大值DoubleLittle84
4、*Mmin最小Measure值DoubleLittle92*Mmax最大Measure值DoubleLittle表2.2shapefiles頭文件表注:最后4個加星號特別標示的四個數(shù)據(jù)只有當這個Shapefile文件包含Z方向坐標或者具有Measure值時才有值,否則為0.0。所謂Measure值,是用于存儲需要的附加數(shù)據(jù),可以用來記錄各種數(shù)據(jù),例如權(quán)值、道路長度等信息。(1)???位序細心的讀者會注意到表2.2中的數(shù)值的位序有Little和big的區(qū)別,對于位序是big的數(shù)據(jù)我們在讀取時要小心。通常,
5、數(shù)據(jù)的位序都是Little,但在有些情況下可能會是big,二者的區(qū)別在于它們位序的順序相反。一個位序為big的數(shù)據(jù),如果我們想得到它的真實數(shù)值,需要將它的位序轉(zhuǎn)換成Little即可。轉(zhuǎn)換原理非常簡單,就是交換字節(jié)順序,下面是作者實現(xiàn)的在兩者間進行轉(zhuǎn)換的程序,代碼如下://位序轉(zhuǎn)換程序unsignedlongOnChangeByteOrder(intindata){??????charss[8];??????charee[8];??????unsignedlongval=unsignedlong(inda
6、ta);??????_ultoa(val,ss,16);//將十六進制的數(shù)(val)轉(zhuǎn)到一個字符串(ss)中??????inti;??????intlength=strlen(ss);??????if(length!=8)??????{?????????????for(i=0;i<8-length;i++)????????????????????ee[i]='0';?????????????for(i=0;i7、s[i];?????????????for(i=0;i<8;i++)????????????????????ss[i]=ee[i];??????}??????////******進行倒序??????intt;??????t?????=ss[0];??????ss[0]??????=ss[6];??????ss[6]??????=t;??????t?????=ss[1];??????ss[1]??????=ss[7];??????ss[7]??????=t;??????t?????=ss[2];?????
8、?ss[2]??????=ss[4];??????ss[4]??????=t;??????t?????=ss[3];??????ss[3]??????=ss[5];??????ss[5]??????=t;???////******??????//******將存有十六進制數(shù)(val)的字符串(ss)中的十六進制數(shù)轉(zhuǎn)成十進制數(shù)??????intvalue=0;??????for(i=0;i<8;i++)??????{?????????????