gentleman566
路人甲
路人甲
  • 注册日期2007-09-20
  • 发帖数1
  • QQ
  • 铜币107枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1157回复:0

剖析ARCGIS SHAPE文件及写入代码

楼主#
更多 发布于:2007-09-29 18:52
作者简介:潘永地(1971 - ) ,男,高工,主要从事应用气象方面的研究工作。<BR>文章编号: 1003 - 6598 (2006) 06 - 0036 - 04<BR>剖析ARCGIS SHAPE文件及写入代码<BR>潘永地<BR>(浙江省温州市气象局,浙江温州 325027)<BR>  摘 要: 通过对ESR I公司公布的Shape文件格式资料解读,剖析了Shape 文件的结构,并给出写Shape文件的VB代<BR>码,使得普通的数据文件可以直接写成Shape文件格式,为ArcGIS所调用,从而方便广大读者更加简单地使用ArcGIS来处理<BR>气象业务中涉及地理空间的较为复杂的问题。<BR>  关键词: Shape文件;ArcGIS;应用<BR>  中图分类号: TP311. 11 文献标识码: C<BR>1 引言<BR>ArcGIS是ESR I公司开发的最早的地理信息系<BR>统,也是最为成熟的地理信息系统,在国内外有着广<BR>泛的使用,在遥感、气候资源区划和开发、要素立体<BR>显示等气象业务中也常常被用来作为处理工具或工<BR>作平台。但是ArcGIS的数据组织比较特殊,与一般<BR>的数据处理软件存在着较大的差异,格式转换不方<BR>便,使得业务使用受到一定限制,并且给一些数据的<BR>自动化处理带来困难。Shape文件是ArcGIS的基础<BR>文件类型,存储了非拓扑几何和属性信息。Shape<BR>文件支持点、线、区域的几何特征,由于不需要处理<BR>拓扑数据结构文件头,在编辑等方面具有更快的处<BR>理速度。本文的目的就是通过对ESR I公司发布的<BR>原版资料ESR I Shapefile Technical Descrip tion的翻<BR>译解读,剖析Shape文件的结构,利用VB写出直接<BR>生成Shape文件的代码,为广大读者更加方便地使<BR>用ArcGIS处理气象数据提供参考。<BR>2 Shape文件结构<BR>2. 1 Shape文件的文件构成<BR>Shape文件由3 个文件构成: 主文件、索引文<BR>件、数据文件。<BR>其中主文件的后缀必须是. shp;索引文件的后<BR>缀必须是. shx;数据文件的后缀必须是. dbf,这3个<BR>文件共同组成Shape文件。各文件中存储的数据相<BR>互联系又各有区别。主文件中是Shape的位置信<BR>息;索引文件是对主文件的索引,指出主文件中记录<BR>在文件中的位置信息;数据文件中包括Shape的具<BR>体位置和属性信息。<BR>2. 2 . shp文件的结构<BR>. shp文件由文件头和文件记录构成(图1) ,其<BR>中文件大部分结构见表1。<BR>文件头<BR>记录头记录内容<BR>记录头记录内容<BR>记录头记录内容<BR>记录头记录内容<BR>···<BR>···<BR>记录头记录内容<BR>图1 . shp文件的结构<BR>其中Shape类型是ArcGIS定义的图形类型,具<BR>体可以参考Shapefile Technical Descrip tion。<BR>每个记录由记录头、记录内容两部分组成。记<BR>录头部分由两部分组成: 0~3字节是长整型的记录<BR>数, 4~7字节是记录内容的长度。文件头中的文件<BR>长度与记录头中的记录长度均以字( 2 字节)为单<BR>位。记录内容对不同的Shape类型定义不一样,但<BR>原理是相同的。因篇幅所限,这里以记录点(point)<BR>类型为例进行说明。点( point)类型的每个记录的<BR>记录内容为: 0~3字节长整型的Shape类型、4~11<BR>字节双精度的X坐标、12~19字节双精度的Y坐<BR>标。所以记录头中的记录长度就是2 + 4 + 4 = 10个<BR>字长,文件头中文件长度就是50 (文件头长) +总记<BR>录数3 14。<BR>·36·<BR>2006年第6期            贵 州 气 象                        <BR>  第30卷              JournalOf GuizhouMeteorology             VoL130 NO16<BR>表1 . shp文件的文件头结构<BR>位置字段名称数据数据类型字节顺序<BR>0 文件代码9994 32位整型big - endian<BR>4 保留0 32位整型big - endian<BR>8 保留0 32位整型big - endian<BR>12 保留0 32位整型big - endian<BR>16 保留0 32位整型big - endian<BR>20 保留0 32位整型big - endian<BR>24 文件长度文件长度32位整型big - endian<BR>28 版本1000 32位整型little - endian<BR>32 Shape类型Shape类型32位整型little - endian<BR>36 范围框最小X值双精度little - endian<BR>44 范围框最小Y值双精度little - endian<BR>52 范围框最大X值双精度little - endian<BR>60 范围框最大Y值双精度little - endian<BR>68 范围框最小Z值双精度little - endian<BR>76 范围框最大Z值双精度little - endian<BR>84 范围框最小M值双精度little - endian<BR>92 范围框最大M值双精度little - endian<BR>2. 3 . shx文件结构<BR>. shx文件的结构与图1所示的. shp 文件在总<BR>体结构上相同,但内容有所区别。文件头的定义与<BR>1shp一致,但文件长度指的是. shx的文件长度,所<BR>以这一项的数值是不同的。每1 个记录没有记录<BR>头,内容有2部分组成: 0~3字节表示记录存储位<BR>置,以离文件开始处的字数来表示,即50 +记录数<BR>3 14;记录长度,在点(point)类型中为10。<BR>2. 4 . dbf文件结构有关描述<BR>. dbf文件是Shape文件中的数据存储文件,其<BR>格式是dbase iv的数据文件,具体的格式说明在许<BR>多网站都有说明,但在Shape文件中的. dbf有一些<BR>特殊的规定。<BR>①前缀必须与. shp和. shx文件一样。<BR>②每1个图形特征必须在1个记录内。<BR>③记录的顺序必须与. shp中的记录顺序一样。<BR>④在. dbf文件头中的年份值是以1900年为基<BR>础的,即其数值表示年份与1900的差。<BR>3 用VB编写直接写Shape文件的方<BR>法及代码<BR>  在编写程序时要特别注意的是在一般的机器中<BR>写文件的字节顺序是little - endian方式,即小的在<BR>低地址,大的在高地址;而big - endian正好相反,所<BR>以对big - endian方式的要人为加以转换,本文编写<BR>了little2big( )函来实现。<BR>下面是以点类型为例用VB写Shape文件的代<BR>码: txt2 shape ( ) 。<BR>Function little2big ( x1 As Long, myt1 As Byte,<BR>myt2 As Byte, myt3 As Byte, myt4 As Byte)<BR>myt1 = Int( x1 / (2 ^ 24) )<BR>myt2 = Int ( ( x1 - ( Int ( x1 / (2 ^24) ) ) 3 2 ^<BR>24) / (2 ^ 16) )<BR>myt3 = Int ( ( x1 - myt1 3 2 ^24 - myt2 3 2<BR>^ 16) / (2 ^ 8) )<BR>myt4 = x1 - myt1 3 2 ^ 24 - myt2 3 2 ^ 16<BR>- myt3 3 2 ^ 8<BR>End Function<BR>Private Sub txt2 shape ( )<BR>·37·<BR>2006年第6期                                              <BR> 第30卷         潘永池,等:剖析ARCGIS SHAPE文件及写入代码         VoL130 NO16<BR>Dim jdattribute (0 To 100) AsDouble‘定义点位<BR>置的x<BR>Dim wdattribute (0 To 100) As Double‘定义点<BR>位置的y<BR>Dim zmattribute (0 To 100) As String‘定义点位<BR>置名称,如站名<BR>Dim ylattribute (0 To 100) AsDouble‘存点的属<BR>性值,如站点雨量<BR>Dim filelen As Long‘文件长度<BR>Dim records As Long‘记录数<BR>Dim xmin AsDouble‘最小x值<BR>Dim xmax AsDouble‘最大x值<BR>Dim ymin AsDouble‘最小y值<BR>Dim ymax AsDouble‘最大y值<BR>Dim zm AsVariant‘以下为临时变量<BR>Dim temp As String<BR>Dim lin0 As Long<BR>Dim dblin0 AsDouble<BR>Dim myt1 AsByte‘用于传递转换到big形式的<BR>字节临时变量<BR>Dim myt2 As Byte<BR>Dim myt3 As Byte<BR>Dim myt4 As Byte<BR>为了减小篇幅,本文省略信息的读入过程,即认<BR>为这些信息已经读到zmattribute ( ) 、jdattribute ( ) 、<BR>wdattribute ( ) 、ylattribute ( ) 、records等数组、变量,直<BR>接从写文件开始。<BR>Open (workfile + " shp " ) For Binary As #5打<BR>开文件,workfile为文件名前缀,下同<BR>′开始写文件头<BR>filelen = records 3 14 + 50‘算出文件长度<BR>Call little2big ( 9994, myt1, myt2, myt3, myt4)<BR>‘将9994转换成big形式。<BR>Put #5, , myt1′写9994的4 个字节<BR>Put #5, , myt2<BR>Put #5, , myt3<BR>Put #5, , myt4<BR> lin0 = 0<BR> For i = 1 To 5<BR>  Put #5, , lin0′写入保留项<BR> Next<BR>  Call little2big ( filelen, myt1, myt2, myt3,<BR>myt4) ′文件长转到big形式<BR>  Put #5, , myt1′写入文件长度转成big后<BR>的4 个字节<BR>  Put #5, , myt2<BR>  Put #5, , myt3<BR>  Put #5, , myt4<BR>  lin0 = 1000<BR>  Put #5, , lin0′version = 1000<BR>  lin0 = 1<BR>  Put #5, , lin0′图形类型shape type<BR>开’ 始求xmin, xmax, ymin, ymax。因比较大小比<BR>较容易实现,这里略去该部分代码,而认为xmin、<BR>xmax、ymin、ymax已经得到,下面依次写入xmin、ym2<BR>in、xmax、ymax。<BR>Put #5, , xmin : Put #5, , ymin : Put #5, ,<BR>xmax : Put #5, , ymax<BR>dblin0 = 0‘本例zmin、zmax、mmin、mmax为0,<BR>下面依次写入<BR>Put #5, , dblin0 : Put #5, , dblin0: Put #5, ,<BR>dblin0 : Put #5, , dblin0 ′Mmax = 0<BR>For i = 0 To records $ 1‘记录数转换成big形<BR>式<BR> lin0 = i + 1<BR>Call little2big ( lin0, myt1, myt2, myt3, myt4 )<BR>‘记录数转换成big后的4个字节,下面写入<BR> Put #5, , myt1: Put #5, , myt2 : Put #5, ,<BR>myt3 : Put #5, , myt4<BR>  lin0 = 10‘记录内容长度为10<BR>Call little2big ( lin0, myt1, myt2, myt3, myt4) ’<BR>记录内容长度转换成big后的4个字节<BR>  Put #5, , myt1 : Put #5, , myt2: Put #5, ,<BR>myt3: Put #5, , myt4<BR>  lin0 = 1 ’shapetype = 1 : Put #5, , lin0‘写<BR>入图形类型shapetype<BR>  Put #5, , jdattribute ( i) : Put #5, , wdat2<BR>tribute ( i) ‘写入位置信息经度和纬度<BR> Next<BR>  Close (5)<BR>  写’ . shx = = = = = =文件头<BR>  Open (workfile + " shx" ) ForB inaryAs #5<BR>写’ 文件头,与. shp 一样,这里略去。要区别的<BR>是文件长头长+记录数3 4<BR>For i = 0 To records - 1<BR>lin0 = 50 + 14 3 i ′求记录位置offset<BR>Call little2big( lin0, myt1, myt2, myt3, myt4)<BR>  Put #5, , myt1 : Put #5, , myt2: Put #5, ,<BR>myt3 : Put #5, , myt4<BR>  lin0 = 10 ′记录内容长度<BR>·38·<BR>2006年第6期            贵 州 气 象                        <BR>  第30卷              JournalOf GuizhouMeteorology             VoL130 NO16<BR>  Call little2big ( lin0, myt1, myt2, myt3,<BR>myt4)<BR>  Put #5, , myt1 : Put #5, , myt2 : Put #5, ,<BR>myt3 : Put #5, , myt4<BR>Next<BR>  Close (5)<BR>下面开始写. dbf文件. dbf文件的写入有许多<BR>的文章均有说明,也可以参考文献[ 2、3 ]等,但要注意<BR>上面2. 4中的几点。另外,. dbf也可以由安装了VF<BR>等软件后在VB 中可调用的引用对象来实现,从而<BR>减少编程量。<BR>4 应用简介<BR>通过上述方法编写完成Shape文件的转换程序<BR>后,可以将其作为气象上利用ArcGIS平台开发的基<BR>础性工具来使用。例如:<BR>将中尺度站的要素数据从数据库中读出,通过<BR>本程序转换成Shape文件,再由ArcGIS读入,可以<BR>显示到数字地图上,并通过ArcGIS的内置功能实现<BR>数据由点到面的拓展或将数据进行三维显示等,从<BR>而为研究、实际业务提供方便。<BR>将气象预报结果通过本程序的转换可以实现预<BR>报产品图像化,改善服务效果。<BR>将实况雨量转换成Shape文件后,可以由Arc2<BR>GIS的扩展模块实现不同的插值,得到适合本地的<BR>面雨量估算结果。如果用各站点预报雨量代替实况<BR>雨量,则可以得到面雨量预报。<BR>总之,有了Shape文件转换工具后,在气象数据<BR>与ArcGIS之间建立了1座桥梁,解决了ArcGIS在<BR>气象上开发的数据共享问题,从而促进ArcGIS在气<BR>象应用中的发展。<BR>参考文献<BR>[ 1 ]  ESR I Shapefile TechnicalDescrip tion. ESR IWhite Paper.<BR>1998 , 7: 1 - 29.<BR>[ 2 ]  毕锋. 从DBF格式到ISO格式的转换[ J ]. 现代图书情<BR>报技术, 1995, 2: 49 - 53.<BR>[ 3 ]  和跃时. 地震数据处理中SHK和DBF格式文件互换<BR>技术[ J ]. 地震地磁观测与研究, 1998, 19 (6) : 51 - 54.<BR>收稿日期: 2006 - 05 - 08<BR>作者简介:何明远(1976 - ) ,男,助工,主要从事防雷工作。<BR>文章编号: 1003 - 6598 (2006) 06 - 0039 - 03<BR>关于自动气象站雷<BR>电防护的探讨<BR>何明远<BR>(贵州省余庆县气象局,贵州余庆 564400)<BR>  摘 要: 该文详细介绍了自动气象站直击雷、感应雷<BR>防护措施和自动气象站共用接地等防雷技术措施,同时还增<BR>加了观测场的雷电防护措施。简要介绍了自动气象站的防<BR>雷,对做好自动气象站的防雷工作有一定的指导意义。<BR>  关键词:自动站;防雷;跨步电压;探讨<BR>  中图分类号: TM862 文献标识码: C<BR>1 引言<BR>自动气象站是由大量的电子元器件集合而成的<BR>电子电气设备,对电磁干扰相当敏感。电磁干扰源<BR>通常分为2类: 1类是人为干扰源。包括电力系统<BR>的隔离开关、断路器、系统扰动等产生的过电压,高<BR>频辐射的电磁干扰,以及来自有线通信网络的干扰<BR>等。另1类是自然干扰源。包括雷电放电,宇宙射<BR>线以及其它天体和气象活动的干扰。其中雷电过电<BR>压对自动气象站的危害极大,是主要干扰源。自动<BR>气象站遭受的雷电灾害主要有直击雷和雷击电磁脉<BR>冲损害,采用综合防雷是最佳选择。<BR>2 自动站雷电防护的基本原理<BR>所谓雷电防护就是通过合理、有效的手段将雷<BR>电流的能量尽可能快的泄入到大地,是疏导,而不是<BR>堵雷或消雷。1套完整的防雷系统包括2个方面:<BR>外部防雷和内部防雷。<BR>2. 1 外部防雷<BR>外部防雷的主要措施是对直击雷的防护,办公<BR>楼以及观测场都必须具备有效的直击雷防护措施,<BR>依据文献[ 1 ]国家标准执行。<BR>2. 1. 1 值班室直接雷的防护 按常规建筑物防直<BR>接雷方法,由避雷针、避雷网(带)或混合组成接闪<BR>器,在利用柱内主筋及屋面板筋构成1个整体组成<BR>引下线,用基础钢筋作为接地体,将雷电流安全泄入<BR>·39·<BR>2006年第6期            贵 州 气 象                        <BR>  第30卷              JournalOf GuizhouMeteorology             VoL130 NO16
喜欢0 评分0
游客

返回顶部