123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- from qgis.core import (
- QgsProject,
- QgsVectorLayer,
- QgsProcessingFeatureSourceDefinition,
- QgsProcessing,
- QgsApplication
- )
- from qgis.analysis import QgsNativeAlgorithms
- # 初始化 QGIS(适用于独立脚本)
- # 如果你在 QGIS 自带的 Python 控制台中运行,跳过这部分
- QgsApplication.setPrefixPath("/usr", True)
- qgs = QgsApplication([], False)
- qgs.initQgis()
- # 注册原生算法(若未启用)
- QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())
- # 加载矢量图层
- layer_path = "/path/to/your/input_layer.shp" # 替换为你的输入图层路径
- input_layer = QgsVectorLayer(layer_path, "Input Layer", "ogr")
- if not input_layer.isValid():
- print("Failed to load the input layer!")
- else:
- print("Input layer loaded successfully!")
- # 设置缓冲区参数
- buffer_distance = 10 # 缓冲区距离(单位取决于图层 CRS)
- output_path = "/path/to/your/output_buffer.shp" # 替换为输出文件路径
- # 调用缓冲区工具
- params = {
- 'INPUT': QgsProcessingFeatureSourceDefinition(input_layer.source(), selectedFeaturesOnly=False),
- 'DISTANCE': buffer_distance, # 缓冲区距离
- 'SEGMENTS': 4, # 缓冲区边界平滑度(更多段数更平滑)
- 'END_CAP_STYLE': 2, # 端点样式:0=圆角,1=平端,2=尖角
- 'JOIN_STYLE': 2, # 节点连接样式:0=圆角,1=斜接,2=尖角
- 'MITER_LIMIT': 2, # 斜接限值(仅当 JOIN_STYLE 为斜接时有效)
- 'DISSOLVE': False, # 是否溶解结果
- 'OUTPUT': output_path # 输出文件路径
- }
- # 运行缓冲区分析
- processing_output = QgsApplication.processingRegistry().algorithmById("native:buffer").run(params)
- if processing_output['OUTPUT']:
- print(f"Buffer created successfully: {output_path}")
- else:
- print("Buffer creation failed!")
- # 在 QGIS 中加载输出图层
- output_layer = QgsVectorLayer(output_path, "Buffered Layer", "ogr")
- QgsProject.instance().addMapLayer(output_layer)
- # 清理(适用于独立脚本)
- qgs.exitQgis()
|