python与开源gis的资源 pdf_Python

使用pyshp读写Shapefile

Python Shapefile库(pyshp)为Esri Shapefile格式提供读写支持。 Shapefile格式是Esri创建的较为流行的地理信息系统矢量数据格式。

更多信息,请阅读 http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf 的“ESRI Shapefile技术说明 - 1998年7月”。 Esri文档主要讲的是shp和shx文件格式。 但dbf格式其实很常用。 这种格式作为“XBase文件格式描述”常作为网络上记录,dbf格式是在20世纪60年代创建的,是较为简单的基于文件的数据库格式。

shapefile是GIS中非常重要的一种数据类型,在ArcGIS中被称为要素类(Feature Classes),主要包括点(point)、线(polyline)和多边形(polygon)。Python脚本是ArcGIS官方推荐的脚本语言,Python脚本调用ArcGIS中各种工具和函数并且还能批量完成所需操作。本文介绍的Python Shapefile Library是一个Python库,在Python脚本中用于读取对ArcGIS中的Shapefile文件(.shp,.shx,.dbf等格式)。

Esri和XBase文件格式在设计和存储效率方面非常适宜,这是shapefile格式流行的原因之一,尽管当今存储和交换GIS数据的方法众多。

Pyshp与Python 2.4-3.x兼容。本文档提供的是pyshp读写shapefile的示例。 然而,更多的例子在GitHub pyshp wiki中,博客 http://GeospatialPython.com ,还可以通过 http://gis.stackexchange.com 搜索pyshp。

目前,示例中引用的样本人口普查块组shapefile可在GitHub项目网站 https://github.com/GeospatialPython/pyshp 上获得。 这些例子是开箱即用,你也可以轻松地运行它,只需要对你自己的shapefile小小的修改即可。

提示:如果您是GIS新手,您应该阅读有关地图投影的相关信息。 请访问:https://github.com/GeospatialPython/pyshp/wiki/Map-Projections

我真诚地希望这个简单地读取并写入数据,真诚地您日后可关注一些地理空间项目的具有挑战与有趣的部分。

Python Shapefile Library的下载与安装

Python Shapefile Library下载地址:https://code.google.com/p/pyshp/ ,目前已托管到 GitHub 中。

Python Shapefile Library是一个纯 Python 库,使用时无需安装,只需在Python程序中导入该模块文件即可。

In [1]:

import shapefile

在做任何操作之前,您必须导入库。

以下示例将使用美国人口普查局Blockgroups数据集创建的shapefile,(美国人口普查局,位于加利福尼亚州旧金山附近),可在pyshp GitHub站点的github存储库中找到。具体导入方法请参考 Python 教程中模块的导入章节。

读取Shapefile

Python Shapefile Library提供了Reader类功能,可创建Reader类的对象,完成shapefile文件的读操作。

使用的是Python Shapefile Library读取shapefile文件的"几何数据"(Geometry)和"属性数据"(Attribute Record)

"几何数据"一般由多个几何对象组成,比如一个"点文件",每个点就是一个对象;对于一个多边形文件,每个对象可能包含多个多边形,每个多边形又称为"块(parts)",每个 "块"由多个点组成。

每个几何对象包含4个属性:数据类型(shapeType),代表该"几何数据"对象的数据类型(点,shapeType=1,线,shapeType=3,多边形,shapeType=5);数据范围(bbox),只针对多点数据,代表该"几何数据"对象的边界范围;数据块(parts),只针对线或者多边形,代表该"几何数据"对象各个块的第一个点的索引;点集(points),代表该"几何数据"对象的所有点坐标。

"属性数据"即每个"几何数据"对象在属性表中的对应项。

若要读取shapefile,需创建一个新的“Reader”对象,命名为现有shapefile的名称。 shapefile格式可以写成以下三种文件格式:

In [2]:

import shapefile

sf = shapefile.Reader("/gdata/GSHHS_c")

您可以指定shapefile的基本文件名或任何shapefile组件的完整文件名。

或者

In [3]:

sf = shapefile.Reader("/gdata/GSHHS_c.shp")

或者

In [4]:

sf = shapefile.Reader("/gdata/GSHHS_c.dfb")

或任何一种均是shapefile的格式。 库对文件扩展名并无严格限定。

从文件类对象读取shapefile

在任意Python文件对象中您还可以用关键字参数加载shapefile,可以指定三个文件中的任何一个。 此功能非常强大,您可以从url,zip文件,序列化对象或某些情况下的数据库中加载shapefile。

In [5]:

myshp = open("/gdata/GSHHS_c.shp", "rb")

mydbf = open("/gdata/GSHHS_c.dbf", "rb")

r = shapefile.Reader(shp=myshp, dbf=mydbf)

注意在述示例中,shx文件从不使用。 shx文件是shp文件中的可变长度记录的非常简单的固定记录索引。该文件的可读性是可选的。 如果可用pyshp将使用shx文件访问形状记录一点更快,但会做没有它只是没有它。

"几何数据"的读取方法

"几何数据"通过Reader类的shapes( )和shape( )方法读取,二者的区别在于:shapes()方法不需要指定参数,其返回值是一个列表,包含该文件中所有的"几何数据"对象,而shape( )方法需要指定参数,返回的是所需要的"几何数据"对象。

shapefile的几何形状是表示物理位置的隐含弧形的点或形状的集合。 所有类型的shapefile只存储点。

你可以调用shapes()方法获得shapefile的几何列表。

In [6]:

shapes = sf.shapes()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值