状态栏显示信息逻辑如下:
显示坐标参考系统
找到init_qgis_map
方法,在初始化画布的时候,设置状态栏的坐标参考系统
set_status_crs(main.ui.label_crs, main.preview_canvas)
|
main.ui.label_crs
:为QLabel控件
设置代码如下:
def set_status_crs(label: QLabel, canvas: QgsMapCanvas): canvas.mapSettings().destinationCrs().description() map_setting: QgsMapSettings = canvas.mapSettings() label.setText(f"坐标系: {map_setting.destinationCrs().description()}-{map_setting.destinationCrs().authid()}")
|
监听鼠标移动
QGIS的画布已经提供该监听方法,
main.preview_canvas.xyCoordinates.connect(lambda point: set_status_xy( _ui.edit_coords_default_value, _ui.edit_coords_value, main.preview_canvas, point))
|
- point:即为监听方法传递的坐标信息,对应的是鼠标此刻位置
set_status_xy为显示的方法,其接受参数如下
_ui.edit_coords_default_value
:控件,显示默认坐标系坐标
_ui.edit_coords_value
:控件,显示转换的坐标`
main.preview_canvas
:当前画布
point
:当前点
显示坐标
def set_status_xy(label_origin, label_latlon, canvas: QgsMapCanvas, point: QgsPointXY): label_origin.setText(f'{point.x():.0f}, {point.y():.0f}') convert_point = convert_to_wgs84(QgsCoordinateReferenceSystem(canvas.mapSettings().destinationCrs().authid()), point) label_latlon.setText(f'{convert_point.y():.5f}°, {convert_point.x():.5f}°') label_latlon.setCursorPosition(0)
|
坐标转换方法
from qgis._core import QgsCoordinateReferenceSystem, QgsCoordinateTransform, QgsCoordinateTransformContext, QgsPointXY def convert_to_wgs84(src_crs, point: QgsPointXY): """ 转换到 EPSG:4326 坐标系 :param src_crs: 原始坐标系 :param point: :return: """ dest_crs = QgsCoordinateReferenceSystem("EPSG:4326") crs_tras = QgsCoordinateTransform(src_crs, dest_crs, QgsCoordinateTransformContext()) return crs_tras.transform(point)
|