Shapefile文件

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Shapefile文件是美国环境系统研究所(ESRI)所研制的GIS文件系统格式文件,是工业标准的矢量数据文件。Shapefile将空间特征表中的非拓扑几何对象和属性信息存储在数据集中,特征表中的几何对象存为以坐标点集表示的图形文件—SHP文件,Shapefile文件并不含拓扑(Topological)数据结构。一个Shape文件包括三个文件:一个主文件(*.shp),一个索引文件(*.shx),和一个dBASE(*.dbf)表。主文件是一个直接存取,变长度记录的文件,其中每个记录描述构成一个地理特征(Feature)的所有vertices坐标值。在索引文件中,每条记录包含对应主文件记录距离主文件头开始的偏移量,dBASE表包含SHP文件中每一个Feature的特征属性,表中几何记录和属性数据之间的一一对应关系是基于记录数目的ID。在dBASE文件中的属性记录必须和主文件中的记录顺序是相同的。图形数据和属性数据通过索引号建立一一对应的关系。

Shapefile中坐标文件(.shp)由固定长度的文件头和接着的变长度空间数据记录组成。文件头由100字节的说明信息组成的(附表1),主要说明文件的长度、Shape类型、整个Shape 图层的范围等等,这些信息构成了空间数据的元数据。在导入空间数据时首先要读入文件头获取Shape文件的基本信息,并以此信息为基础建立相应的元数据表。而变长度空间数据记录是由固定长度的记录头和变长度记录内容组成,其记录结构基本类似,每条记录都有记录头和记录内容组成(空间坐标对)。记录头的内容包括记录号(Record Number)和坐标记录长度(Content Length)两个记录项,Shapefile文件中的记录号都是从1开始的,坐标记录长度是按16位字来衡量的。记录内容包括目标的几何类型(ShapeType)和具体的坐标记录(X,Y),记录内容因要素几何类型的不同,其具体的内容和格式都有所不同。

属性文件(.dbf)用于记录属性信息。它是一个标准的DBF文件,也是由头文件和实体信息两部分构成。其中文件头部分的长度是不定长的,它主要对DBF文件作了一些总体说明(附表3),其中最主要的是对这个DBF文件的记录项的信息进行了详细的描述(附表4),比如对每个记录项的名称,数据类型,长度等信息都有具体的说明。属性文件的实体信息部分就是一条条属性记录,每条记录都是由若干个记录项构成,因此只要依次循环读取每条记录就可以了。

索引文件(.shx)主要包含坐标文件的索引信息,文件中每个记录包含对应的坐标文件记录距离坐标文件的文件头的偏移量。通过索引文件可以很方便地在坐标文件中定位到指定目标地坐标信息。索引文件也是由文件头和实体信息两部分构成的,其中文件头部分是一个长度固定(100 bytes)的记录段,其内容与坐标文件的文件头基本一致。它的实体信息以记录为基本单位,每一条记录包括偏移量(Offset)和记录段长度(Content Length)两个记录项。

1.Shapefile文件介绍 shapefile是一种基于文件方式存储GIS数据的文件格式,是GIS中比较通用的一种数据格式。至少由.shp,.dbf,.shx三个文件组成:

∙.shp–储存地理要素的几何关系的文件

∙.shx–储存图形要素的几何索引的文件

∙.dbf–储存要素属性信息的dBase文件有时候还会出现一下文件:

∙.shn–当执行类似选择“主题之主题”,“空间连接”等操作,或者对一个主题(属性表)的shape字段创建过一个索引,就会出现这个文件

.ain和.aih–储存地理要素主体属性表或其他表格的活动字段的属性索引信息的文件。当之行过“表格链接(link)操作,这两个文件就会出现。2.Shapefile 文件解析

(1)文件读取

public static void main(String[] args) {

try {

// 第一步:我们需要给出连接Shapefile文件的参数

// 并且把这些参数信息组织到一个Map实例中

URL url = new File("您的shapefile文件,以.shp结尾").toURI().toURL(); Map params = new HashMap();

params.put("url", url);

// 还可以加入其他参数,这里以最简单的形式给出示例。

// 第二步:根据刚才参数的信息,打开一个连接到Shapefile文件的数据源 DataStore dataStore = DataStoreFinder.getDataStore(params);

// 从dataStore中获取Shapefile类型名称。

// Shapefile文件名称和Shapefile类型名称通常是一样的。

// 此处dataStore现在是基于Shapefile创建的, 所以TypeName就是Shapefile文件名称。

String typeName = dataStore.getTypeNames()[0];

System.out.println("::::typeName is " + typeName);

// 第三步:根据Shapefile类型名称,从dataStore中获取的一个对象

FeatureSource featureSource = dataStore.getFeatureSource(typeName); FeatureCollection featureCollection = featureSource.getFeatures(); // 该FeatureCollection类的实例中存放着0...N个的对象。

FeatureIterator features = featureCollection.features();

while (features.hasNext()) {

// 对Layer核心的操作都是针对的是要素的操作。所以,这里为我们提供了要素。

Feature feature = features.next();

// 我们将Gis看成是一组基于数据的服务,而数据的基础是要素(Feature)。 // 所谓要素简单的说就是一个独立的对象,在地图中可能表现为一个多边形的建筑物,

// 在数据库中即一个独立的条目。

// 要素具有两个必要的组成部分,几何信息和属性信息。

// 我们这里每一要素(Feature)类的对象中存放着

// 一个几何信息(Geometry)类的对象,和许多属性信息(attributes)。

Geometry defaultGeometry = feature.getDefaultGeometry();

System.out.println("defaultGeometry:::::>>>>>:"

+ defaultGeometry.toString());

}

// 我们也可以获得要素类型。

// 何谓要素类型?相同的几何类型、属性类型的组合成为要素类型.

// 要素类型相同的要素可以被存放在一个数据源中,而一个数据源只能拥有

相关文档
最新文档