个人标注:
安装可使用命令:pip install pyshp,使用前:import shapefile
GitHub地址(内有英文文档说明)

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

1、Python Shapefile Library的下载与安装:

Python Shapefile Library下载地址:https://code.google.com/p/pyshp/

Python Shapefile Library使用时无需安装,只需在Python程序中导入该模块文件即可(import shapefile,具体导入方法参考Python教程中模块的导入部分)

2、Shapefile文件的读操作

2.1 Python Shapefile Library提供了Reader类,通过创建Reader类的对象(如下面的sf)进行shapefile文件的读操作:

sf = shapefile . Reader (‘shapefile name’)

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

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

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

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

2.2.1“几何数据”的读取方法

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

              Shapes = sf.shapes( ),Shapes是一个列表(相当于一维数组),存放着该文件中所有的”几何数据”对象

Shape = sf.shape(0),Shape是第1个”几何数据”对象

通过shapeType,bbox,points,parts返回每个”几何数据”对象的属性信息:

Shapes(0).shapeType,返回第1个对象的数据类型属性(或者Shape.shapeType)

Shapes(2).bbox,返回第3个对象的数据范围(左下角的x,y坐标和右上角的x,y坐标)

Shape(3).points,返回第4个对象的所有点坐标

Shape(1).parts,返回第2个对象的每个”块”的第一个点坐标

2.2.2 “属性数据”的读取方法

”属性数据”通过Reader类的records( )record( )方法来读取,其区别和使用方法同shapes( )shape( )

”属性数据”的fields通过Reader类的fields方法来获取,其返回值为包括属性表每个字段的名称、数据类型、数据长度等的一个列表。

2.2.3 “几何数据”和”属性数据”同时读取的方法

通过Reader类的shapeRecords( )shapeRecord( )方法可以同时读取shapefile文件的”几何数据”和”属性数据”。

ShapeRecords = sf.shapeRecords( ).

ShapeRecords[0].shape.shapeType,返回第1个对象的”几何数据”的数据类型属性

ShapeRecords[0].record[1:3],返回第1个对象的”属性数据”的第2和第3个属性值

3 shapefile文件的写操作

3.1 Python Shapefile Library提供了Writer类,通过创建Writer类的对象(如下面的sf)进行shapefile文件的写操作:

sf = shapefile .Writer (shapeType = 1)

3.2 文件类型的确定

写shapefile文件时,首先要确定shapeType,可以通过以下两种方法确定:

1、在创建Writer类对象时直接确定shapeType,如上所示

2、通过为Writer类对象的shapeType属性赋值,如sf.shapeType = 1

3.3 “几何数据”与”属性数据”的自动平衡

shapefile文件要求”几何数据”与”属性数据”要有一一对应的关系,如果有”几何数据”而没有相应的属性值存在,那么在使用ArcGIS软件打开所创建的shapefile文件时会出错。为了避免这种情况的发生,可以设置 sf.autoBalance = 1,以确保每创建一个”几何数据”,该库会自动创建一个属性值(空的属性值)来进行对应。autoBalance默认为0。

3.4 shapefile文件的创建

shapefile文件的创建分为2步:

1、创建”几何数据”,通过Writer类的point(x,y,z,m)方法创建点数据,通过poly(parts = [ [ [1,5], [5,5], [5,1], [3,3], [1,1] ] ])方法创建线(parts有2个点)或多边形数据(parts > 2个点)。

2、创建”属性数据”,首先通过field()方法创建属性表字段,然后通过record()方法为每个几何数据添加相应的属性值。

