基于Python的地理遥感图像批量处理--按照属性表拆分shp文件

用于将大shp文件按照属性表分割成多个小shp

  • 将大shp的所有面要素独立成单一的面要素

代码

import os, shapefile, shutil

if __name__ == '__main__':
    mapBasePolyShpFile = r'xxx\xxxx_Project.shp'
    # 目标文件 夹 存放地址
    folderPolyAimMap = r'xxx\yyyy\shp'
    # 原文件的投影地址
    projectionFile = r'xxx\xxxx_Project.prj'

    print('Start...')
    rPolyShp = shapefile.Reader(mapBasePolyShpFile)
    for numFlag in range(rPolyShp.numRecords):
        fileName = f'1_3_{numFlag + 1}'
        # 目标Shp文件地址
        aimPolyMap = fr'{folderPolyAimMap}\{fileName}.shp'
        wPolyShp = shapefile.Writer(target=aimPolyMap, shapeType=5)
        # 添加名为'Size'的浮点型,6位有效,2位小数点的字段
        wPolyShp.field('Size', 'F', 6, 2)

        # 读取原文件第一个要素的线点集
        # 添加异常处理,以防存在空Shp文件
        try:
            baseLinkPoint = [[list(i) for i in rPolyShp.shape(numFlag).points]]
        except IndexError:
            shutil.copy(projectionFile, f'{aimPolyMap[:-4]}.prj')
            continue
        # 将线点集写入到面点击中
        wPolyShp.poly(baseLinkPoint)

        # 写入面积信息
        wPolyShp.record(shapefile.signed_area(rPolyShp.shape(numFlag).points))

        # 关闭写文件
        wPolyShp.close()
        # 这里偷懒,已知'.shp'这个字符串的len
        shutil.copy(projectionFile, f'{aimPolyMap[:-4]}.prj')
        print(numFlag, '已经完成')
    print('End...')


效果:
Input

在这里插入图片描述
Output
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值