转自:
http://blog.csdn.net/gisfarmer/archive/2009/02/04/3861554.aspx
做GIS开发的朋友可能对shp并不陌生,但是看到CSDN网友不断提问关于shp文件的一些问题,利用闲暇我对shp文件的一些知识加以总结,共享CSDN网友。
首先了解一下shp文件的一些简单知识
Shapefile文件是美国环境系统研究所(ESRI)所研制的GIS文件系统格式文件,是工业标准的矢量数据文件。 Shapefile将空间特征表中的非拓扑几何对象和属性信息存储在数据集中,特征表中的几何对象存为以坐标点集表示的图形文件—SHP文件,Shapefile文件并不含拓扑(Topological)数据结构。一个Shape文件包括三个文件:一个主文件(*.shp),一个索引文件(*.shx),和一个dBASE(*.dbf)表。主文件是一个直接存取,变长度记录的文件,其中每个记录描述构成一个地理特征(Feature)的所有vertices坐标值。在索引文件中,每条记录包含对应主文件记录距离主文件头开始的偏移量,dBASE表包含SHP文件中每一个Feature的
shp文件的数据结构网上到处都可以查到,主要是:文件头(共100 bytes)记录头 记录项记录头 记录项....... ................. ..........存储的图元可能是点,多点,多线,面,都是基础几何信息。用.net的BinaryRead类带的可以很方便的读取,暂时只做了点的处理,根据记录项的不同,用不同的几何数据结构去序列化,因为C#正常情况下不使用指针,所以无法自己手动申请内存,只有用List<>去存储,可能有时会浪费一点,但比较方便。shp文件的结构还算简单,所以也没遇到什么难题,只是文件头的前几十个字节是big Endian的需要自己去写一个转换成Little Endian的方法,起初在网上查了很多资料都实现的很复杂,结果自己想清楚了以后,用BitConvert转换两次,只三行代码就搞定了.另外一个要注意的地方是:C#里是用的unicode编码,char是占两个字节的字符型,而byte才是占一个字节的整型,这一点与C++不同,在写数据结构的时候可能容易搞混。
与之关联的db