rasterbuffer.py 2.0 KB

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