pyshp读写shapefile
个人标注:
安装可使用命令: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相关推荐
- pyshp读取Shapefile方法
目录 说明 pyshp安装 读取shp 问题解决 说明 关于使用 Python 读写 ShapeFile 文件,我的另一篇博客做了简单介绍并用示范了 GDAL库 的简单使用方法. Python读写修改 ...
- Java 使用GDAL 读写 shapefile
阅读目录 读取shp文件,并把它转化为json 写shp文件 回到顶部 读取shp文件,并把它转化为json import org.gdal.ogr.*; import org.gdal.ogr.Dr ...
- python文件读写用到的库_Python使用pyshp库读取shapefile信息的方法
通过pyshp库,可以读写shapefile文件,查询相关信息,github地址为 import shapefile # 使用pyshp库 file = shapefile.reader(" ...
- python操作文件的库_Python使用pyshp库读取shapefile信息的方法
通过pyshp库,可以读写Shapefile文件,查询相关信息,github地址为 https://github.com/GeospatialPython/pyshp#reading-shapefil ...
- python中pyshp_Python使用pyshp库读取shapefile信息的方法
通过pyshp库,可以读写Shapefile文件,查询相关信息,github地址为 import shapefile # 使用pyshp库 file = shapefile.Reader(" ...
- shapefile文件(shp)读取
shapefile是GIS中一种数据类型,在ArcGIS中被称为要素类(Feature Classes),主要包括点(point).线(polyline)和多边形(polygon). 解析geopan ...
- python3.6串口编程实例_Python3 串口接收与发送16进制数据包的实例
Python3 串口接收与发送16进制数据包的实例 如下所示: import serial import string import binascii s=serial.Serial('com4',9 ...
- 【笔记】《Python地理空间分析指南(第2版)》
转载地址:https://blog.csdn.net/jianbinzheng/article/details/80215228 概述部分 地理空间数据 地理空间技术概览 Python地理空间分析工具 ...
- python空间分析_读书笔记——《python地理空间分析指南》
本文为<Python地理空间分析指南(第2版)>的读书摘录,顺便挖个坑,进一步对python的几个包做学习整理. 本笔记的用途:了解python地理空间处理的技术框架和实现途径. 第三章 ...
- dbf shp shx sbn sbx mdb adf等类型的文件的解释
转自:ArcGIS学习记录-dbf shp shx sbn sbx mdb adf等类型的文件的解释 - 走看看 Shapefile file extensions(Shapefile 文件扩展名) ...
最新文章
- Android 绘制同心圆 (2个圆叠加在一起)
- Python爬虫入门教程 54-100 博客园等博客网站自动评论器
- 使用flask-WTF,Flask-Login,sqlite3实现登录和注册(前端登录和注册页面)
- 回顾以前的线程安全的类
- C++primer第九章 顺序容器 9.5 额外的string操作
- 什么从什么写短句_2020抖音文案短句:爱情、励志、伤感合集,值得收藏!
- sql server 统计_看SQL Server 2016中的新实时查询统计信息
- ios学习:Xcode工具
- httpclient 下载文件
- 计算机手机远程控制,手机怎么远程控制电脑?手机远程控制电脑步骤详解
- 完整的OpenDDS的发布订阅编写及源码(Windows)
- 马兰戈尼晶圆干燥系统
- 1.App Inventor开发环境构建
- 【SAP】PP模块术语
- JDK动态代理(通俗易懂,小白首选)
- python科学计算教程视频_【P14】Python科学计算与图形渲染库视频课程视频教程 it教程...
- Flutter 学习第三天 面向对象 和 库的使用
- springboot中使用jetty服务器
- 中国邮政国内给据邮件条码编码规则应用
- dubbo多协议配置