shp文件讲解
- 格式:doc
- 大小:38.00 KB
- 文档页数:5
shp⽂件定义投影坐标以及多个shp⽂件合并
⼀、定义投影坐标系
在arcmap打开未定义的⽮量⽂件时会出现这种警告,如果只是查看则⽆需注意,但是涉及对数据的编辑时就需要给⽮量⽂件添加投影坐标系
点击确定以后打开ArctoolBox⼯具箱,找到定义投影,双击,在弹出的对话框选择其中⼀个⽂件,然后点击坐标系右边的按钮,
这⾥要注意,如果⽮量⽂件原来的坐标⾥X坐标⼩数点前为6位,即不带39带号,就选择图上的坐标系格式;如果为8位,即有带号,就选择后边的xian 1980 3 degree gk zone 39.prj坐标系格式,然后点击确定;对于剩下的村⼦,可以在⾯板⾥选择导⼊,选择刚才的已经定义的魏堂村;也可以右键村⽂件,属性——源——设置源⽂件——选择刚才定义好的⽂件
⼆、多个统⼀坐标系下的⽮量⽂件合并
在Arcmap或者arccatalog中加载已经统⼀好了的⽬标数据,然后打开ArctoolBox⼯具,找到合并,然后双击
弹出的对话框⾥输⼊9个村⽬标数据,输出数据⾥可以选择其中的任意⼀个村的shp⽂件改名“九村合并”,点击确定弹出成功提⽰即可。
arcgis shp 编码
ArcGIS SHP(Shapefile)是一种常用的地理信息系统(GIS)文件格式,用于存储空间矢量数据。
SHP文件编码指的是Shapefile文件中的字符编码方式。
在ArcGIS中,SHP文件的编码通常采用的是Windows系统默认的代码页(Code Page),也就是ANSI编码。
这种编码方式支持多种语言字符集,包括英文、西班牙文、法文等。
ANSI编码使用单字节来表示字符,每个字符占用一个字节的存储空间。
然而,随着国际化和跨平台应用的发展,对于多语言和非拉丁字符集的支持变得越来越重要。
因此,在最新版本的ArcGIS软件中,也可以选择使用UTF-8编码来保存SHP文件。
UTF-8编码是一种可变长度的Unicode编码,它可以表示几乎所有的字符。
总结起来,ArcGIS SHP文件的编码方式可以是ANSI(Windows默认编码)或UTF-8(Unicode编码)。
具体使用哪种编码方式取决于用户在创建和保存SHP文件时所选择的设置。
1。
shp文件格式SDE,ARC/INFO,PC ARC/INFO,Data Automation Kit(DAK)和ArcCAD软件提供了shape 到coverage的数据转换器,ARC/INFO同样提供了coverage到shape的转换器。
为了和其他数据格式交换,shape文件的格式在本报告中被出版。
其他数据流,比如来自全球定位系统(GPS)接收机的数据能同样被存为shape文件或X,Y事件表。
Shape文件技术描述计算机程序能通过使用本节的技术描述来产生,读,写shape文件。
一个ESRI的shape文件包括一个主文件,一个索引文件,和一个dBASE表。
主文件是一个直接存取,变量记录长度文件,其中每个记录描述一个有它自己的vertices列表的shape。
在索引文件中,每个记录包含对应主文件记录离主文件头开始的偏移,dBASE表包含一feature一个记录的feature的特征。
几何和属性间的一一对应关系是基于记录数目的。
在dBASE文件中的属性记录必须和主文件中的记录是相同顺序的。
命名习惯所有文件名都符合8.3命名习惯。
主文件,索引文件和dBASE文件有相同的前缀。
前缀必须是由字符或数字(a-Z,0-9)开始,后跟0到7个字符(a-Z,0-9,_,)主文件的后缀是.shp,索引文件的后缀是.shx,dBASE表的后缀是.dbf。
文件名中的所有字母在对文件名敏感的操作系统中都是小写的。
例子主文件:counties.shp 索引文件:counties.shx dBASE表:ounties.dbf数字类型一个shape文件存储整数和双精度数,本文档的余数指以下类型:整数:有符号32位整数(4字节)双精度:有符号64位IEEE双精度浮点数(8字节)浮点数必须是数字的值。
负无穷,正无穷和非数字(NaN)值在shape文件不被允许。
然而shape文件支持'没有数据'的值这样的概念,但是目前只用于衡量。
shp格式结构(实用版)目录1.SHP 格式概述2.SHP 文件结构3.SHP 文件组成部分4.SHP 文件应用领域正文一、SHP 格式概述SHP 格式是一种地理信息系统(GIS)常用的矢量数据格式,全称为Shapefile。
它由 Esri 公司开发,被广泛应用于 GIS 软件中,用以存储地理对象的几何信息和属性数据。
SHP 格式文件的优势在于其易于处理、跨平台兼容以及支持多种地理数据类型。
二、SHP 文件结构SHP 文件主要由三个部分组成,分别是.shp(几何图形)、.shx(索引)和.dbf (属性数据)文件。
这三个文件共同构成了一个完整的 SHP 数据集,可以存储点、线或多边形等地理对象。
1..shp 文件:包含了地理对象的几何信息,如点、线或多边形。
这些几何信息以图形对象的形式存储,每个对象都包含了其对应的几何形状和属性数据。
2..shx 文件:存储了地理对象的索引信息。
索引对于高效地查找和处理地理对象至关重要,它可以提高 GIS 软件在处理 SHP 文件时的速度和性能。
3..dbf 文件:包含了地理对象的属性数据。
这些属性数据可以包括诸如道路名称、建筑物高度等各类信息。
.dbf 文件采用逗号分隔值(CSV)格式存储数据,方便用户进行导入和导出操作。
三、SHP 文件组成部分SHP 文件除了包含了.shp、.shx 和.dbf 文件外,还可能包括以下组成部分:1..prj 文件:存储了地理对象的投影信息。
投影是将地球表面的地理坐标转换为二维或三维坐标系统的过程,.prj 文件确保了 GIS 软件在处理 SHP 文件时能够正确地显示和分析地理数据。
2..xml 文件:提供了关于 SHP 数据集的元数据信息。
元数据包括了数据集的创建者、创建日期、数据源等描述性信息,这些信息对于了解和使用 SHP 文件非常有帮助。
四、SHP 文件应用领域SHP 格式文件在地理信息系统(GIS)领域具有广泛的应用,主要体现在以下几个方面:1.数据共享:SHP 格式的文件可以方便地在不同的 GIS 软件之间进行数据交换和共享,提高了数据的可操作性和复用性。
海洋等深线shp格式海洋等深线shp格式是一种常用的地理信息系统(GIS)数据格式,用于描述海洋中不同深度的等值线。
这种格式适用于海洋测绘、海洋科学研究以及海洋资源开发等领域。
本文将介绍海洋等深线shp格式的基本特点、数据结构以及使用方法,以便读者更好地理解和应用这种格式。
一、基本特点海洋等深线shp格式是GIS常用的矢量数据格式之一,具有以下基本特点:1. 精确性:海洋等深线shp文件中包含了经纬度坐标、深度值等信息,能够准确地描述海洋中的等深线分布情况。
2. 可视化:使用GIS软件可以将海洋等深线shp文件转化为图像,直观地展示海洋中的等深线分布。
3. 数据交换性强:海洋等深线shp文件采用开放标准的格式,可以方便地与其他GIS数据进行交换和共享。
二、数据结构海洋等深线shp文件由多个文件组成,一般包括.shp、.shx、.dbf等文件。
1. .shp文件:存储了等深线的几何形状信息,包括线段的节点坐标、拓扑结构等。
2. .shx文件:存储了.shp文件的索引信息,用于提高数据的查询效率。
3. .dbf文件:存储了等深线的属性信息,如深度值、等级等。
三、使用方法使用海洋等深线shp文件可以进行多种操作和应用,包括数据查询、地理分析等。
下面以一个实际应用案例来介绍使用方法。
假设我们想了解某海域的等深线分布情况,首先需要获取对应的海洋等深线shp文件,然后可以使用GIS软件进行如下操作:1. 打开文件:在GIS软件中选择打开.shp文件,该文件将显示等深线的几何形状。
2. 属性查询:利用GIS软件提供的属性查询功能,可以通过.dbf文件中的深度值等属性信息,筛选出特定深度范围内的等深线。
3. 空间查询:通过GIS软件提供的空间查询功能,可以选择特定地理区域内的等深线。
4. 可视化展示:将等深线shp文件转化为图像,可以用颜色渐变的方式展示不同深度的等深线,帮助用户更直观地理解和分析海洋中的等深线分布。
shp⽂件讲解shp⽂件格式内部结构ESRI shp⽂件格式内部结构(2008-09-01 15:18:24)标签:杂谈Shape⽂件是ArcGIS的基础⽂件类型,存储了⾮拓扑⼏何和属性信息。
Shape⽂件⽀持点、线、区域的⼏何特征,由于不需要处理拓扑数据结构⽂件头,在编辑等⽅⾯具有更快的处理速度。
本⽂通过对ESR I公司发布的原版资料ESRI Shapefile Technical Descrip tion的翻译解读,剖析Shape⽂件的结构,利⽤VB写出直接⽣成Shape⽂件的代码。
2 Shape⽂件结构2. 1 Shape⽂件的⽂件构成Shape⽂件由3 个⽂件构成: 主⽂件、索引⽂件、数据⽂件。
其中主⽂件的后缀必须是. shp;索引⽂件的后缀必须是. shx;数据⽂件的后缀必须是. dbf,这3个⽂件共同组成Shape⽂件。
各⽂件中存储的数据相互联系⼜各有区别。
主⽂件中是Shape的位置信息;索引⽂件是对主⽂件的索引,指出主⽂件中记录在⽂件中的位置信息;数据⽂件中包括Shape的具体位置和属性信息。
2. 2 . shp⽂件的结构. shp⽂件由⽂件头和⽂件记录构成(图1) ,其中⽂件⼤部分结构见表1。
⽂件头记录头记录内容记录头记录内容记录头记录内容记录头记录内容······记录头记录内容图1 . shp⽂件的结构其中Shape类型是ArcGIS定义的图形类型,具体可以参考Shapefile Technical Descrip tion。
每个记录由记录头、记录内容两部分组成。
记录头部分由两部分组成: 0~3字节是长整型的记录数, 4~7字节是记录内容的长度。
⽂件头中的⽂件长度与记录头中的记录长度均以字( 2 字节)为单位。
记录内容对不同的Shape类型定义不⼀样,但原理是相同的。
因篇幅所限,这⾥以记录点(point)类型为例进⾏说明。
ESRI公司shapefile技术说明这份文档定义了shapefile (.shp)的空间数据格式,并且说明了为什么shapefiles 很重要。
它列出了在环境系统研究所股份有限公司可用的工具(ESRI),该软件可以直接生成shapefiles或者将资料从其他格式转换成shapefiles。
这份文档还为那些想编写自己独有的数据翻译器的组织提供了所有必需的技术资料,使他们可以编写电脑程序来生成shapefiles而不必使用软件ESRI。
什么是Shapefiles?Shapefile文件用来存储一个数据集中有关空间要素的无拓扑的几何和属性信息。
一个特征的几何布局是以一套矢量坐集的形式来存储的。
正因为Shapefile没有处理拓扑数据结构的开销,因此Shapefile比其他的数据结构具有更快的绘图速度和更强的编辑能力,Shapefiles能处理特征重叠或非连续的情况。
它们通常需要更少的磁盘空间,也更容易阅读和书写。
Shapefiles支持点状、线状和面状要素。
面状要素是封闭的环路,即双重数字化多边形。
属性数据被存在一个dBASE格式的文件中。
每一个属性记录都与相关的几何形状有一个一对一的关系。
如何生成ShapefilesShapefiles可以通过以下四种常用的方法来生成:导出成Shapefile格式—用ARC/INFO,PC ARC/INFO,SDE,ArcView GIS或者BusinessMAP软件从其他数据源导出成为Shapefile数据。
数字化—shapefiles可以通过使用ArcView GIS特征生成工具,把形状数字化而直接得到。
编程设计—利用Avenue (ArcView GIS)、MapObjects、ARC宏语言(AML )(ARC/INFO)或者简易宏语言(SML )(PC ARC/INFO)等软件,你就可以在你的程序中生成shapefiles。
通过创建程序直接写入Shapefile定义中。
CASS输出SHP文件说明CASS输出SHP文件的定义主要在其安装目录下的AttriBute.def文件中。
文件作用:SHP文件格式定义文件。
例:*T_ReferPoint,1,A01,测量控制点FeatureID,100,6,0,要素代码ReferPointID,12,20,0,内部编号PntName,0,24,0,点名PntNo,0,16,0,点号说明:AttriBute.def文件中有所有的表及字段名。
1、我们先看第一行,“*”用来标示新的表的开始,“T_ReferPoint”为表名。
2、第二位为数据类型,即几何类型,用一位数字来表示,数据类型对应表如下:数据类型对应表:12345点线面注记复合3、第三位对应于数据组织表中的层号。
可以和数据分层表进行联系。
4、“测量控制点”,即为这个表的说明文字,用来描述此表。
5、我们再来看看第二行,第一位是本表的主键,一般用要素代码来标示,用该主键名来描述,上例中即为“FeatureID ”。
6、第二位为判断码,程序实现时用来判断要读取的编码类型,10:南方CASS代码,100:用户代码。
我们做数据接口时,要采用用户标准,所以用100来填充此位。
7、第三位为字长,用户提供的标准中有采用的数据库的数据类型表,根据此表,我们可以确定每个字段对应的类型和字长。
比如:“Numeric(10,3)”,我们这里要特别注意,根据程序角度来处理,字长应该为10,而不是10+3=13。
8、第四位为小数点位,即为要保留的小数点后位数,同理,我们可以根据数据类型表来确定。
9、最后一位是文字说明,也就是字段说明。
10、这里要注意时间类型,还有Blob类型,即影象数据,字长应该为2,小数点位应该为0。
11、从第三行开始,到下个表开始之前,每行的结构都相同。
12、第一位是除主键的其他字段名,13、第二位是数据类型,具体对应表见:14、后面几位就对应到第二行的后面几位,用同样的方式来处理。
七大洲边界shp格式七大洲边界的shp格式,是一种用来储存地理边界数据的文件格式。
它采用了矢量数据的方式,通过点、线和多边形来描述地理空间信息。
这种格式不仅可以精确地表示七大洲的边界线,还可以包含其他与边界相关的地理属性,例如地形、气候等信息,为研究者提供了丰富的资源。
七大洲的边界线数据,是地理研究和教学中的重要基础。
通过shp 格式的文件,我们可以对世界各大洲的边界进行准确的测量、分析和比较。
这为地理学家、政策制定者、学生等提供了一个更直观的视觉表达方式,有助于更好地理解地球的地理结构和分布。
使用shp格式的七大洲边界数据,对于跨国合作、政府决策、城市规划、环境保护等领域都具有指导意义。
其中最直接的应用就是在地图制作中,通过将shp格式的数据导入到地图绘制软件中,我们可以方便地绘制出符合实际情况的世界地图,并在上面添加更多的地理信息,如国家、城市、河流等。
这为了解各大洲的地理特征、发展状况和环境问题提供了基础。
除了地图绘制外,shp格式的七大洲边界数据还可以被用于计算、模拟和分析。
通过对边界数据进行空间统计分析,我们可以了解各大洲之间的空间关系、人口分布、贸易往来等情况。
这些分析结果有助于深入研究国际合作、区域发展、战略规划等问题,为决策者提供更准确的参考依据。
在使用七大洲边界shp格式数据时,我们需要注意数据的来源和准确性。
由于地理边界的变化和争议等原因,边界数据可能存在一定的不确定性。
因此,在使用数据时,我们应当结合其他可靠的来源进行验证,并谨慎分析和解读。
此外,我们还应当注意更新数据,保持对新的边界变化和研究成果的关注,以便获取更准确的信息。
总之,七大洲边界shp格式给予我们揭示地球地理信息的全新途径。
通过这种格式储存的边界数据,我们可以更好地了解世界的地理特征和空间关系,为各个领域的决策和研究提供更精确的参考。
然而,我们在使用数据时要注意准确性和更新性,以确保研究结果的可靠性和可持续性。
shp文件的读取
做GIS开发的朋友可能对shp并不陌生,但是看到CSDN网友不断提问关于shp文件的一些问题,利用闲暇我对shp文件的一些知识加以总结,共享CSDN网友。
首先了解一下shp文件的一些简单知识
Shapefile文件是美国环境系统研究所(ESRI)所研制的GIS 文件系统格式文件,是工业标准的矢量数据文件。
Shapefile 将空间特征表中的非拓扑几何对象和属性信息存储在数据
集中,特征表中的几何对象存为以坐标点集表示的图形文件—SHP文件,Shapefile文件并不含拓扑(Topological)数据结构。
一个Shape文件包括三个文件:一个主文件(*.shp),一个索引文件(*.shx),和一个dBASE(*.dbf)表。
主文件是一个直接存取,变长度记录的文件,其中每个记录描述构成一个地理特征(Feature)的所有vertices坐标值。
在索引文件中,每条记录包含对应主文件记录距离主文件头开始的偏移量,dBASE表包含SHP文件中每一个Feature的特征属性,表中几何记录和属性数据之间的一一对应关系是基于记录
数目的ID。
在dBASE文件中的属性记录必须和主文件中的记录顺序是相同的。
图形数据和属性数据通过索引号建立一一对应的关系。
SHP⽂件格式分析研究MO中很重要的⼀部分就是SHP格式分析,对于底层开始时很重要的。
根据韩鹏⽼师的书,特将⾃⼰的读取内容后分析如下。
SHP结构说明⽂件头记录头记录内容1)⽂件头的结构⽂件头是长度固定的(100BYTE)共9个int型和7个double型。
起始位置名称数值类型位序0File Code9994int big4Unused0int big8Unused0int big12Unused0int big16Unused0int big20Unused0int big24⽂件长度⽂件的实际长度int big28版本号1000int Little32⼏何类型⼏何类型int Little36Xmin最⼩值double Little44Ymin最⼩值double Little52Xmax最⼩值double Little60Ymax最⼩值double Little68×Zmin最⼩值double Little76×Zmax最⼩值double Littledouble Little84×Mmin最⼩的Measure值double Little92×Mmax最⼤的Measure值2)实体信息实体信息包括:记录头和记录内容记录头包括:记录号和坐标记录长度位序记录类型备注记录号bigint从1开始坐标长度bigint记录内容:因不同的⼏何要素类型不同⽽不同,主要有:点、线、⾯。
现在我们介绍线状。
记录项数值数据类型长度个数位序int41Little⼏何类型3(表⽰线状⽬标)坐标范围double324Littleint41Little⼦线段个数NumPartsint41Little坐标个数NumPointsParts数组int4*NumParts NumParts Little00000594 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000595 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x27 00000596 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xd8 00000597 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xa 00000598 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xf5 File Code 9994 正序读取00000599 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000600 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000601 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000602 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000603 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000604 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000605 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000606 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff Unused1 000000607 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000608 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000609 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000610 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000611 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000612 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000613 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000614 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff Unused2 000000615 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000616 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000617 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000618 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000619 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000620 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000621 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000622 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff Unused3 000000623 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000624 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000625 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000626 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000627 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000628 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000629 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000630 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff Unused4 000000631 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000632 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000633 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000634 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000635 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000636 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000637 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000638 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff Unused5 000000639 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000640 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000641 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000642 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000643 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x2 00000644 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xfd 00000645 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x1a 00000646 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xe5 ⽂件的实际长度 538 正序读取00000647 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xe8版本号 1000 实际读取的时候为倒序读取(以下均为倒序读取)00000655 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x3 00000656 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xfc 00000657 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000658 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000659 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000660 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000661 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000662 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff ⼏何类型 3 代表线倒序读取00000663 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xed 00000664 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x12 00000665 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x80 00000666 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x7f 00000667 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xeb 00000668 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x14 00000669 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x8a 00000670 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x75 00000671 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x19 00000672 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xe6 00000673 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xb8 00000674 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x47 00000675 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x59 00000676 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xa6 00000677 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x40 00000678 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbf Xmin00000679 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x95 00000680 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x6a 00000681 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x28 00000682 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xd7 00000683 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x7b 00000684 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x84 00000685 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x4b 00000686 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xb4 00000687 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x39 00000688 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xc6 00000689 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x8f 00000690 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x70 00000691 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x40 00000692 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbf 00000693 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x40 00000694 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbf Ymin00000695 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x1e 00000696 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xe1 00000697 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xc3 00000698 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x3c 00000699 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x63 00000700 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x9c 00000701 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x3f 00000702 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xc0 00000703 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x8b 00000704 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x74 00000705 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xbf 00000706 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x40 00000707 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x59 00000708 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xa6 00000709 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x4000000717 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x1f 00000718 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xe0 00000719 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x11 00000720 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xee 00000721 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xa3 00000722 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x5c 00000723 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x40 00000724 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbf 00000725 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x40 00000726 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbf Ymax00000727 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000728 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000729 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000730 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000731 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000732 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000733 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000734 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000735 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000736 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000737 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000738 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000739 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000740 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000741 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000742 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff Zmin00000743 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000744 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000745 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000746 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000747 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000748 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000749 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000750 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000751 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000752 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000753 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000754 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000755 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000756 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000757 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000758 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff Zmax00000759 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000760 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000761 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000762 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000763 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000764 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000765 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000766 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000767 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000768 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000769 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000770 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000771 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000772 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff00000780 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000781 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000782 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000783 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000784 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000785 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000786 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000787 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000788 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000789 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000790 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff Mmax00000791 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000792 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000793 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000794 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000795 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000796 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000797 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x1 00000798 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xfe RecordNumber 1 正序读00000799 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000800 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000801 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000802 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000803 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000804 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000805 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x28 00000806 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xd7 //ContentLength 40 正序读00000807 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x3 00000808 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xfc 00000809 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000810 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000811 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000812 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000813 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000814 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff //⼏何类型 3 倒序读00000815 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x84 00000816 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x7b 00000817 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xf0 00000818 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xf 00000819 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x68 00000820 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x97 00000821 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xe3 00000822 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x1c 00000823 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x88 00000824 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x77 00000825 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xb8 00000826 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x47 00000827 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x59 00000828 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xa6 00000829 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x40 00000830 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbf //BOX 100000831 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x76 00000832 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x89 00000833 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xa900000842 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x5f 00000843 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x40 00000844 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbf 00000845 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x40 00000846 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbf //BOX 200000847 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x7c 00000848 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x83 00000849 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x44 00000850 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbb 00000851 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x4c 00000852 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xb3 00000853 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x89 00000854 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x76 00000855 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x24 00000856 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xdb 00000857 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xb9 00000858 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x46 00000859 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x59 00000860 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xa6 00000861 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x40 00000862 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbf //BOX 300000863 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x9c 00000864 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x63 00000865 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x6b 00000866 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x94 00000867 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x98 00000868 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x67 00000869 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xa1 00000870 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x5e 00000871 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xf1 00000872 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xe 00000873 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xa2 00000874 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x5d 00000875 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x40 00000876 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbf 00000877 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x40 00000878 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbf //BOX 400000879 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x1 00000880 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xfe 00000881 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000882 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000883 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000884 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000885 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000886 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff//NumParts 1 倒序读00000887 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x2 00000888 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xfd 00000889 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000890 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000891 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000892 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff 00000893 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000894 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff //NumPoints 2 倒序读00000895 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x0 00000896 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xff//Parts数组全000000903 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x7c 00000904 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x83 00000905 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x44 00000906 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbb 00000907 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x4c 00000908 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xb3 00000909 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x89 00000910 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x76 00000911 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x24 00000912 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xdb 00000913 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xb9 00000914 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x46 00000915 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x59 00000916 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xa6 00000917 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x40 00000918 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbf //X00000919 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x9c 00000920 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x63 00000921 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x6b 00000922 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x94 00000923 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x98 00000924 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x67 00000925 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xa1 00000926 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x5e 00000927 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xf1 00000928 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xe 00000929 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xa2 00000930 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x5d 00000931 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x40 00000932 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbf 00000933 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x40 00000934 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbf //Y00000935 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x84 00000936 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x7b 00000937 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xf0 00000938 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xf 00000939 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x68 00000940 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x97 00000941 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xe3 00000942 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x1c 00000943 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x88 00000944 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x77 00000945 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xb8 00000946 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x47 00000947 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x59 00000948 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xa6 00000949 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x40 00000950 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbf //X00000951 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x76 00000952 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x89 00000953 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xa9 00000954 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0x56 00000955 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x11 00000956 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xee 00000957 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0xfa00000964 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbf 00000965 15:59:44 ((PUCHAR) CompletionCtx->MyBuffer)[Offset] is 0x40 00000966 15:59:44 (PUCHAR) CompletionCtx->OldBuffer)[Offset] is 0xbf //Y⾄此所有的点数据读取完毕。
arcgis shp 编码摘要:一、ArcGIS 和SHP 文件简介1.ArcGIS 介绍2.SHP 文件格式介绍二、SHP 文件编码方式1.地理坐标系编码2.属性数据编码三、SHP 文件编码的重要性1.数据精度和质量2.数据共享和互操作性四、如何正确编码SHP 文件1.确保地理坐标系正确2.遵循数据规范和标准3.使用合适的属性数据编码方式正文:ArcGIS 是一款由Esri 公司开发的地理信息系统软件,广泛应用于地理数据采集、管理、分析和可视化等领域。
SHP 文件是ArcGIS 中常用的一种地理数据格式,它可以存储地理要素的几何信息和属性数据。
在处理SHP 文件时,正确编码非常重要,以确保数据的准确性和质量。
首先,SHP 文件中的地理坐标系编码是至关重要的。
地理坐标系是一种用来描述地球上某一点的绝对位置的系统,通常使用地理坐标(经度和纬度)表示。
在SHP 文件中,地理坐标系编码需要遵循一定的规范,例如:WGS84 坐标系、GCJ-02 坐标系等。
正确选择和设置地理坐标系编码,可以确保地理数据在ArcGIS 软件中的正确显示和处理。
其次,SHP 文件的属性数据编码也是关键环节。
属性数据是指地理要素的描述性信息,如道路名称、建筑物高度等。
SHP 文件中的属性数据采用一种特定的编码方式,例如:字符型、整型、浮点型等。
选择合适的属性数据编码方式,有助于提高数据处理效率和准确性。
此外,遵循数据规范和标准对于正确编码SHP 文件至关重要。
我国已经制定了一系列关于地理信息数据的标准和规范,如:GB/T 13923-2006《地理信息地理实体分类与代码》等。
在编写SHP 文件时,应严格遵循这些规范和标准,以保证数据的质量、共享性和互操作性。
总之,正确编码SHP 文件对于确保地理数据的质量、精度和可用性至关重要。
shp文件的读取首先了解一下shp文件的一些简单知识Shapefile文件是美国环境系统研究所(ESRI)所研制的GIS文件系统格式文件,是工业标准的矢量数据文件。
Shapefile将空间特征表中的非拓扑几何对象和属性信息存储在数据集中,特征表中的几何对象存为以坐标点集表示的图形文件—SHP文件,Shapefile文件并不含拓扑(Topological)数据结构。
一个Shape文件包括三个文件:一个主文件(*.shp),一个索引文件(*.shx),和一个dBASE(*.dbf)表。
主文件是一个直接存取,变长度记录的文件,其中每个记录描述构成一个地理特征(Feature)的所有vertices坐标值。
在索引文件中,每条记录包含对应主文件记录距离主文件头开始的偏移量,dBASE表包含SHP文件中每一个Feature的特征属性,表中几何记录和属性数据之间的一一对应关系是基于记录数目的ID。
在dBASE文件中的属性记录必须和主文件中的记录顺序是相同的。
图形数据和属性数据通过索引号建立一一对应的关系Shapefile中坐标文件(.shp)由固定长度的文件头和接着的变长度空间数据记录组成。
文件头由100字节的说明信息组成的,主要说明文件的长度、Shape类型、整个Shape图层的范围等等,这些信息构成了空间数据的元数据。
在导入空间数据时首先要读入文件头获取Shape文件的基本信息,并以此信息为基础建立相应的元数据表。
而变长度空间数据记录是由固定长度的记录头和变长度记录内容组成,其记录结构基本类似,每条记录都有记录头和记录内容组成(空间坐标对)。
记录头的内容包括记录号(Record Number)和坐标记录长度(Content Length)两个记录项,Shapefile文件中的记录号都是从1开始的,坐标记录长度是按16位字来衡量的。
记录内容包括目标的几何类型(ShapeType)和具体的坐标记录(X,Y),记录内容因要素几何类型的不同,其具体的内容和格式都有所不同。
标准地图SHP数据标准地图SHP数据是一种常见的地理信息数据格式,它通常用于存储地图要素的几何和属性信息。
SHP数据由三个文件组成,分别是.shp、.shx和.dbf文件,其中.shp文件存储了地图要素的几何信息,.shx文件存储了地图要素的索引信息,而.dbf文件则存储了地图要素的属性信息。
这种数据格式具有结构简单、易于存储和传输的特点,因此被广泛应用于地理信息系统、地图制图和空间分析等领域。
在地图制图领域,标准地图SHP数据被广泛应用于各种地图的制作和展示。
通过SHP数据,地图制图人员可以准确地绘制地图要素的位置和形状,同时也可以将地图要素的属性信息与之关联,使地图更加丰富和具有实用性。
例如,在制作地图时,可以利用SHP数据来绘制道路、河流、湖泊、建筑物等地图要素,并且可以将这些地图要素的属性信息与之关联,如道路的名称、等级、宽度等,从而制作出更加精确和丰富的地图产品。
除了地图制图领域,标准地图SHP数据还被广泛应用于地理信息系统(GIS)和空间分析领域。
在GIS中,SHP数据可以作为地图要素的基本数据格式,用于存储和管理各种地理信息数据。
通过GIS软件,可以对SHP数据进行查询、分析、编辑和展示,从而实现对地理信息数据的有效管理和利用。
在空间分析领域,SHP数据可以作为空间数据的基础,用于进行空间数据的分析和建模,如地理空间分析、地理空间模拟等。
总的来说,标准地图SHP数据是一种非常重要的地理信息数据格式,它在地图制图、地理信息系统和空间分析等领域都有着广泛的应用。
通过SHP数据,可以准确地存储和管理地图要素的位置、形状和属性信息,为地图制图和地理信息分析提供了重要的数据基础。
因此,对于地图制图人员、GIS工程师和空间分析师来说,熟练掌握和应用SHP数据是非常重要的,可以帮助他们更好地完成地图制图、地理信息管理和空间分析等工作。
文章标题:ArcMap中如何计算SHp文件中多个点的中心坐标在GIS领域,ArcMap是一款常用的地理信息系统软件,它可以用于空间数据的处理和分析。
其中,SHp(Shapefile)文件是一种常见的矢量数据格式,可以存储点、线、面等几何要素。
在实际工作中,我们经常需要计算SHp文件中多个点的中心坐标,以便进行进一步的空间分析和可视化展示。
本文将从简单到深入地介绍ArcMap中计算SHp文件中多个点的中心坐标的方法,并共享个人观点和理解。
1. 初识ArcMap和SHp文件让我们简单了解一下ArcMap和SHp文件。
ArcMap是由美国Esri 公司开发的专业地理信息系统软件,它提供了丰富的地图制作和空间分析功能。
SHp文件是ArcMap中常用的矢量数据格式,包含了几何要素和属性数据,可以用于描述点、线、面等空间对象。
2. SHp文件中多个点的中心坐标概念在实际应用中,SHp文件中可能包含了大量的点数据,我们需要计算这些点的中心坐标。
中心坐标通常指的是这些点的平均位置,可以用于表示整个点集的空间分布特征。
计算这些点的中心坐标可以帮助我们更好地理解空间分布规律和进行进一步的空间分析。
3. 使用ArcMap计算SHp文件中多个点的中心坐标在ArcMap中,计算SHp文件中多个点的中心坐标可以通过以下步骤实现:1) 打开ArcMap软件,并加载需要计算的SHp文件。
2) 在ArcMap工具栏中选择“数据管理”或“空间分析”相关工具。
3) 选择“点要素类”或“点图层”中的点数据,然后进行空间统计或空间分析。
4) 在空间统计或空间分析工具中,选择计算点的中心坐标的功能,进行参数设置并运行计算。
5) 输出结果将包含计算得到的SHp文件中多个点的中心坐标。
4. 个人观点和理解在实际工作中,我经常使用ArcMap计算SHp文件中多个点的中心坐标,这对于空间数据分析和地图制作非常有帮助。
通过计算中心坐标,我可以更好地理解点数据的分布规律,发现空间关联性,并进行进一步的专题制图和空间分析。
shp格式结构Shp格式(Shapefile)是一种常用的地理信息系统(GIS)数据格式,它由多个文件组成,包含了矢量地理数据的几何形状、属性信息和空间参考信息。
本文将详细介绍Shp格式的结构,包括主文件、索引文件和属性文件,并阐述其在GIS数据处理中的重要性和应用。
1. 主文件(.shp文件)Shp格式的主文件包含了矢量地理数据的几何形状信息,采用二进制格式存储。
它由一系列记录组成,每个记录对应一个地理对象(如点、线或面)。
每个地理对象的几何形状由类型编码和相关坐标点数据组成。
常见的几何类型包括点(Point)、线(Polyline)和面(Polygon)。
主文件还包含空间参考信息,如地理坐标系、投影坐标系和地理范围。
这些信息对于准确地定位和叠加分析至关重要。
2. 索引文件(.shx文件)Shp格式的索引文件用于快速访问和查询地理对象,它与主文件一一对应。
索引文件采用二进制格式存储,每个记录包含了主文件中对应地理对象的偏移量和长度信息。
通过索引文件,可以快速找到并读取特定地理对象的几何形状和属性信息,提高了数据查询和分析的效率。
3. 属性文件(.dbf文件)Shp格式的属性文件存储了地理对象的相关属性信息,采用dBASE文件格式。
属性文件由表格形式组成,每个列对应一个属性字段,每个行对应一个地理对象。
属性字段可以包含数字、文本、日期等不同类型的数据。
属性文件的字段结构定义了每个属性字段的名称、数据类型和长度。
通过属性文件,我们可以获取与地理对象相关的属性数据,如名称、面积、人口等,进而进行统计分析和空间查询。
Shp格式结构的重要性和应用Shp格式结构的合理设计和组织对于GIS数据的存储、管理和分析具有重要意义。
下面介绍其重要性和应用领域。
1. 数据交换和共享:Shp格式是一种通用的GIS数据格式,被多个GIS软件支持,并广泛应用于数据交换和共享。
通过将地理数据转换为Shp格式,用户可以方便地在不同的GIS平台和工具中进行数据共享和协作。
kml转化为shp文件摘要:1.介绍KML和SHP文件格式2.讲解KML转化为SHP文件的原因和用途3.介绍KML转化为SHP文件的方法和工具4.总结KML转化为SHP文件的优点和注意事项正文:KML(Keyhole Markup Language)和SHP(Shapefile)都是地理信息系统(GIS)中常用的文件格式。
KML是一种用于描述地理信息的XML格式,通常用于Google Earth等地图软件。
而SHP是一种用于描述地理形状的文件格式,广泛应用于GIS软件和地图数据。
将KML转化为SHP文件的主要原因是为了在GIS软件中更好地处理和分析地理信息。
虽然KML文件可以描述地理信息,但其功能有限,无法满足一些高级的GIS分析和可视化需求。
而SHP文件具有丰富的地理信息数据类型和强大的功能,使其成为GIS领域的主流格式。
将KML转化为SHP文件的方法和工具有很多,其中一种常见的方法是使用GIS软件,如QGIS、ArcGIS等。
这些软件具有丰富的插件和功能,可以方便地将KML文件转换为SHP文件。
此外,还有一些专门的KML转换工具,如KML2Shape和KML to SHP Converter等。
这些工具操作简单,用户只需选择KML文件,设置转换参数,即可生成SHP文件。
将KML转化为SHP文件的优点包括:1.提高地理信息处理能力:SHP文件格式具有丰富的数据类型和功能,可以满足更多GIS分析和可视化需求。
2.兼容性:SHP文件格式广泛应用于GIS领域,与其他GIS软件和数据兼容性更好。
3.数据精度:SHP文件格式支持更高的地理信息数据精度,有利于精确分析和可视化。
需要注意的是,在进行KML转化为SHP文件的过程中,可能会出现数据丢失或精度降低的问题。
因此,在转换前,建议对KML文件进行备份,以防止数据丢失。
此外,在选择转换工具时,要选择功能强大且可靠的软件,以确保转换结果的准确性和完整性。
总之,将KML转化为SHP文件可以提高地理信息处理能力,增强数据兼容性,为GIS分析和可视化提供更好的支持。
SH P矢量数据单一多边形格式随着地理信息系统(GIS)技术的不断发展,矢量数据的应用越来越广泛。
而SH P矢量数据单一多边形格式(SH P polygon format)作为一种常见的矢量数据格式,具有较广泛的应用范围。
本文将从定义、特点、应用等方面对SH P矢量数据单一多边形格式进行阐述。
一、SH P矢量数据单一多边形格式的定义SH P矢量数据单一多边形格式是一种用来存储地理空间数据的文件格式,它由ES RI公司开发,是目前应用最为广泛的矢量数据格式之一。
该格式以二进制方式存储数据,具有较好的数据压缩效果,能够有效地节约存储空间。
二、SH P矢量数据单一多边形格式的特点1. 简洁高效:SH P矢量数据单一多边形格式采用二进制存储数据,可以较好地减小文件大小,提高数据检索效率。
2. 支持多种地理要素:SH P矢量数据单一多边形格式支持点、线、面等多种地理要素的存储和表达,能够满足不同地理信息数据的要求。
3. 具有较好的兼容性:SH P矢量数据单一多边形格式的应用范围较广,几乎所有GIS软件都支持该格式的数据读取和解析。
三、SH P矢量数据单一多边形格式的应用1. 地图制图:SH P矢量数据单一多边形格式常用于地图制图中,它可以准确地表达地理空间信息,为地图制作提供了便利。
2. 土地利用规划:在城乡规划和土地利用规划中,SH P矢量数据单一多边形格式可以帮助规划者对土地利用进行科学合理的规划和管理。
3. 环境保护:在环境监测和环境保护领域,SH P矢量数据单一多边形格式可以用来存储环境数据,进行环境分析和预测。
4. 农业资源管理:用SH P矢量数据单一多边形格式存储的地理信息数据可以帮助农业部门进行农作物分布、土壤类型等农业资源管理。
以上就是对SH P矢量数据单一多边形格式的简要阐述,可以看出,该格式具有较好的数据压缩效果、高效的数据检索能力以及广泛的应用范围。
在实际应用中,SH P矢量数据单一多边形格式将会继续发挥重要的作用,为各行各业的地理信息数据处理和应用提供有力支持。
shp⽂件详细格式Shape files数据说明Shape files是ESRI提供的⼀种⽮量数据格式,它没有拓扑信息,⼀个Shape files由⼀组⽂件组成,其中必要的基本⽂件包括坐标⽂件(.shp)、索引⽂件(.shx)和属性⽂件(.dbf)三个⽂件。
1. 坐标⽂件的结构说明––坐标⽂件(.shp)⽤于记录空间坐标信息。
它由头⽂件和实体信息两部分构成(如图2.1所⽰)。
1) 坐标⽂件的⽂件头坐标⽂件的⽂件头是⼀个长度固定(100 bytes)的记录段,⼀共有9个int型和7个double型数据,主要记录内容见表2.2。
⽂件头记录头记录内容记录头记录内容记录头记录内容记录头记录内容…………记录头记录内容图2.1 坐标⽂件的结构起始位置名称数值类型位序0File Code9994Integer big4Unused0Integer big8Unused0Integer big12Unused0Integer big16Unused0Integer big20Unused0Integer big24⽂件长度⽂件的实际长度Integer big28版本号1000Integer Little32⼏何类型表⽰这个Shapefile⽂件所记录的空间数Integer Little据的⼏何类型36Xmin空间数据所占空间范围的X⽅向最⼩值Double Little44Ymin空间数据所占空间范围的Y⽅向最⼩值Double Little52Xmax空间数据所占空间范围的X⽅向最⼤值Double Little60Ymax空间数据所占空间范围的Y⽅向最⼤值Double Little68*Zmin空间数据所占空间范围的Z⽅向最⼩值Double Little76*Zmax空间数据所占空间范围的Z⽅向最⼤值Double Little84*Mmin最⼩Measure值Double Little92*Mmax最⼤Measure值Double Little表2.2 shapefiles 头⽂件表注:最后4个加星号特别标⽰的四个数据只有当这个Shapefile⽂件包含Z⽅向坐标或者具有Measure值时才有值,否则为0.0。
shp文件格式内部结构ESRI shp文件格式内部结构(2008-09-01 15:18:24)标签:杂谈Shape文件是ArcGIS的基础文件类型,存储了非拓扑几何和属性信息。
Shape文件支持点、线、区域的几何特征,由于不需要处理拓扑数据结构文件头,在编辑等方面具有更快的处理速度。
本文通过对ESR I公司发布的原版资料ESRI Shapefile Technical Descrip tion的翻译解读,剖析Shape文件的结构,利用VB写出直接生成Shape文件的代码。
2 Shape文件结构2. 1 Shape文件的文件构成Shape文件由3 个文件构成: 主文件、索引文件、数据文件。
其中主文件的后缀必须是. shp;索引文件的后缀必须是. shx;数据文件的后缀必须是. dbf,这3个文件共同组成Shape文件。
各文件中存储的数据相互联系又各有区别。
主文件中是Shape的位置信息;索引文件是对主文件的索引,指出主文件中记录在文件中的位置信息;数据文件中包括Shape的具体位置和属性信息。
2. 2 . shp文件的结构. shp文件由文件头和文件记录构成(图1) ,其中文件大部分结构见表1。
文件头记录头记录内容记录头记录内容记录头记录内容记录头记录内容······记录头记录内容图1 . shp文件的结构其中Shape类型是ArcGIS定义的图形类型,具体可以参考Shapefile Technical Descrip tion。
每个记录由记录头、记录内容两部分组成。
记录头部分由两部分组成: 0~3字节是长整型的记录数, 4~7字节是记录内容的长度。
文件头中的文件长度与记录头中的记录长度均以字( 2 字节)为单位。
记录内容对不同的Shape类型定义不一样,但原理是相同的。
因篇幅所限,这里以记录点(point)类型为例进行说明。
点( point)类型的每个记录的记录内容为: 0~3字节长整型的Shape类型、4~11字节双精度的X坐标、12~19字节双精度的Y坐标。
所以记录头中的记录长度就是2 + 4 + 4 = 10个字长,文件头中文件长度就是50 (文件头长) +总记录数3 14。
表1 . shp文件的文件头结构位置字段名称数据数据类型字节顺序0 文件代码9994 32位整型big - endian4 保留0 32位整型big - endian8 保留0 32位整型big - endian12 保留0 32位整型big - endian16 保留0 32位整型big - endian20 保留0 32位整型big - endian24 文件长度文件长度32位整型big - endian28 版本1000 32位整型little - endian32 Shape类型Shape类型32位整型little - endian36 范围框最小X值双精度little - endian44 范围框最小Y值双精度little - endian52 范围框最大X值双精度little - endian60 范围框最大Y值双精度little - endian68 范围框最小Z值双精度little - endian76 范围框最大Z值双精度little - endian84 范围框最小M值双精度little - endian92 范围框最大M值双精度little - endian2. 3 . shx文件结构. shx文件的结构与图1所示的. shp 文件在总体结构上相同,但内容有所区别。
文件头的定义与1shp一致,但文件长度指的是. shx的文件长度,所以这一项的数值是不同的。
每1 个记录没有记录头,内容有2部分组成: 0~3字节表示记录存储位置,以离文件开始处的字数来表示,即50 +记录数3 14;记录长度,在点(point)类型中为10。
2.4 . dbf文件结构有关描述. dbf文件是Shape文件中的数据存储文件,其格式是dbase iv的数据文件,具体的格式说明在许多网站都有说明,但在Shape 文件中的. dbf有一些特殊的规定。
①前缀必须与. shp和. shx文件一样。
②每1个图形特征必须在1个记录内。
③记录的顺序必须与. shp中的记录顺序一样。
④在. dbf文件头中的年份值是以1900年为基础的,即其数值表示年份与1900的差。
3 用VB编写直接写Shape文件的方法及代码在编写程序时要特别注意的是在一般的机器中写文件的字节顺序是little - endian方式,即小的在低地址,大的在高地址;而big - endian正好相反,所以对big - endian方式的要人为加以转换,本文编写了little2big( )函来实现。
下面是以点类型为例用VB写Shape文件的代码: txt2 shape ( ) 。
Function little2big ( x1 As Long, myt1 As Byte,myt2 As Byte, myt3 As Byte, myt4 As Byte)myt1 = Int( x1 / (2 ^ 24) )myt2 = Int ( ( x1 - ( Int ( x1 / (2 ^24) ) ) 3 2 ^24) / (2 ^ 16) )myt3 = Int ( ( x1 - myt1 3 2 ^24 - myt2 3 2^ 16) / (2 ^ 8) )myt4 = x1 - myt1 3 2 ^ 24 - myt2 3 2 ^ 16- myt3 3 2 ^ 8End FunctionPrivate Sub txt2 shape ( )Dim jdattribute (0 To 100) AsDouble‘定义点位置的xDim wdattribute (0 To 100) As Double‘定义点位置的yDim zmattribute (0 To 100) As String‘定义点位置名称,如站名Dim ylattribute (0 To 100) AsDouble‘存点的属性值,如站点雨量Dim filelen As Long‘文件长度Dim records As Long‘记录数Dim xmin AsDouble‘最小x值Dim xmax AsDouble‘最大x值Dim ymin AsDouble‘最小y值Dim ymax AsDouble‘最大y值Dim zm AsVariant‘以下为临时变量Dim temp As StringDim lin0 As LongDim dblin0 AsDoubleDim myt1 AsByte‘用于传递转换到big形式的字节临时变量Dim myt2 As ByteDim myt3 As ByteDim myt4 As Byte为了减小篇幅,本文省略信息的读入过程,即认为这些信息已经读到zmattribute ( ) 、jdattribute ( ) 、wdattribute ( ) 、ylattribute ( ) 、records等数组、变量,直接从写文件开始。
Open (workfile + " shp " ) For Binary As #5打开文件,workfile为文件名前缀,下同′开始写文件头filelen = records 3 14 + 50‘算出文件长度Call little2big ( 9994, myt1, myt2, myt3, myt4)‘将9994转换成big形式。
Put #5, , myt1′写9994的4 个字节Put #5, , myt2Put #5, , myt3Put #5, , myt4lin0 = 0For i = 1 To 5Put #5, , lin0′写入保留项NextCall little2big ( filelen, myt1, myt2, myt3,myt4) ′文件长转到big形式Put #5, , myt1′写入文件长度转成big后的4 个字节Put #5, , myt2Put #5, , myt3Put #5, , myt4lin0 = 1000Put #5, , lin0′version = 1000lin0 = 1Put #5, , lin0′图形类型shape type开’ 始求xmin, xmax, ymin, ymax。
因比较大小比较容易实现,这里略去该部分代码,而认为xmin、xmax、ymin、ymax已经得到,下面依次写入xmin、ym2in、xmax、ymax。
Put #5, , xmin : Put #5, , ymin : Put #5, ,xmax : Put #5, , ymax dblin0 = 0‘本例zmin、zmax、mmin、mmax为0,下面依次写入Put #5, , dblin0 : Put #5, , dblin0: Put #5, ,dblin0 : Put #5, , dblin0 ′Mmax = 0For i = 0 To records $ 1‘记录数转换成big形式lin0 = i + 1Call little2big ( lin0, myt1, myt2, myt3, myt4 )‘记录数转换成big后的4个字节,下面写入Put #5, , myt1: Put #5, , myt2 : Put #5, ,myt3 : Put #5, , myt4lin0 = 10‘记录内容长度为10Call little2big ( lin0, myt1, myt2, myt3, myt4) ’记录内容长度转换成big后的4个字节Put #5, , myt1 : Put #5, , myt2: Put #5, ,myt3: Put #5, , myt4 lin0 = 1 ’shapetype = 1 : Put #5, , lin0‘写入图形类型shapetype Put #5, , jdattribute ( i) : Put #5, , wdat2tribute ( i) ‘写入位置信息经度和纬度NextClose (5)写’ . shx = = = = = =文件头Open (workfile + " shx" ) ForB inaryAs #5写’ 文件头,与. shp 一样,这里略去。
要区别的是文件长头长+记录数3 4 For i = 0 To records - 1lin0 = 50 + 14 3 i ′求记录位置offsetCall little2big( lin0, myt1, myt2, myt3, myt4)Put #5, , myt1 : Put #5, , myt2: Put #5, ,myt3 : Put #5, , myt4 lin0 = 10 ′记录内容长度Call little2big ( lin0, myt1, myt2, myt3,myt4)Put #5, , myt1 : Put #5, , myt2 : Put #5, ,myt3 : Put #5, , myt4 NextClose (5)下面开始写. dbf文件. dbf文件的写入有许多的文章均有说明,但要注意上面2. 4中的几点。