123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- from qgis._core import QgsWkbTypes
- from qgis.core import (
- QgsVectorLayer,
- QgsFeature,
- QgsField,
- QgsVectorFileWriter
- )
- import os
- # 输入Shapefile路径
- input_shp = "E:\\projects\\遥感技术部需求\\裁剪栅格\\data\\grid0.shp"
- # 加载输入Shapefile图层
- input_layer = QgsVectorLayer(input_shp, "input_layer", "ogr")
- # 检查图层是否有效
- if not input_layer.isValid():
- print("Failed to load input layer")
- else:
- print("Input layer loaded successfully")
- # 获取输入图层的字段信息
- fields = input_layer.fields()
- # 输出目录路径(所有新的Shapefile文件会保存在这个目录下)
- output_dir = "E:\\projects\\遥感技术部需求\\裁剪栅格\\output\\"
- # 遍历输入图层的所有要素,并为每个要素保存一个单独的Shapefile文件
- for idx, feature in enumerate(input_layer.getFeatures()):
- # 获取当前要素的几何数据
- geometry = feature.geometry()
- # 创建一个新的 Shapefile 文件名,可以使用索引或 ID 来命名
- output_shp = os.path.join(output_dir, f"output_{idx + 1}.shp")
- # 创建一个新的Shapefile图层来保存单个几何
- # 我们假设输入图层是多边形类型,若输入为其他类型,需修改
- output_layer = QgsVectorLayer(f"{input_layer.geometryType()}?crs={input_layer.crs().authid()}", f"output_{idx + 1}",
- "memory")
- output_layer_data_provider = output_layer.dataProvider()
- # 将输入图层的字段添加到新图层中
- output_layer_data_provider.addAttributes(fields) # 添加字段到数据提供者
- output_layer.updateFields() # 更新字段信息
- # 创建一个新的要素并设置其几何和属性
- new_feature = QgsFeature()
- new_feature.setGeometry(geometry)
- new_feature.setAttributes(feature.attributes())
- # 将新的要素添加到新图层
- output_layer_data_provider.addFeature(new_feature)
- # 创建输出shapefile
- writer = QgsVectorFileWriter(output_shp, 'UTF-8', fields, QgsWkbTypes.MultiPolygon, input_layer.crs(),
- 'ESRI Shapefile')
- writer.addFeature(feature)
- # 完成写入并关闭输出文件
- del writer
|