PyQGIS学习笔记-测量代码

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 坐标状态
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值