• 
    

    
    

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

      ?

      淺談SHAPE文件轉(zhuǎn)換到CAD文件的方法

      2018-03-20 07:25:57李云尚余向東
      資源環(huán)境與工程 2018年1期
      關(guān)鍵詞:字節(jié)長度對象

      李云尚, 余向東

      (湖北省地質(zhì)局 地球物理勘探大隊(duì),湖北 武漢 430056)

      ArcGIS 是目前廣泛使用的一種地理信息系統(tǒng)軟件,主要用來制圖、數(shù)據(jù)分析、各種專業(yè)地理信息系統(tǒng)的二次開發(fā)等。Shapefile文件是ArcGIS的基礎(chǔ)文件類型,它主要用來存儲點(diǎn)、線、多邊形等幾何對象的坐標(biāo)信息和屬性信息。目前很多城市的規(guī)劃管理部門的地理地圖都是采用Shapefile文件格式儲存,而勘察部門基本都是使用CAD的dwg文件格式,因此,需要將Shapefile格式文件轉(zhuǎn)換成為dwg格式文件。

      1 Shape文件的組成與結(jié)構(gòu)

      ArcGIS的一個(gè)Shapefile文件實(shí)際上是一個(gè)文件夾,它里面主要包含一個(gè)主文件(xxx.shp),一個(gè)索引文件(xxx.shx),一個(gè)dbase格式的屬性文件(xxx.dbf)。這三個(gè)文件中的數(shù)據(jù)既相互聯(lián)系有各有區(qū)別,主文件(xxx.shp)是儲存坐標(biāo)信息(空間位置),由固定長度的文件頭和變長度空間數(shù)據(jù)記錄組成;索引文件(xxx.shx)是對主文件的索引,主要包含坐標(biāo)文件的索引信息;屬性文件(xxx.dbf)記錄屬性信息(地名,單位名,長度,高程,子圖名,編碼等),它是一個(gè)標(biāo)準(zhǔn)的DBF文件,是由頭文件和實(shí)體信息兩部分構(gòu)成。

      1.1 主文件(xxx.shp)的組織結(jié)構(gòu)

      xxx.shp文件由文件頭和文件記錄構(gòu)成,而每個(gè)記錄是由固定長度的記錄頭和變長度的記錄內(nèi)容組成。

      1.1.1 主文件頭的組織結(jié)構(gòu)

      主文件頭是100個(gè)字節(jié)的固定長度,以下是它的部分結(jié)構(gòu)(表1)。

      表1 主文件頭結(jié)構(gòu)表Table 1 Structure table of main file header

      注:位置是指開始字節(jié)到文件頭第一字節(jié)的偏移量,長度從0~99,剛好100個(gè)字節(jié)。

      1.1.2 主文件記錄的組織結(jié)構(gòu)

      每條記錄由記錄頭和記錄內(nèi)容兩部分組成,記錄頭結(jié)構(gòu)見表2。

      表2 記錄頭結(jié)構(gòu)表Table 2 Structure table of record header

      記錄內(nèi)容對于不同的Shapefile文件類型而不一樣,長度也不一樣,以二維點(diǎn)(point)類型的文件記錄內(nèi)容來說明(表3)。

      所以二維點(diǎn)文件的記錄內(nèi)容長度是4+8+8=20

      表3 二維點(diǎn)文件記錄內(nèi)容說明表Table 3 Explanatory table of 2d document content

      個(gè)字節(jié),每條記錄的長度是4+4+20=28個(gè)字節(jié),也就是14個(gè)字,是個(gè)固定長度(0是指到記錄內(nèi)容的開始字節(jié)的偏移量)。

      1.2 xxx.dbf文件的結(jié)構(gòu)

      DBF文件是dbase格式的數(shù)據(jù)文件,它記錄.shp文件的屬性數(shù)據(jù),它在.shp文件中有特殊規(guī)定:

      (1) 文件名前綴必須與xxx.shp和xxx.shx一樣。

      (2) 每一個(gè)圖形特征必須在一個(gè)記錄內(nèi)。

      (3) 記錄順序必須與xxx.shp文件的記錄順序一樣。

      2 利用VB將二維點(diǎn)文件轉(zhuǎn)換為CAD文件

      2.1 利用VB將二維點(diǎn)文件轉(zhuǎn)換為CAD文件的程序流程圖1

      圖1 二維點(diǎn)文件轉(zhuǎn)換為CAD文件流程圖Fig.1 Flow chart of conversion of two dimensional point files into CAD file

      2.2 xxx.shp文件和xxx.dbf文件的打開和讀取

      利用二進(jìn)制方式打開.shp文件,利用數(shù)據(jù)對象連接和打開.dbf文件,以下是程序片段:

      Open FileName For Binary As #2 //打開.shp文件

      ReDim myx(3)As Byte

      Get #2,25,myx //從第25字節(jié)處開始讀入4個(gè)字節(jié)

      P=Val(b_l_h(myx))* 2 //計(jì)算文件總字節(jié)長度

      Close #2 //關(guān)閉.shp文件

      Set mywks=DBEngine.Workspaces(0) //創(chuàng)建工作空間

      Set mydb=mywks.OpenDatabase(pathstr,True,True,“dbase 5.0”) //打開指定的數(shù)據(jù)庫

      Set myrs=mydb.OpenRecordset(filedbf,dbOpenSnapshot) //打開指定的表,創(chuàng)建記錄集對象

      Set mytab=mydb.TableDefs(filedbf) //創(chuàng)建表定義對象

      ........

      k=(p-100)/28 //計(jì)算.shp文件的記錄個(gè)數(shù)

      ........

      Open FileName For Binary As #4 //二進(jìn)制打開.shp文件

      For i=1 To k

      mystr=myrs.Fields(findval).Value //讀取.dbf 文件第i行記錄的指定字段的值

      Set cad3dpoint=New clsmypoint //創(chuàng)建自定義對象實(shí)例

      cad3dpoints.Add cad3dpoint //自定義對象添加到集合中

      Set cad3dpoint=Nothing //對象清空

      myrs.MoveNext //將記錄對象的記錄指針移到下一個(gè)記錄

      Next i

      Close #4 //關(guān)閉.shp文件

      myrs.Close //關(guān)閉記錄對象

      mydb.Close //關(guān)閉數(shù)據(jù)庫對象

      2.3 在AutoCad程序中展示二維點(diǎn)和屬性值

      程序片段如下:

      Set myx1.acadapp=GetObject(,“autocad.Application”) //引用cad應(yīng)用程序?qū)ο?/p>

      Set myx2.acaddoc=myx1.acadapp.ActiveDocument //引用一個(gè)cad活動(dòng)文檔對象

      .........

      geshu=cad3dpoints.Count //返回集合中對象的個(gè)數(shù)

      For i=1 To geshu

      Set cad3dpoint=New clsmypoint //創(chuàng)建自定義對象的實(shí)例

      Set cad3dpoint=cad3dpoints.Item(i) //集合中的對象賦值給自定義對象

      cad3dpoint.mylayer=layerming //給自定義對象的圖層屬性賦值

      cad3dpoint.zhandian //調(diào)用自定義對象方法創(chuàng)建cad點(diǎn)對象

      cad3dpoint.zhantext //調(diào)用自定義對象方法創(chuàng)建cad文本對象

      Set cad3dpoint=Nothing //對象清空

      Next i

      3 結(jié)論

      通過上述文件的分析和代碼演示,向大家展示了怎樣用VB程序?qū)hapefile文件轉(zhuǎn)換成cad文件的一般過程。通過工程實(shí)際運(yùn)用,證實(shí)此方法確實(shí)可行,既方便又靈活,可以滿足很多個(gè)性化的需求。

      [1] 張國寶.AutoCAD 2000 VBA開發(fā)技術(shù)[M].北京:清華大學(xué)出版社,2000.

      [2] 楊冬.Shapefile圖形文件的數(shù)據(jù)存儲格式及讀寫[J].首都師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2010,31(2):4-8.

      猜你喜歡
      字節(jié)長度對象
      神秘來電
      睿士(2023年2期)2023-03-02 02:01:09
      No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
      1米的長度
      No.10 “字節(jié)跳動(dòng)手機(jī)”要來了?
      攻略對象的心思好難猜
      意林(2018年3期)2018-03-02 15:17:24
      愛的長度
      怎樣比較簡單的長度
      簡談MC7字節(jié)碼
      基于熵的快速掃描法的FNEA初始對象的生成方法
      區(qū)間對象族的可鎮(zhèn)定性分析
      博白县| 广汉市| 朔州市| 安吉县| 兖州市| 中西区| 濉溪县| 迁西县| 婺源县| 台北县| 宜丰县| 余庆县| 晋中市| 宁晋县| 怀宁县| 华池县| 临城县| 全州县| 和平县| 定陶县| 临海市| 灵宝市| 汶上县| 台北市| 喀喇沁旗| 吕梁市| 收藏| 麻栗坡县| 万全县| 合作市| 伊宁县| 宕昌县| 大庆市| 双江| 天水市| 阿克陶县| 太白县| 大渡口区| 汉源县| 宿州市| 安国市|