Shapefile在OGR中的表示

Python与开源GIS

Shapefile在OGR中的表示

2016-10-31 作者: jiping 浏览: 2357 次

摘要: ESRI Shapefile 所有的ESRI Shapefiles都应该可以被读出来,还有一些简单的3D文件也能够被创建。 正常情况下OGR Shapefile 驱动将一个目录的shapefiles看成一个数据集,并且在这个目录里面的 一个单一的shapefi...

ESRI Shapefile

所有的ESRI Shapefiles都应该可以被读出来,还有一些简单的3D文件也能够被创建。

正常情况下OGR Shapefile 驱动将一个目录的shapefiles看成一个数据集,并且在这个目录里面的 一个单一的shapefile做为one layer来看待。这样的话,这个目录名字应当被用作数据集的名字。然而 在shapefile文件集(包括.shp,.shx,.dbf)中用它们中的任何一个做为数据集的名字也是很有可能的 ,然后这个文件将被看作one layer 上的一个数据集。

当今shapefile 驱动总是返回polygons,而不是mutipolytons,那是因为polygons可以带着多重外环 这是一个OGR模型的过失,在将来的某个时候一定会被改正。如果ESRI遭遇了这个新的ESRI测量方法的 值会被丢弃。

如果在过去的arc/info的格式或新的ESRI OGC WKT 格式下有一个.prj文件组存在,这个文件组将会 可以读出来并且可用于一个工程的很多方面。

空间和属性索引

OGR shapefile 驱动支持空间索引和有限的一部分属性索引 空间所引用被用于UMN MapServer的有.qix后缀名树形空间索引文件。它不支持ESRI空间索引 文件(像.sbn/.sbx)。空间索引可以加速空间过滤从而通过大的数据集动态找出一小块区域。

用一个SQL 命令像这样的形式(create spatial index on tablename)可以创建一个空间索引 用这个一个命令(drop spatial index on tablename)可以删除一个空间索引。

现在ORG Shapefile 驱动仅仅支持属性索引来寻找空间值在一个唯一关键字的列中寻找。为了 为一列创建空间索引可以用一个SQL 命令像这样的形式(create index on tablename using fieldname) 删除它用这样的命令(drop index on tablename).这个属性缩影回家加速WHERE这样的语句表中(属性值 =value)这个属性索引以maninfo的格式索引存储的并且不与其他的shapefile应用程序相兼容。

创建命令

shapefile 驱动对待一个目录就像一个数据集,每一个shapefile集(.shp,.shx,and .dbf)做为 一层。这个数据集的名字将被做为一个目录名。如果这个数据集已经存在这个目录就还会被用并且这个 存在的目录会被忽略。如果这个目录不存在它将会被创建。

创建一个带.shp的数据集将会导致一个单一的文件集被作为一个目录(这是一个特殊的情况) ESRI shapefiles在每一层中仅仅能存储一种几何元素。创建这个文件的设置就依赖于源文件 (如果一个统一的几何元素类型从源驱动中得知),或者它可以直接由用户来通过层的创建选项SHPT来设置 如果层不创建将会失败。如果不匹配的几何类型被写进了层中,输出的时候将会以一个错误而中止。 要牢记使用ogr2ogr会使得将一个复杂的几何层从另一种格式转换为shapefile格式变得很复杂,因为ogr2ogr不支持从一个source层中将几何类型分离出来。

shapefile的特征属性存在一个相关.dbf文件中,因此attributes就有很多约束:

1、attribute 名字最多只能是12个字符。多于12个字符的名字会自动被截去。这可能回导致 有不惟一的列名,将来一定会引起问题。

2、仅仅支持Integer、Real 和 String类型的字段。各式各样的列表和二进制字段类型不能被 创建

3、字段的长度和精度直接用于在.dbf文件中建立存储的大小。这就意味着字符串长度长于字段 的宽度,或这个数字不适用与指定的字段格式将被裁减掉。

4、Integer的字段类型没有显示声明将被作为宽度是11

5、Real字段类型没有显示声明长度的用24来对待

6、string 字段没有分配大小的都以80个字符来看待。

还有,.dbf文件至少需要一个field,如果没有被应用程序创建,那么"fid"的字段将会自动创建,并用数字来记录它 ORG shapefile驱动支持在一个shapefile中重写已经存在的shape和删除shapes.删除shapes在 .dbf文件中用deletion来标记,然后再OGR中将被忽略。真正的删除它们使用通过datasource的ExecuteSQL 方法。

关注“开源集思”公众号
获取免费资源

随机推荐


Copyright © 2014-2019 OSGeo中国中心 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org