shp文件详细格式
kml转化为shp文件
kml转化为shp文件摘要:1.KML 和SHP 文件格式简介2.KML 转换为SHP 的必要性3.KML 转换为SHP 的方法4.总结正文:一、KML 和SHP 文件格式简介KML(Keyhole Markup Language)是一种用于描述地理信息的XML 格式,由Google 公司开发,主要用于Google Earth 等地图软件。
KML 文件包含了地理对象的坐标、名称、高度等信息,可以描述点、线、面等地理特征。
SHP(Shapefile)是一种常见的地理信息系统(GIS)文件格式,可以包含点、线、面等地理对象,并且可以包含属性信息。
SHP 文件通常由.shp(几何图形)、.shx(索引)和.dbf(属性表)三个文件组成。
二、KML 转换为SHP 的必要性有时候,我们需要将KML 文件转换为SHP 文件,以便在GIS 软件中进行进一步的分析和处理。
例如,当我们需要将Google Earth 中的地理信息导入到ArcGIS 等GIS 软件中时,需要将KML 文件转换为SHP 文件。
三、KML 转换为SHP 的方法目前,有多种方法可以将KML 文件转换为SHP 文件,其中比较常用的方法是使用GDAL(Geospatial Data Abstraction Library)库。
1.安装GDAL 库:首先,需要在计算机上安装GDAL 库。
GDAL 是一个开源的地理信息系统库,支持多种操作系统,包括Windows、Linux 和Mac OS。
2.使用GDAL 转换KML 为SHP:在安装GDAL 库后,可以使用GDAL 命令行工具将KML 文件转换为SHP 文件。
例如,假设你有一个名为“example.kml”的KML 文件,你可以在命令行中输入以下命令:```gdal_polygonize.py -f "ESRI Shapefile" example.kml -o example.shp ```这条命令将把example.kml 文件转换为example.shp 文件。
shp文件格式
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格式 -回复
海洋等深线shp格式-回复什么是海洋等深线?海洋等深线是指海洋中连接相同深度点的虚拟曲线。
它们可以用来表示海洋的深度分布,并用于航海和地理研究。
使用等深线可以帮助我们了解海洋底部的地形,揭示海洋中的海底山脉、海沟、海岬和海域的分布情况。
等深线的数据通常以矢量文件的形式存储,其中最常见的格式是.shp (Shapefile),这是一种由ESRI(环境系统研究所)开发的地理信息系统(GIS)文件格式。
.shp文件包含了等深线的几何形状和属性数据,而相关的.shx文件则包含了等深线几何形状的索引。
那么,如何获取或创建这样的海洋等深线shp文件?获取海洋等深线shp文件的一种方法是通过公开的地理信息数据库或海洋科学研究机构获取。
例如,美国国家海洋和大气管理局(NOAA)提供了一个公开的海洋地理信息系统(GIS)数据资源库,在这个数据库中可以找到全球海洋等深线的shp文件。
如果你想自己创建海洋等深线shp文件,需要先收集或获取相关的深度数据。
目前常用的方法是通过声纳测量,使用多波束声纳仪或单波束声纳仪来获取海洋底部的高分辨率测量数据。
这些数据可以通过数据处理软件,如Fledermaus、Caris HIPS和SIPS等进行处理和分析。
在数据处理软件中,首先需要对原始声纳数据进行处理,包括去除噪音、纠正仪器漂移和修正时间延迟等。
然后,可以根据深度测量数据生成等深线。
这可以通过插值算法来完成,例如反距离加权、三角剖分或样条插值等。
完成等深线生成后,可以导出为.shp文件。
在许多GIS软件中,可以通过导入深度数据和等深线生成点、线、面等要素,并将其导出为.shp文件。
导出后,可以对shp文件进行编辑,添加属性数据,例如海洋底部的地物类型、地质特征等。
除了获取或创建海洋等深线shp文件外,如何使用和应用这些数据?海洋等深线shp文件可以通过GIS软件进行可视化和分析。
通过将shp 文件加载到GIS软件中,可以直观地显示海洋中的等深线分布,帮助了解海底地形的特征。
shp格式结构
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格式海洋等深线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文件转化为图像,可以用颜色渐变的方式展示不同深度的等深线,帮助用户更直观地理解和分析海洋中的等深线分布。
arcgis-shp文件的组成
arcgis shp文件的组成
ArcGIS中的SHP文件是一种常见的地理数据格式,它由多个文件组成。
一个完整的SHP文件通常由三个文件组成,分别具有以下扩展名:
1. `.shp`(Shapefile):这是SHP文件的核心文件,包含几何图形和属性数据。
它存储了点、线、多边形等地理要素的几何信息。
2. `.shx`(Shapefile Index):这是SHP文件的索引文件,用于加快对SHP 文件的读取速度。
它存储了几何图形的位置和偏移量,方便在SHP文件中快速查找和访问特定的要素。
3. `.dbf`(dBASE File):这是SHP文件的属性数据文件,以dBASE格式存储。
它包含与几何图形相关联的属性数据,如名称、值等。
属性数据与几何数据之间通过记录索引进行关联。
除了这三个基本的文件,SHP文件还可能包含其他附加文件,如:
- `.prj`(Projection):这是空间参考文件,定义了地理数据的坐标系和投影信息。
- `.sbn` 和`.sbx`:这些是空间索引文件,用于提高SHP文件的查询性能。
- `.shm` 和 `.shp.xml`:这些是SHP文件的内部使用文件,包含了元数据信息、编辑历史等。
需要注意的是,SHP文件只能存储单一类型的几何要素(例如点、线或多边形)。
如果想要存储多个不同类型的几何要素,可以使用多个SHP文件或者使用GIS数据格式如File Geodatabase。
希望以上信息对你理解ArcGIS SHP文件的组成有所帮助。
如有其他问题,请随时提问。
arcgis shp文件的组成
arcgis shp文件的组成
SHP文件是ArcGIS中常见的矢量数据文件格式,它主要由以下几个部分组成:
1. 文件头信息(File Header):文件头信息位于文件的开头,用于说明文件的版本、数据类型、编码等信息。
2. 要素(Features):SHP文件中的要素是地理实体,如点、线、面等。
每个要素由一系列属性数据和地理坐标组成。
3. 属性数据(Attributes):属性数据是与地理实体相关的信息,如道路名称、建筑物高度等。
SHP文件采用逗号分隔的值(CSV)格式来存储属性数据。
4. 字段(Fields):字段是属性数据的分类和描述,用于定义属性数据的类型、格式和含义。
SHP文件中的字段包括名称、类型、宽度、精度等。
5. 索引(Index):索引用于加速几何图形的查询和处理。
SHP文件中的索引是基于要素类型的,例如点索引、线索引和面索引等。
6. 文件结构(File Structure):SHP文件的结构包括多个部分,如文件头、要素、属性数据、字段和索引等。
这些部分按照一定的格式组织在一起,构成了一个完整的SHP文件。
7. 空间参考系统(Spatial Reference System):SHP文件中的空间参考系统定义了地理坐标系的投影、原点、单位等信息。
空间参考系统对于地理数据的正确显示和处理至关重要。
总之,SHP文件是一种常见的矢量地理数据格式,它包含了文件头信息、要素、属性数据、字段、索引、文件结构和空间参考系统等多个部分。
这些部分共同构成了一个完整的SHP文件,用于表示地理实体和相关信息。
shp文件讲解
∙相册∙广场∙游戏∙登录∙∙注册关注此空间Air-Jeremy's spacewelcome here!~ This is not so good, but it is my~2009-08-12 10:02[转]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字节是记录内容的长度。
七大洲边界shp格式
七大洲边界shp格式七大洲边界的shp格式,是一种用来储存地理边界数据的文件格式。
它采用了矢量数据的方式,通过点、线和多边形来描述地理空间信息。
这种格式不仅可以精确地表示七大洲的边界线,还可以包含其他与边界相关的地理属性,例如地形、气候等信息,为研究者提供了丰富的资源。
七大洲的边界线数据,是地理研究和教学中的重要基础。
通过shp 格式的文件,我们可以对世界各大洲的边界进行准确的测量、分析和比较。
这为地理学家、政策制定者、学生等提供了一个更直观的视觉表达方式,有助于更好地理解地球的地理结构和分布。
使用shp格式的七大洲边界数据,对于跨国合作、政府决策、城市规划、环境保护等领域都具有指导意义。
其中最直接的应用就是在地图制作中,通过将shp格式的数据导入到地图绘制软件中,我们可以方便地绘制出符合实际情况的世界地图,并在上面添加更多的地理信息,如国家、城市、河流等。
这为了解各大洲的地理特征、发展状况和环境问题提供了基础。
除了地图绘制外,shp格式的七大洲边界数据还可以被用于计算、模拟和分析。
通过对边界数据进行空间统计分析,我们可以了解各大洲之间的空间关系、人口分布、贸易往来等情况。
这些分析结果有助于深入研究国际合作、区域发展、战略规划等问题,为决策者提供更准确的参考依据。
在使用七大洲边界shp格式数据时,我们需要注意数据的来源和准确性。
由于地理边界的变化和争议等原因,边界数据可能存在一定的不确定性。
因此,在使用数据时,我们应当结合其他可靠的来源进行验证,并谨慎分析和解读。
此外,我们还应当注意更新数据,保持对新的边界变化和研究成果的关注,以便获取更准确的信息。
总之,七大洲边界shp格式给予我们揭示地球地理信息的全新途径。
通过这种格式储存的边界数据,我们可以更好地了解世界的地理特征和空间关系,为各个领域的决策和研究提供更精确的参考。
然而,我们在使用数据时要注意准确性和更新性,以确保研究结果的可靠性和可持续性。
SHP文件格式分析
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⾄此所有的点数据读取完毕。
shp文件格式
Shapefile shape format ( .shp )The main file ( .shp ) contains the primary geographic reference data in the shapefile. The file consists of a single fixed length header followed by one or more variable length records. Each of the variable length records includes a record header component and a record contents component. A detailed description of the file format is given in the Esri Shapefile Technical Description . [ 1 ] This format should not be confused with the AutoCAD shape font source format, which shares the .shp extension.The main file header is fixed at 100 bytes in length and contains 17 fields; nine 4-byte (32-bit signed integer or int32) integer fields followed by eight 8-byte ( double ) signed floating point fields:Bytes Type EndiannessUsage 0–3 int32 bigFile code (always hex value 0x0000270a) 4–23 int32 bigUnused; five uint32 24–27int32 big File length (in 16-bit words, including the header) 28–31int32 little Version 32–35int32 little Shape type (see reference below) 36–67 doublelittle Minimum bounding rectangle (MBR) of all shapes contained within the shapefile; four doubles in the following order: min X, min Y, max X, max Y 68–83 doublelittle Range of Z; two doubles in the following order: min Z, max Z 84–99 double little Range of M; two doubles in the following order: min M, max MThe file then contains any number of variable-length records. Each record is prefixed with a record-header of 8 bytes:Bytes Type Endianness Usage0–3 int32 big Record number (1-based)4–7 int32 big Record length (in 16-bit words)Following the record header is the actual record:Bytes Type Endianness Usage0–3 int32 little Shape type (see reference below)4–- - Shape contentThe variable length record contents depend on the shape type. The following are the possible shape types:Value Shape type Fields0 Null shape None1 Point X, Y3 Polyline MBR, Number of parts, Number of points, Parts, Points5 Polygon MBR, Number of parts, Number of points, Parts, Points8 MultiPoint MBR, Number of points, Points11 PointZ X, Y, Z, MMandatory : MBR, Number of parts, Number of points, Parts, Points, Z range, Z array13 PolylineZOptional : M range, M arrayMandatory : MBR, Number of parts, Number of points, Parts, Points, Z range, Z array15 PolygonZOptional : M range, M arrayMandatory : MBR, Number of points, Points, Z range, Z array18 MultiPointZOptional : M range, M array21 PointM X, Y, MMandatory : MBR, Number of parts, Number of points, Parts, Points23 PolylineMOptional : M range, M arrayMandatory : MBR, Number of parts, Number of points, Parts, Points25 PolygonMOptional : M range, M arrayMandatory : MBR, Number of points, Points28 MultiPointMOptional Fields : M range, M arrayMandatory : MBR, Number of parts, Number of points, Parts, Part types, Points, Z range, Z array 31 MultiPatchOptional : M range, M arrayIn common use, shapefiles containing Point, Polyline, and Polygon are extremely popular. The "Z" types arethree-dimensional. The "M" types contain a user-defined measurement which coincides with the point being referenced. Three-dimensional shapefiles are rather uncommon, and the measurement functionality has been largely superseded by more robust databases used in conjunction with the shapefile data.[ edit ] Shapefile shape index format ( .shx )The shapefile index contains the same 100-byte header as the .shp file, followed by any number of 8-byte fixed-length records which consist of the following two fields:Bytes Type Endianness Usage0–3 int32 big Record offset (in 16-bit words)4–7 int32 big Record length (in 16-bit words)Using this index, it is possible to seek backwards in the shapefile by seeking backwards first in the shape index (which is possible because it uses fixed-length records), reading the record offset, and using that to seek to the correct position in the .shp file. It is also possible to seek forwards an arbitrary number of records by using the same method.[ edit ] Shapefile attribute format ( .dbf )Attributes for each shape are stored in the dBase format. An alternative format that can also be used is the xBase format, which has an open specification , and is used in open source Shapefile libraries , such as the Shapefile C library. [ 2]。
shp文件格式
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数据
标准地图SHP数据标准地图SHP数据是一种常见的地理信息数据格式,它通常用于存储地图要素的几何和属性信息。
SHP数据由三个文件组成,分别是.shp、.shx和.dbf文件,其中.shp文件存储了地图要素的几何信息,.shx文件存储了地图要素的索引信息,而.dbf文件则存储了地图要素的属性信息。
这种数据格式具有结构简单、易于存储和传输的特点,因此被广泛应用于地理信息系统、地图制图和空间分析等领域。
在地图制图领域,标准地图SHP数据被广泛应用于各种地图的制作和展示。
通过SHP数据,地图制图人员可以准确地绘制地图要素的位置和形状,同时也可以将地图要素的属性信息与之关联,使地图更加丰富和具有实用性。
例如,在制作地图时,可以利用SHP数据来绘制道路、河流、湖泊、建筑物等地图要素,并且可以将这些地图要素的属性信息与之关联,如道路的名称、等级、宽度等,从而制作出更加精确和丰富的地图产品。
除了地图制图领域,标准地图SHP数据还被广泛应用于地理信息系统(GIS)和空间分析领域。
在GIS中,SHP数据可以作为地图要素的基本数据格式,用于存储和管理各种地理信息数据。
通过GIS软件,可以对SHP数据进行查询、分析、编辑和展示,从而实现对地理信息数据的有效管理和利用。
在空间分析领域,SHP数据可以作为空间数据的基础,用于进行空间数据的分析和建模,如地理空间分析、地理空间模拟等。
总的来说,标准地图SHP数据是一种非常重要的地理信息数据格式,它在地图制图、地理信息系统和空间分析等领域都有着广泛的应用。
通过SHP数据,可以准确地存储和管理地图要素的位置、形状和属性信息,为地图制图和地理信息分析提供了重要的数据基础。
因此,对于地图制图人员、GIS工程师和空间分析师来说,熟练掌握和应用SHP数据是非常重要的,可以帮助他们更好地完成地图制图、地理信息管理和空间分析等工作。
shp数据文件介绍
cpg
用于描述.dbf文件的代码页, 指明其使用的字符编码
SHP数据可选的4个文件
prj
sbn
sbx
用于保存地理坐标系统与投影信息, 地理数据索引文件,这两个文件只有在进
是一个空间投影文件,用于存储空 行主题间空间关系查询、主题的空间联接
间参考,也就是投影方式文件。当 和对shape字段进行索引的时候才存在。
然了,如果你的数据没有e这种文件格式实际上是由多个文件
组成的。其中,要组成一个Shapefile,有三个
文件是必不可少的,它们分别是“.shp”, “.shx” 与 “.dbf”文件。
有四个文件是可选的,他们分别是prj、sbn、 sbx、cpg。
SHP数据必不可少的3个文件
1、shp— 图形格式,用于保存元素的几何实体。 2、shx— 图形索引格式。几何体位置索引,记录每一 个几何体在shp文件之中的位置,能够加快向前或向后搜 索一个几何体的效率。 3、dbf— 属性数据格式,以dBase IV的数据表格式存 储每个几何形状的属性数据,它是可以用EXCEL表格打开 的
海洋等深线shp格式 -回复
海洋等深线shp格式-回复海洋等深线shp格式:探秘深海奥秘【引言】深海是人类几乎未知的领域,其庞大而神秘的生物资源和环境状况,引发了世界学术界的广泛关注。
深入海洋进行大规模的科学考察,需要准确的海洋地理信息数据,海洋等深线shp格式正是一种应用广泛的文件格式。
本文将带领读者一步一步深入探究海洋等深线shp格式的应用和相关领域的研究。
【正文】1. 海洋等深线shp格式简介- 格式定义:shp格式是一种地理信息系统(GIS)文件格式,用来储存和传输地理、拓扑和属性信息。
- 等深线:等深线是海洋学中描述大洋底部地形的一种方法,通常用等高线表示大洋底部的高处和低处。
- 海洋等深线shp格式:海洋等深线shp格式是将等深线数据以shp 文件格式存储的地理数据。
2. 海洋等深线shp格式在海洋学研究中的应用- 地形分析:利用海洋等深线shp格式,可以对海洋底部的地形进行深入分析,探测深海沟槽、海山等地貌特征。
这对海洋地理信息、海底地貌演化等研究具有重要意义。
- 生物分布研究:通过分析海洋等深线shp格式数据,可以了解深海各个等深线处不同生物的分布情况,为深海生物资源保护和开发利用提供科学依据。
- 涡旋漂移研究:深海流体力学现象中的涡旋漂移对海洋环流模式和气候变化研究至关重要。
海洋等深线shp格式可用于分析涡旋形成和漂移过程。
3. 海洋等深线shp格式的制作步骤- 数据采集:海洋等深线shp格式的制作需要根据实际采集的深海底部地形数据,利用测绘仪器或卫星遥感等手段采集多层次的深度数据。
- 数据处理:将采集到的海底地形数据进行处理,剔除噪声和异常点,并进行地形修正,以确保数据质量和准确性。
- 数据拓展:根据深度数据生成等深线,并将等深线数据转换为shp 格式,以方便在GIS软件中进行分析和应用。
- 数据验证:对生成的海洋等深线shp格式数据进行验证,与实际情况进行对比,确保数据的准确性。
4. 海洋等深线shp格式的局限性和展望- 数据精度限制:由于深海探测技术和数据采集手段的限制,海洋等深线shp格式中的数据精度一定程度上受到限制,需要结合其他地球观测数据进行综合研究。
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平台和工具中进行数据共享和协作。
shp格式结构
shp格式结构•Shapefile文件(SHP)•ESRI Shapefile(shp),或简称shapefile,是一种空间数据开放格式。
目前,该文件格式已经成为了地理信息软件界的一个开放标准。
Shapefile也是一种重要的交换格式,它能够在ESRI与其他公司的产品之间进行数据互操作。
Shapefile文件用于描述几何体对象:点,折线与多边形。
例如,Shapefile文件可以存储井、河流、湖泊等空间对象的几何位置。
除了几何位置,shp文件也可以存储这些空间对象的属性,例如一条河流的名字,一个城市的温度等等。
•GeoDatabase(MDB)•Geodatabase是一种采用标准关系数据库技术来表现地理信息的数据模型。
Geodatabase支持在标准的数据库管理系统(DBMS)表中存储和管理地理信息。
Geodatabase支持多种DBMS结构和多用户访问,且大小可伸缩。
从基于Microsoft Jet Engine的小型单用户数据库,到工作组,部门和企业级的多用户数据库,Geodatabase都支持。
•AutoCAD文件(DWG)•DWG是电脑辅助设计软件AutoCAD以及基于AutoCAD的软件保存设计数据所用的一种专有文件格式,已经成为CAD制图数据交换中的事实文件标准,据估计全世界有超过十亿个DWG文件。
•AutoCAD文件(DXF)•DXF是AutoCAD(Drawing Interchange Format或者Drawing Exchange Format) 绘图交换文件。
DXF 是Autodesk(欧特克)公司开发的用于AutoCAD与其它软件之间进行CAD数据交换的CAD数据文件格式。
•KML、KMZ文件•KML,是标记语言(Keyhole Markup Language)的缩写,是一种基于XML 语法与格式的、用于描述和保存地理信息(如点、线、图像、多边形和模型等)的编码规范,可以被Google Earth 和Google Maps 识别并显示。
shp矢量数据单一多边形格式
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文件详细格式
2.2.2Shapefiles数据说明Shapefiles是ESRI提供的一种矢量数据格式,它没有拓扑信息,一个Shap e files由一组文件组成,其中必要的基本文件包括坐标文件(.shp)、索引文件(.shx)和属性文件(.dbf)三个文件。
1.坐标文件的结构说明坐标文件(.shp)用于记录空间坐标信息。
它由头文件和实体信息两部分构成(如图2.1所示)。
1)坐标文件的文件头坐标文件的文件头是一个长度固定(100 bytes)的记录段,一共有9个i n t型和7个doub le型数据,主要记录内容见表2.2。
…………图2.1 坐标文件的结构表2.2 shapef iles头文件表注:最后4个加星号特别标示的四个数据只有当这个S hapefile文件包含Z方向坐标或者具有Measure值时才有值,否则为0.0。
所谓Meas ure值,是用于存储需要的附加数据,可以用来记录各种数据,例如权值、道路长度等信息。
(1)位序细心的读者会注意到表2.2中的数值的位序有Little和big的区别,对于位序是b i g的数据我们在读取时要小心。
通常,数据的位序都是Litt le,但在有些情况下可能会是big,二者的区别在于它们位序的顺序相反。
一个位序为b i g的数据,如果我们想得到它的真实数值,需要将它的位序转换成L ittle即可。
转换原理非常简单,就是交换字节顺序,下面是作者实现的在两者间进行转换的程序,代码如下://位序转换程序unsign ed long OnChan geByt eOrde r (int indata){char ss[8];char ee[8];unsign ed long val = unsign ed long(indata);_ultoa( val, ss, 16 );//将十六进制的数(val)转到一个字符串(ss)中int i;int length=strlen(ss);if(length!=8){for(i=0;i<8-length;i++)ee[i]='0';for(i=0;i<length;i++)ee[i+8-length]=ss[i];for(i=0;i<8;i++)ss[i]=ee[i];}////******进行倒序int t;t =ss[0];ss[0] =ss[6];ss[6] =t;t =ss[1];ss[1] =ss[7];ss[7] =t;t =ss[2];ss[2] =ss[4];ss[4] =t;t =ss[3];ss[3] =ss[5];ss[5] =t;////******//******将存有十六进制数(val)的字符串(ss)中的十六进制数转成十进制数 int value=0;for(i=0;i<8;i++){int k;CStrin g mass;mass=ss[i];if(ss[i]=='a' ||ss[i]=='b' ||ss[i]=='c' ||ss[i]=='d' ||ss[i]=='e' ||ss[i]=='f')k=10+ss[i]-'a';elsesscanf(mass,"%d",&k);value=value+int(k*pow(16,7-i)); }return (value);}(2)Shapef ile文件支持的几何类型(ShapeT ype)Shapef ile文件所支持的几何类型如表2.3所示:表2.3 shapef iles文件支持的几何类型对于一个不是记录Null Shape类型的Shapefil e文件,它所记录的空间目标的几何类型必须一致,不能在一个S h a pef ile文件中同时记录两种不同类型的几何目标。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.2.2Shape files数据说明Shape files是ESRI提供的一种矢量数据格式,它没有拓扑信息,一个Shape files由一组文件组成,其中必要的基本文件包括坐标文件(.shp)、索引文件(.shx)和属性文件(.dbf)三个文件。
1.坐标文件的结构说明坐标文件(.shp)用于记录空间坐标信息。
它由头文件和实体信息两部分构成(如图2.1所示)。
1)坐标文件的文件头坐标文件的文件头是一个长度固定(100 bytes)的记录段,一共有9个int型和7个double型数据,主要记录内容见表2.2。
…………图2.1 坐标文件的结构表2.2 shapefiles 头文件表注:最后4个加星号特别标示的四个数据只有当这个Shapefile文件包含Z方向坐标或者具有Measure值时才有值,否则为0.0。
所谓Measure值,是用于存储需要的附加数据,可以用来记录各种数据,例如权值、道路长度等信息。
(1)位序细心的读者会注意到表2.2中的数值的位序有Little和big的区别,对于位序是big 的数据我们在读取时要小心。
通常,数据的位序都是Little,但在有些情况下可能会是big,二者的区别在于它们位序的顺序相反。
一个位序为big的数据,如果我们想得到它的真实数值,需要将它的位序转换成Little即可。
转换原理非常简单,就是交换字节顺序,下面是作者实现的在两者间进行转换的程序,代码如下://位序转换程序unsigned long OnChange ByteOrder (int indata){char ss[8];char ee[8];unsigned long val = unsigned long(indata);_ultoa( val, ss, 16 );//将十六进制的数(val)转到一个字符串(ss)中int i;int length=strlen(ss);if(length!=8){for(i=0;i<8-length;i++)ee[i]='0';for(i=0;i<length;i++)ee[i+8-length]=ss[i];for(i=0;i<8;i++)ss[i]=ee[i];}////******进行倒序int t;t =ss[0];ss[0] =ss[6];ss[6] =t;t =ss[1];ss[1] =ss[7];ss[7] =t;t =ss[2];ss[2] =ss[4];ss[4] =t;t =ss[3];ss[3] =ss[5];ss[5] =t;////******//******将存有十六进制数(val)的字符串(ss)中的十六进制数转成十进制数int value=0;for(i=0;i<8;i++){int k;CString mass;mass=ss[i];if(ss[i]=='a' ||ss[i]=='b' ||ss[i]=='c' ||ss[i]=='d' ||ss[i]=='e' ||ss[i]=='f')k=10+ss[i]-'a';elsesscanf(mass,"%d",&k);value=value+int(k*pow(16,7-i));}return (value);}(2)Shapefile文件支持的几何类型(ShapeType)Shapefile文件所支持的几何类型如表2.3所示:表2.3 shapefiles文件支持的几何类型对于一个不是记录Null Shape 类型的Shapefile文件,它所记录的空间目标的几何类型必须一致,不能在一个Shapefile文件中同时记录两种不同类型的几何目标。
读取坐标文件(.shp)的文件头的代码如下:void OnReadShp(CString ShpFileName){FILE* m_ShpFile_fp; //****Shp文件指针//打开坐标文件if((m_ShpFile_fp=fopen(ShpFileName,"rb"))==NULL){return;}//读取坐标文件头的内容开始int FileCode;int Unused;int FileLength;int Version;int ShapeType;double Xmin;double Ymin;double Xmax;double Ymax;double Zmin;double Zmax;double Mmin;double Mmax;fread(&FileCode, sizeof(int), 1,m_ShpFile_fp);FileCode = OnChange ByteOrder (FileCode);for(i=0;i<5;i++)fread(&Unused,sizeof(int), 1,m_ShpFile_fp);fread(&FileLength, sizeof(int), 1,m_ShpFile_fp);FileLength = OnChange ByteOrder (FileLength);fread(&Version, sizeof(int), 1,m_ShpFile_ fp);fread(&ShapeType, sizeof(int), 1,m_ShpFile_fp);fread(&Xmin, sizeof(double),1,m_ShpFile_fp);fread(&Ymin, sizeof(double),1,m_ShpFile_fp);fread(&Xmax, sizeof(double),1,m_ShpFile_fp);fread(&Ymax, sizeof(double),1,m_ShpFile_fp);fread(&Zmin, sizeof(double),1,m_ShpFile_fp);fread(&Zmax, sizeof(double),1,m_ShpFile_fp);fread(&Mmin, sizeof(double),1,m_ShpFile_fp);fread(&Mmax, sizeof(double),1,m_ShpFile_fp);//读取坐标文件头的内容结束……}2)实体信息的内容实体信息负责记录坐标信息,它以记录段为基本单位,每一个记录段记录一个地理实体目标的坐标信息,每个记录段分为记录头和记录内容两部分。
记录头的内容包括记录号(Record Number)和坐标记录长度(Content Length) 两个记录项。
它们的位序都是big。
记录号(Record Number)和坐标记录长度(Content Length) 两个记录项都是int型,并且shapefile文件中的记录号都是从1开始的。
记录内容包括目标的几何类型(ShapeType)和具体的坐标记录(X、Y) ,记录内容因要素几何类型的不同其具体的内容及格式都有所不同。
下面分别介绍点状目标(Point)、线状目标(PolyLine)和面状目标(Polygon)三种几何类型的.shp文件的记录内容:(1)点状目标shapefile中的点状目标由一对X、Y坐标构成,坐标值为双精度型(double)。
点状目标的记录内容如表2.4:表2.4 点状目标的记录内容下面是读取点状目标的记录内容的代码:OnReadPointShp(CString ShpFileName){//打开坐标文件……//读取坐标文件头的内容开始……int RecordNumber;int ContentLength;int num =0;while((fread(&RecordNumber, sizeof(int), 1,ShpFile_f p)!=0)){num++;fread(&ContentLength,sizeof(int), 1,ShpFile_ fp);RecordNumber = OnChange ByteOrder (RecordNumber);ContentLength = OnChange ByteOrder (ContentLength);int shapeType;double x;double y;fread(&shapeType,sizeof(int), 1,ShpFile_fp);fread(&x, sizeof(double), 1,ShpFile_fp);fread(&y, sizeof(double), 1,ShpFile_fp);}}(2)线状目标shapefile中的线状目标是由一系列点坐标串构成,一个线目标可能包括多个子线段,子线段之间可以是相离的,同时子线段之间也可以相交。
Shapefile允许出现多个坐标完全相同的连续点,当读取文件时一定要注意这种情况,但是不允许出现某个退化的、长度为0的子线段出现。
线状目标的记录内容如表2.5:表2.5 线状目标的记录内容具体的数据结构如下:PolyLine{Double[4] Box // 当前线状目标的坐标范围Integer NumParts // 当前线目标所包含的子线段的个数Integer NumPoints // 当前线目标所包含的顶点个数Integer[NumParts] Parts // 每个子线段的第一个坐标点在Points的位置Point[NumPoints] Points // 记录所有坐标点的数组}这些记录项的具体含义如下:Box记录了当前的线目标的坐标范围,它是一个double型的数组,按照Xmin、 Ymin、Xmax、Ymax的顺序记录了坐标范围;NumParts记录了当前线目标所包含的子线段的个数;NumPoints记录了当前线目标的坐标点总数;Parts记录了每个子线段的第一个坐标点在坐标数组points中的位置,以便读取数据;Points是用于存放当前线目标的X、Y坐标的数组。
下面是读取线状目标的记录内容的代码:OnReadLineShp(CString ShpFileName){//打开坐标文件……//读取坐标文件头的内容开始……//读取线状目标的实体信息int RecordNumber;int ContentLength;int num =0;while((fread(&RecordNumber, sizeof(int), 1,ShpFile_f p)!=0)){fread(&ContentLength,sizeof(int), 1,ShpFile_ fp);RecordNumber = OnChange ByteOrder (RecordNumber);ContentLength = OnChange ByteOrder (ContentLength);int shapeType;double Box[4];int NumParts;int NumPoints;int *Parts;fread(&shapeType, sizeof(int), 1,ShpFi le_fp);//读Boxfor(i=0;i<4;i++)fread(Box+i, sizeof(double ),1,ShpFile_fp);//读NumParts和NumPointsfread(&NumParts, sizeof(int), 1,ShpF ile_fp);fread(&NumPoints, sizeof(int), 1,ShpFi le_fp);//读Parts和PointsParts =new int[NumParts];for(i=0;i<NumParts;i++)fread(Parts+i, sizeof(int), 1,ShpFile_fp);int pointNum;for(i=0;i<NumParts;i++){if(i!=NumParts-1)pointNum=Parts[i+1]-Parts[i];elsepointNum=NumPoints-Parts[i];double *PointsX;double *PointsY;PointsX =new double[pointNum];PointsY =new double[pointNum];for(j=0;j<pointNum;j++){fread(PointsX+j, sizeof(double),1,ShpFile_fp);fread(PointsY+j, sizeof(double),1,ShpFile_fp);}delete[] PointsX;delete[] PointsY;}delete[] Parts;}}(3)面状目标shapefile中的面状目标是由多个子环构成,每个子环是由至少四个顶点构成的封闭的、无自相交现象的环。