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