python使用pyshp读写shp文件的实现
作者:代码就是bug 时间:2023-10-02 04:07:13
安装
pip install pyshp
引入
import shapefile
读取
sf=shapefile.Reader("{路径名}",encoding='utf-8') # 仅仅读取
shapes与shape
shapes=sf.shapes() 返回值是一个列表,包含该文件中所有的”几何数据”对象
shape=sf.shape(0) Shape是第1个”几何数据”对象
shapeType返回集合类型
返回第1个对象的数据类型属性
几何类型
NULL = 0
POINT = 1
POLYLINE = 3
POLYGON = 5
MULTIPOINT = 8
POINTZ = 11
POLYLINEZ = 13
POLYGONZ = 15
MULTIPOINTZ = 18
POINTM = 21
POLYLINEM = 23
POLYGONM = 25
MULTIPOINTM = 28
MULTIPATCH = 31
print(shape.shapeType)
bbox 返回数据范围
shape.bbox 返回第一个集合对象的数据范围(左下角的x,y坐标和右上角的x,y坐标)
points 所有坐标点
shape.points 返回第一个集合对象的所有坐标点
parts 返回’块’的第一个点坐标
shape.parts 返回第一个对象的每个”块”的第一个点坐标
records与record
获取属性列表
records
获取属性列表,是个函数
sf.records();
返回的值是个list
record
获取一条数据
sf.record(0)
返回的值是class
shapeRecords
同时获取record和shape
# 同时读取geometry and records
sf.shapeRecords()
获取所有
red=sf.shapeRecords()[0] #获取第一条数据
print(red.record) #获取record
print(red.shape) #获取shape
fields
获取shp文件属性字段
print(sf.fields)
[('DeletionFlag', 'C', 1, 0), ['OBJECTID', 'N', 9, 0], ['BSM', 'C', 12, 0], ['PXZQDM', 'C', 2, 0], ['PXZQMC', 'C', 50, 0]]
写入
import shapefile
outshp = 'a.shp'
landlist=[ '84.60212,45.03658,84.60794,45.03938,84.61473,45.04151,84.62442,45.04375,84.62727,45.03632,84.63939,45.0367,84.64906,45.03277,84.63886,45.02233',
'84.58063,45.05523,84.57974,45.04717,84.59864,45.04792,84.60078,45.05523,84.58758,45.05473,84.58223,45.05523'
]
def tramform(lat_lng):
str =lat_lng
str = str.split(',')
arr = []
for i in range(len(str) - 1):
# 第一列,第二列作为经纬度(x,y)创建点
if i % 2 == 0:
arr.append([float(str[i]), float(str[i + 1])])
return arr
fileWrite = shapefile.Writer("create/1.shp",encoding='utf-8') # 新建数据存放位置
# shp文件属性字段 Fid,Shape会自动生成。
fileWrite.field('landid')
fileWrite.field('landName')
for i in range(len(landlist)):
# 第一步:塞入形状
## 这个形状指的就是那些点的集合
## 由于源码中要求的输入是列表,因此就算只塞入一个,也要套一个列表
arr=[]
arr=tramform(landlist[i])
#[[84.60212, 45.03658], [84.60794, 45.03938], [84.61473, 45.04151], [84.62442, 45.04375], [84.62727, 45.03632], [84.63939, 45.0367], [84.64906, 45.03277], [84.63886, 45.02233]]
#poly 写入面,点线面使用不同函数
fileWrite.poly([arr])
# 第二步:塞入属性值
fileWrite.record(str(i), '地块')
# 保存结束
fileWrite.close()
来源:https://blog.csdn.net/XKFC1/article/details/129776683
标签:python,pyshp,读写,shp
0
投稿
猜你喜欢
关于PySnooper 永远不要使用print进行调试的问题
2022-12-08 10:29:35
IPython 8.0 Python 命令行交互工具
2022-10-24 09:17:54
python3实现弹弹球小游戏
2021-04-21 07:12:56
分享下GET和POST的真正区别
2023-10-19 23:23:09
vertical-align表单元素垂直对齐
2009-07-27 13:02:00
Vue下滚动到页面底部无限加载数据的示例代码
2024-06-05 15:31:44
javascript 兼容所有浏览器的DOM扩展功能
2024-04-16 09:52:04
Pytorch1.5.1版本安装的方法步骤
2021-02-07 00:57:09
使用Python实现图像融合及加法运算
2021-03-03 06:19:42
php二分查找二种实现示例
2023-11-21 00:40:13
Python中关于文件的具体操作与介绍
2022-03-25 20:27:24
python对批量WAV音频进行等长分割的方法实现
2023-01-29 18:21:21
Python实现的读取/更改/写入xml文件操作示例
2023-06-05 05:16:42
Visual Studio Code搭建django项目的方法步骤
2022-11-28 22:04:00
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021-02-11 08:06:31
Python PyQt拖动控件对齐到网格的方法步骤
2022-05-04 19:25:00
Mysql存储引擎MyISAM的常见问题(表损坏、无法访问、磁盘空间不足)
2024-01-14 22:07:53
五个基于JS实现的炫酷登录页面
2024-04-17 09:43:25
python实现双链表
2022-06-20 01:47:48
python猜数字小游戏实现代码
2022-04-20 19:01:43