当前位置: 首页 > news >正文

python 使用pyshp读写shp文件

安装

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 = 0POINT = 1POLYLINE = 3POLYGON = 5MULTIPOINT = 8POINTZ = 11POLYLINEZ = 13POLYGONZ = 15MULTIPOINTZ = 18POINTM = 21POLYLINEM = 23POLYGONM = 25MULTIPOINTM = 28MULTIPATCH = 31print(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_lngstr = 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()
http://www.lryc.cn/news/42984.html

相关文章:

  • eNSP FTP基础配置实验
  • 堆及其多种接口与堆排序的实现
  • JNI原理及常用方法概述
  • 【Docker】之docker-compose的介绍与命令的使用
  • 水果新鲜程度检测系统(UI界面+YOLOv5+训练数据集)
  • flask多并发
  • 我用Python django开发了一个商城系统,已开源,求关注!
  • 大数据项目之数仓相关知识
  • RK3588平台开发系列讲解(视频篇)RTP H264 码流打包详解
  • realloc的补充 柔性数组
  • 【C语言】柔性数组
  • 【Linux】权限详解
  • Android 之 打开相机 打开相册
  • C语言数据结构初阶(8)----栈与队列OJ题
  • JavaScript——原型对象
  • 网络安全 2023 年为什么如此吃香?事实原来是这样....
  • (源码篇02)webpack5中的事件调度系统和NormalModuleFactary核心逻辑
  • Vue2.x源码:new Vue()做了啥?
  • WinForm | C# 弹出简易的消息提示框 (仿Android Toast消息提示)
  • 1、DRF实战总结:DRF特点、序列化与RESTful API规范
  • SIP协议及其简单介绍
  • 安全防御第四天:防病毒网关
  • Postman接口与压力测试实例
  • TCP/IP socket
  • “工作三年,跳槽要求涨薪50%”,合理吗?
  • Vue学习计划九:了解Vue动画效果以及过渡动画和动态组件的使用方法
  • 【Linux】进程理解与学习Ⅲ-环境变量
  • 【三】一起算法---栈:STL stack、手写栈、单调栈
  • 电路设计的一些概念
  • 【Linux】Linux下权限的理解