Shp数据结构解析及一种底层读取方法陈明超刘朋飞*(天津师范大学地理与环境科学学院,天津300387)摘要:.shp数据是地理信息系统最常用的数据格式之一,具有数据结构紧凑、冗余度低等优点,在辅助决策、空间规划、可视化展示等方面有广泛的应用。本文基于此介绍了Shapefile矢量文件组成并详细解析了.shp数据存储点、线、面对象的存储结构,其次基于VisualStudio2019平台采用文件流的方式实现C#语言对shp数据的底层读取,最终取得了良好的效果。关键词:地理信息系统;矢量数据;数据结构;.NETAbstract:Shpdataisoneofthemostcommonlyuseddataformatsofgis,hastheadvantagesofcompactdatastructureandlowredundancy;ithaswidelyusedinassistingdecision-making^spatialplanning,visualdisplayandsoon.ThearticleintroducesthecompositionoftheShapefilevectorfileandanalyzesthestoragestructureofpoint,polyline,andpolygonindetail.Finally,takeadvantageofthefilestreamtorealizetheiow-levelreadingofshpdatabyC#languageandachievedgoodresults.Keywords:GIS;Vectordata;Datastructure;.NET中图分类号:TP274文献标识码:AShapefile文件是ESRI公司提出的用于描述空间数据的几何和属性特征的非拓扑实体矢量数据结构的一种格式气利用欧几里得几何学中的点、线、面、体来表示地理实体的一种数据组织方式。该文件格式已经成为GIS界的一个开放标准,同时也是一种重要的矢量数据交换格式。能很好的表达地理实体分布特征、数据精度高、冗余度低,在桌面版GIS应用程序和WebGIS中有广泛的应用。1Shapefile数据文件结构一个完整的Shapfile文件包含如下(如表1所示)几个子文件,常用的子文件包括,shx格式的儿何特征索引文件,,shp格式的几何文件,,dbf格式的属性文件2和.prj格式的投影文件。.shp文件为其中的主文件,本文的研究基于此展开。表1Shapefile文件子文件数据格式数据描述.dbf属性信息文件•P0投影信息文件.sbn.sbx空间索引文件.shp几何信息文件.xml元数据文件.shx几何索引文件.atx属性索引文件shp数据结构:Shp文件主要由文件头和信息记录两部分组成,文件头存文章编号:2096-4390(2020)21-0047-04储与文件基本特征相对应的数据,信息记录由多条子记录组成,每条记录表示相应的儿何实体信息。文件头总长度为100字节,分为基本识别信息和空间概况信息。基本识别信息包含八个int类型字段,总长度32字节。空间概况信息包含一个int类型字段和八个double类型字段,总长度68字节。具体字段信息如表2和表3所不。表2基本识别信息结构字段描述FileCodeint文件代码(9994)Unusedint预留字段Unusedint预留字段Unusedint预留字段Unusedint预留字段Unusedint预留字段FileLengthint文件长度FileXfersionint文件版本(1000)其中最大最小X,Y坐标值构成了最小外接矩形(MER),Z坐标为非必要字段。读取时按照起始位置依次读取,如读取FileCode字段从第零位开始,读Unused字段从第四位开始读。信息记录部分由多个子记录组成,没有固定的长度,最终长度取决于子记录的个数和每个子记录的长度。每个子记录由记录头信息和空间信息记录组成,记录头信息包含记录号和记录基金项目:国家自然科学基金项目(41571387),天津市自然科学基金项目(18JCYBJC90600),科技基础资源调查专项(No.2019FY202501)o作者简介:陈明超(1996,8-),男,硕士研究生,研究方向:网络地理信息。刘朋飞,男,讲师。主要研究方向为网络地理信息系统C*通讯作者:刘朋飞表3空间概况信息字段信息结构表4空间实体类型字段类型Shapelypeint空间数据类型XMndouble最小X坐标YMindouble最小Y坐标XMaxdouble最大X坐标YMaxdouble最大Y坐标ZMindouble最小Z坐标ZMaxd(xible最大Z坐标MMindouble最小测量值MMaxdouble最大测量值长度,均为int型,总长度为八字节。空间记录信息包含数据类型和坐标对信息,具体结构如图1所示。记录头空叵信息记录实体类型代码描述Nullshape0空Point1占八、、PolyUne3折线Polygon5多边形MultiPoint8多点PointZ11三维点PolyLineZ13三维线PolygaiZ15三维面MultiPointZ18三维点集PointM21M值点PolyLineM23M值线PolygaiM25M值多边形MultiPoi...