PyQGIS学习笔记
1.测量代码
定义一个类并初始化一些属性、canvasPressEvent用于标点、calculate_distance用于计算距离
from qgis.gui import QgsMapTool
from qgis.PyQt.QtCore import Qt
from qgis.core import QgsDistanceArea
class MeasureDistanceTool(QgsMapTool):
def __init__(self, canvas, distance_label):
super(MeasureDistanceTool, self).__init__(canvas)
self.canvas = canvas
self.start_point = None
self.end_point = None
self.distance_area = QgsDistanceArea()
self.distance_label = distance_label # 存储 distance_label 控件
self.distance = None
def canvasPressEvent(self, event):
if event.button() == Qt.LeftButton:
if self.start_point is None:
self.start_point = self.toMapCoordinates(event.pos())
elif self.end_point is None:
self.end_point = self.toMapCoordinates(event.pos())
self.distance = self.calculate_distance()
if self.distance_label:
self.distance_label.setText(f"距离: {self.distance:.2f} 米")
self.start_point = None
self.end_point = None
def calculate_distance(self):
if self.start_point and self.end_point:
return self.distance_area.measureLine(self.start_point, self.end_point)
else:
return 0.0
调用
// QT中设置号的按钮调用测量函数
self.punctuate.triggered.connect(self.actionpunctuate)
实例化和定义测量函数
def actionpunctuate(self):
# 创建并使用自定义测量工具 MeasureDistanceTool
measure_tool = MeasureDistanceTool(self.mapCanvas, self.distanceLabel)
self.mapCanvas.setMapTool(measure_tool)
更新测量值,以便在状态栏显示
def update_measure_num(self, distance, measureNum):
measureNum = distance # 更新测量值
# 在这里可以执行任何其他与测量结果相关的操作
print(f"距离: {distance:.2f} 米"
状态栏中显示
measureNum = 0
# 8 状态栏控件
self.distanceLabel = self.findChild(QLabel, "distanceLabel") # 找到 distanceLabel 控件
self.distanceLabel = QLabel('距离' + " " + str(measureNum)) # x y 坐标状态