开发者

python使用pyshp读写shp文件的实现

开发者 https://www.devze.com 2023-03-29 09:27 出处:网络 作者: 代码就是bug
目录安装引入读取shapes与shaperecords与recordshapeRecordsfields写入安装 pip install pyshp
目录
  • 安装
  • 引入
  • 读取
    • shapes与shape
    • records与record
    • shapeRecords
    • fields
  • 写入

    安装

    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

    # 同时读取geomwww.devze.cometry 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'
    php]
    def tramform(lat_lng):
      str =lat_lng
      str = str.split(',')
      arr = []
      for i in rangpythone(len(str) - 1):
        # 第一列,第二列作为经纬度(x,y)创建点
        if i % 2 == 0:
          arr.append([phpfloat(str[i]), float(str[i + 1])])
      return arr
    fileWrite = shapefile.Writer("create/1.shp",enco开发者_Python学习ding='utf-8') # 新建数据存放位置
    
    # shp文件属性字段 Fid,Shape会自动生成。
    fileWrite.field('landid')
    fileWrite.field('landName')
    
    for i in range(len(landlist)):
      # 第一步:塞入形状
      ## 这个形js状指的就是那些点的集合
      ## 由于源码中要求的输入是列表,因此就算只塞入一个,也要套一个列表
      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()

    到此这篇关于python使用pyshp读写shp文件的实现的文章就介绍到这了,更多相关pyshp读写shp内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消