(field的创建可以参见http://gis.stackexchange.com/questions/35593/using-the-python-shape-library-pyshp-how-to-convert-csv-file-to-shp)

例1:

>>>w = shapefile.Writer()

>>>w.autoBalance = 1

>>>w = shapefile.Writer(shapefile.POINT)

>>>w.point(1,1)

>>>w.point(3,1)

>>>w.point(4,3)

>>>w.point(2,2)

>>>w.field(‘FIRST_FLD’)

>>>w.field(‘SECOND_FLD’,’C’,’40’)     #’SECOND_FLD’为字段名称,C代表数据类型为字符串,长度为40

>>>w.record(‘First’,’Point’)

>>>w.record(‘Second’,’Point’)

>>>w.record(‘Third’,’Point’)

>>>w.record(‘Fourth’,’Point’)

>>>w.save(‘shapefiles/test/point’)

例2:

>>>w = shapefile.Writer()

>>>w.autoBalance = 1

>>>w = shapefile.Writer(shapefile.POLYGON)

>>>w.poly(parts=[[[1,5],[5,5],[5,1],[3,3],[1,1]]])

>>>w.field(‘FIRST_FLD’,’C’,’40’)

>>>w.field(‘SECOND_FLD’,’C’,’40’)

>>>w.record(‘First’,’Polygon’)

>>>w.save(‘shapefiles/test/polygon’)

例3:

>>>w = shapefile.Writer()

>>>w.autoBalance = 1

>>>w = shapefile.Writer(shapefile.POLYLINE)

>>>w.line(parts=[[[1,5],[5,5],[5,1],[3,3],[1,1]]])

>>>w.poly(parts=[[[1,3],[5,3]]], shapeType=shapefile.POLYLINE)

>>>w.field(‘FIRST_FLD’,’C’,’40’)

>>>w.field(‘SECOND_FLD’,’C’,’40’)

>>>w.record(‘First’,’Line’)

>>>w.record(‘Second’,’Line’)

>>>w.save(‘shapefiles/test/line’)

4 shapefile文件的编辑

4.1 Python Shapefile Library提供了Editor类,通过创建Editor类的对象(如下面的sf)进行shapefile文件的编辑:

sf = shapefile .Editor (‘shapefile name’)

4.2 编辑示例:

例1,增加一个点文件

>>>e = shapefile.Editor(shapefile=”shapefiles/test/point.shp”)

>>>e.point(0,0,10,2)            #注意,这里如果没有z值(10,即高度值)和M值(2,即测量值),编辑时可能会出现问题

>>>e.record(“Appended”,”Point”)

>>>e.save(‘shapefiles/test/point’)

例2,增加一条线

>>>e = shapefile.Editor(shapefile=”shapefiles/test/line.shp”)

>>>e.line(parts=[[[10,5],[15,5],[15,1],[13,3],[11,1]]])

>>>e.record(‘Appended’,’Line’)

>>>e.save(‘shapefiles/test/line’)

例3,增加一个多边形

>>>e = shapefile.Editor(shapefile=”shapefiles/test/polygon.shp”)

>>>e.poly(parts=[[[5.1,5],[9.9,5],[9.9,1],[7.5,3],[5.1,1]]])

>>>e.record(“Appended”,”Polygon”)

>>>e.save(‘shapefiles/test/polygon’)

例4,删除第一个点

>>>e = shapefile.Editor(shapefile=”shapefiles/test/point.shp”)

>>>e.delete(0)

>>>e.save(‘shapefiles/test/point’)

例5,删除最后一个多边形

>>>e = shapefile.Editor(shapefile=”shapefiles/test/polygon.shp”)

>>>e.delete(-1)

>>>e.save(‘shapefiles/test/polygon’)

本文参照Python Shapefile Library官方文档,可到其网站下载英文原版https://code.google.com/p/pyshp/

转载出处:http://blog.sina.com.cn/s/blog_b3a4f3f80101cye7.html

pyshp读写shapefile相关推荐

  1. pyshp读取Shapefile方法

    目录 说明 pyshp安装 读取shp 问题解决 说明 关于使用 Python 读写 ShapeFile 文件,我的另一篇博客做了简单介绍并用示范了 GDAL库 的简单使用方法. Python读写修改 ...

  2. Java 使用GDAL 读写 shapefile

    阅读目录 读取shp文件,并把它转化为json 写shp文件 回到顶部 读取shp文件,并把它转化为json import org.gdal.ogr.*; import org.gdal.ogr.Dr ...

  3. python文件读写用到的库_Python使用pyshp库读取shapefile信息的方法

    通过pyshp库,可以读写shapefile文件,查询相关信息,github地址为 import shapefile # 使用pyshp库 file = shapefile.reader(" ...

  4. python操作文件的库_Python使用pyshp库读取shapefile信息的方法

    通过pyshp库,可以读写Shapefile文件,查询相关信息,github地址为 https://github.com/GeospatialPython/pyshp#reading-shapefil ...

  5. python中pyshp_Python使用pyshp库读取shapefile信息的方法

    通过pyshp库,可以读写Shapefile文件,查询相关信息,github地址为 import shapefile # 使用pyshp库 file = shapefile.Reader(" ...

  6. shapefile文件(shp)读取

    shapefile是GIS中一种数据类型,在ArcGIS中被称为要素类(Feature Classes),主要包括点(point).线(polyline)和多边形(polygon). 解析geopan ...

  7. python3.6串口编程实例_Python3 串口接收与发送16进制数据包的实例

    Python3 串口接收与发送16进制数据包的实例 如下所示: import serial import string import binascii s=serial.Serial('com4',9 ...

  8. 【笔记】《Python地理空间分析指南(第2版)》

    转载地址:https://blog.csdn.net/jianbinzheng/article/details/80215228 概述部分 地理空间数据 地理空间技术概览 Python地理空间分析工具 ...

  9. python空间分析_读书笔记——《python地理空间分析指南》

    本文为<Python地理空间分析指南(第2版)>的读书摘录,顺便挖个坑,进一步对python的几个包做学习整理. 本笔记的用途:了解python地理空间处理的技术框架和实现途径. 第三章 ...

  10. dbf shp shx sbn sbx mdb adf等类型的文件的解释

    转自:ArcGIS学习记录-dbf shp shx sbn sbx mdb adf等类型的文件的解释 - 走看看 Shapefile file extensions(Shapefile 文件扩展名) ...

最新文章

  1. Android 绘制同心圆 (2个圆叠加在一起)
  2. Python爬虫入门教程 54-100 博客园等博客网站自动评论器
  3. 使用flask-WTF,Flask-Login,sqlite3实现登录和注册(前端登录和注册页面)
  4. 回顾以前的线程安全的类
  5. C++primer第九章 顺序容器 9.5 额外的string操作
  6. 什么从什么写短句_2020抖音文案短句:爱情、励志、伤感合集,值得收藏!
  7. sql server 统计_看SQL Server 2016中的新实时查询统计信息
  8. ios学习:Xcode工具
  9. httpclient 下载文件
  10. 计算机手机远程控制,手机怎么远程控制电脑?手机远程控制电脑步骤详解
  11. 完整的OpenDDS的发布订阅编写及源码(Windows)
  12. 马兰戈尼晶圆干燥系统
  13. 1.App Inventor开发环境构建
  14. 【SAP】PP模块术语
  15. JDK动态代理(通俗易懂,小白首选)
  16. python科学计算教程视频_【P14】Python科学计算与图形渲染库视频课程视频教程 it教程...
  17. Flutter 学习第三天 面向对象 和 库的使用
  18. springboot中使用jetty服务器
  19. 中国邮政国内给据邮件条码编码规则应用
  20. dubbo多协议配置

热门文章

  1. java计算机毕业设计商店管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  2. 产生式系统有哪几种推理方式?各自的特点?
  3. 使用cmd和excel完成批量复制所需文件夹和文件
  4. GNSS-RINEX3.04格式
  5. Java读取Rinex 2.11格式的观测值o文件
  6. Jmeter 接口测试post请求数据失败
  7. 火焰检测的相关步骤及算法综述
  8. DroidCam通过数据线调用手机摄像头的方法二
  9. 计算机图形学入门:什么是光线追踪?
  10. python爬虫+谷歌翻译json字符串