2025-10-13 05:49:55 +00:00
|
|
|
|
#include "ManualLabelToolWidget.h"
|
|
|
|
|
|
#include <qdockwidget.h>
|
|
|
|
|
|
#include <qgslayertreeview.h>
|
|
|
|
|
|
#include <qgslayertreemodel.h>
|
|
|
|
|
|
#include <qgslayertreemapcanvasbridge.h>
|
2025-10-16 15:27:38 +00:00
|
|
|
|
<<<<<<< HEAD
|
2025-10-13 05:49:55 +00:00
|
|
|
|
#include <qgslayertreeview.h>
|
|
|
|
|
|
#include <qgslayertreemapcanvasbridge.h>
|
|
|
|
|
|
#include <qlabel.h>
|
|
|
|
|
|
#include <qstatusbar.h>
|
|
|
|
|
|
#include <QMenuBar>
|
|
|
|
|
|
#include <QToolBar>
|
|
|
|
|
|
#include <qgsmapcanvas.h>
|
|
|
|
|
|
#include <qgsrasterlayer.h>
|
|
|
|
|
|
#include <qgsmaptoolpan.h>
|
|
|
|
|
|
#include <qgsunittypes.h>
|
|
|
|
|
|
#include <QString>
|
|
|
|
|
|
#include <qgis.h>
|
|
|
|
|
|
#include <QgsMapSettings.h>
|
|
|
|
|
|
#include <QFile>
|
|
|
|
|
|
#include <QFileDialog>
|
|
|
|
|
|
#include <QDialog>
|
|
|
|
|
|
#include <QString>
|
|
|
|
|
|
#include <qfileinfo.h>
|
|
|
|
|
|
#include <qdir.h>
|
|
|
|
|
|
#include <qgsmaplayer.h>
|
|
|
|
|
|
#include <qgsproject.h>
|
|
|
|
|
|
//QgsUnitTypes
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲ<EFBFBD><CAB2><EFBFBD>
|
|
|
|
|
|
#define RASTERFILEFILTER u8"<22><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD> (*.*);;TIF (*.tif);;TIFF (*.tiff);;bin (*.bin);;dat (*.dat);;"
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-10-16 15:27:38 +00:00
|
|
|
|
=======
|
|
|
|
|
|
>>>>>>> bc199244a3370d5bb7d3f52d5c17e6e2c467f20a
|
2025-10-13 05:49:55 +00:00
|
|
|
|
|
|
|
|
|
|
ManualLabelToolWidget::ManualLabelToolWidget(QWidget *parent)
|
|
|
|
|
|
: QMainWindow(parent)
|
|
|
|
|
|
{
|
|
|
|
|
|
this->init_UI();
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ManualLabelToolWidget::~ManualLabelToolWidget()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void ManualLabelToolWidget::init_UI()
|
|
|
|
|
|
{
|
2025-10-16 15:27:38 +00:00
|
|
|
|
<<<<<<< HEAD
|
2025-10-13 05:49:55 +00:00
|
|
|
|
this->setWindowTitle(tr(u8"AI<EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC>С
|
|
|
|
|
|
{
|
|
|
|
|
|
this->resize(1920,1080);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
|
|
|
|
|
|
{
|
|
|
|
|
|
// 1. inti map canvas
|
|
|
|
|
|
this->map_canvas = new QgsMapCanvas();
|
|
|
|
|
|
this->setCentralWidget((this->map_canvas));
|
|
|
|
|
|
|
|
|
|
|
|
// 2. map tool pan
|
|
|
|
|
|
this->map_tool_pan = new QgsMapToolPan(this->map_canvas);
|
|
|
|
|
|
this->map_canvas->setMapTool(this->map_tool_pan);
|
|
|
|
|
|
|
|
|
|
|
|
// 3. map layer manager
|
|
|
|
|
|
this->map_layerTreeView = new QgsLayerTreeView(this);
|
|
|
|
|
|
// 4. create map model
|
|
|
|
|
|
this->map_layerModel = new QgsLayerTreeModel(QgsProject::instance()->layerTreeRoot(), this);
|
|
|
|
|
|
this->map_layerModel->setFlag(QgsLayerTreeModel::AllowNodeRename); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
this->map_layerModel->setFlag(QgsLayerTreeModel::AllowNodeReorder); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>
|
|
|
|
|
|
this->map_layerModel->setFlag(QgsLayerTreeModel::AllowNodeChangeVisibility); // <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1>ɼ<EFBFBD><C9BC><EFBFBD>
|
|
|
|
|
|
this->map_layerModel->setFlag(QgsLayerTreeModel::ShowLegendAsTree); // <20><><EFBFBD><EFBFBD>״ͼ<D7B4><CDBC>ʾͼ<CABE><CDBC>
|
|
|
|
|
|
this->map_layerModel->setAutoCollapseLegendNodes(10); // <20>Զ<EFBFBD><D4B6>۵<EFBFBD><DBB5><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
this->map_layerTreeView->setModel(this->map_layerModel);
|
|
|
|
|
|
// create bridge between mapcontrol and layer
|
|
|
|
|
|
this->map_layer_Bridge = new QgsLayerTreeMapCanvasBridge(QgsProject::instance()->layerTreeRoot(), this->map_canvas, this);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// layer <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
// 1. <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>QDockWidget<65><74>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
|
|
|
|
|
|
this->layerTreeDock = new QDockWidget(tr(u8"ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), this);
|
|
|
|
|
|
this->layerTreeDock->setWidget(this->map_layerTreeView);
|
|
|
|
|
|
|
|
|
|
|
|
// 2. <20><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ(m_layerTreeView)<29><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
|
|
|
|
|
layerTreeDock->setWidget(this->map_layerTreeView);
|
|
|
|
|
|
|
|
|
|
|
|
// 3. (<28><>ѡ<EFBFBD><D1A1><EFBFBD>Ƽ<EFBFBD>)<29><><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
layerTreeDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
|
|
|
|
|
|
|
|
|
|
|
|
// 5. <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
this->addDockWidget(Qt::LeftDockWidgetArea, this->layerTreeDock);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
{
|
|
|
|
|
|
appStatusBar = this->statusBar(); // <20><>ȡ<EFBFBD><EFBFBD>״̬<D7B4><CCAC>
|
|
|
|
|
|
|
|
|
|
|
|
scaleLabel = new QLabel(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>"));
|
|
|
|
|
|
CoordinaryTextLabel = new QLabel(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>"));
|
|
|
|
|
|
PointXYLabel = new QLabel(tr(u8"<EFBFBD><EFBFBD><EFBFBD>꣺"));
|
|
|
|
|
|
UnitLabel = new QLabel(tr(u8"<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>"));
|
|
|
|
|
|
appStatusBar->addPermanentWidget(PointXYLabel); //
|
|
|
|
|
|
appStatusBar->addPermanentWidget(scaleLabel); //
|
|
|
|
|
|
appStatusBar->addPermanentWidget(UnitLabel); //
|
|
|
|
|
|
appStatusBar->addPermanentWidget(CoordinaryTextLabel); //
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD>߱仯<DFB1>ź<EFBFBD>
|
|
|
|
|
|
connect(map_canvas, SIGNAL(scaleChanged(double)) , this, SLOT(updateScaleLabel(double)));
|
|
|
|
|
|
connect(map_canvas, SIGNAL(xyCoordinates(const QgsPointXY&)), this, SLOT(updateCoordinateLabel(const QgsPointXY&)));
|
|
|
|
|
|
|
|
|
|
|
|
connect(map_canvas, SIGNAL(extentsChanged()), this, SLOT(onMapExtentsChanged()));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20>˵<EFBFBD><CBB5><EFBFBD>
|
|
|
|
|
|
{
|
|
|
|
|
|
menubar = this->menuBar();
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ڲ˵<DAB2><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22>ļ<EFBFBD>"<22><>"<22>༭"<22>˵<EFBFBD>
|
|
|
|
|
|
fileMenu = menubar->addMenu(tr(u8"<EFBFBD>ļ<EFBFBD>"));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>"<22>ļ<EFBFBD>"<22>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ˵<D3B2><CBB5>QAction<6F><6E>
|
|
|
|
|
|
newAction = fileMenu->addAction(tr(u8"<EFBFBD>½<EFBFBD>"));
|
|
|
|
|
|
fileMenu->addSeparator(); // <20><><EFBFBD>ӷָ<D3B7><D6B8><EFBFBD>[1,5](@ref)
|
|
|
|
|
|
openMenu = fileMenu->addMenu(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
|
|
|
|
|
|
|
|
|
|
|
openRasterFolderAction = openMenu->addAction(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>"));
|
|
|
|
|
|
openRasterAction = openMenu->addAction(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD>"));
|
|
|
|
|
|
openSLCRasterAction = openMenu->addAction(tr(u8"SLCӰ<EFBFBD><EFBFBD>"));
|
|
|
|
|
|
editMenu = menubar->addMenu(tr(u8"<EFBFBD>༭"));
|
|
|
|
|
|
|
|
|
|
|
|
// <20>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
QObject::connect(this->openRasterAction, SIGNAL(triggered()), this, SLOT(openRasterLayerTriggered()));
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// AI<41><49>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
{
|
|
|
|
|
|
AiLabelToolBar = new QToolBar(tr(u8"AI<EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), this);
|
|
|
|
|
|
this->addToolBar(Qt::LeftToolBarArea, AiLabelToolBar);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void ManualLabelToolWidget::open()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void ManualLabelToolWidget::openRasterLayerTriggered()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (lastFileDialogPath.isEmpty()) {
|
|
|
|
|
|
lastFileDialogPath = ".";
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0>
|
|
|
|
|
|
// 2. ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|
|
|
|
|
QString rasterPath = QFileDialog::getOpenFileName(
|
|
|
|
|
|
this,
|
|
|
|
|
|
tr(u8"<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>"),
|
|
|
|
|
|
lastFileDialogPath,
|
|
|
|
|
|
tr(RASTERFILEFILTER)
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
lastFileDialogPath = rasterPath;
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|
|
|
|
|
this->openRaster(rasterPath);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void ManualLabelToolWidget::openRaster(QString& filePath)
|
|
|
|
|
|
{
|
|
|
|
|
|
QString filename = QFileInfo(filePath).fileName();
|
|
|
|
|
|
|
|
|
|
|
|
QgsRasterLayer* rasterLayer = new QgsRasterLayer(filePath, filename);
|
|
|
|
|
|
if (!rasterLayer->isValid()) {
|
|
|
|
|
|
qDebug() << "Failed to load raster layer!";
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QgsProject::instance()->addMapLayer(rasterLayer);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void ManualLabelToolWidget::updateCoordinateLabel(const QgsPointXY& point)
|
|
|
|
|
|
{
|
|
|
|
|
|
QString coordText = QString(tr(u8"<EFBFBD><EFBFBD><EFBFBD>꣺X:%1 Y:%2")).arg(QString::number(point.x(), 'f', 2)).arg(QString::number(point.y(), 'f', 2));
|
|
|
|
|
|
PointXYLabel->setText(coordText);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void ManualLabelToolWidget::onMapExtentsChanged()
|
|
|
|
|
|
{
|
|
|
|
|
|
QgsRectangle currentExtent = map_canvas->extent();
|
|
|
|
|
|
|
|
|
|
|
|
//// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>Ϣ<EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>磺
|
|
|
|
|
|
//// 1. <20><>ӡ<EFBFBD><D3A1>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>
|
|
|
|
|
|
//qDebug() << "<22>·<EFBFBD>Χ - Xmin:" << currentExtent.xMinimum()
|
|
|
|
|
|
// << "Ymin:" << currentExtent.yMinimum()
|
|
|
|
|
|
// << "Xmax:" << currentExtent.xMaximum()
|
|
|
|
|
|
// << "Ymax:" << currentExtent.yMaximum();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void ManualLabelToolWidget::onLayersChanged(QgsMapLayer* layer)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
// WGS<47><53><EFBFBD><EFBFBD>ϵ
|
|
|
|
|
|
QgsCoordinateReferenceSystem currentCrs = map_canvas->mapSettings().destinationCrs();
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>֤<EFBFBD><D6A4>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "WGS 84 / EPSG:4326"
|
|
|
|
|
|
QString description = currentCrs.description();
|
|
|
|
|
|
QString authid = currentCrs.authid();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
|
|
|
|
|
QList<QgsMapLayer*> layers = QgsProject::instance()->mapLayers().values();
|
|
|
|
|
|
int layerCount = layers.size();
|
|
|
|
|
|
|
|
|
|
|
|
// <20>жϵ<D0B6>ǰ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
|
if (layerCount == 0&&description == "") {
|
|
|
|
|
|
QgsMapLayer* theOnlyLayer = layers.first();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7>ӵ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
|
|
|
|
|
|
if (theOnlyLayer && theOnlyLayer->isValid() && theOnlyLayer->crs().isValid()) {
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ͼ<EFBFBD><CDBC>һ<EFBFBD><D2BB>
|
|
|
|
|
|
map_canvas->mapSettings().setDestinationCrs(theOnlyLayer->crs());
|
|
|
|
|
|
// <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>Χ<EFBFBD><CEA7><EFBFBD>ṩ<EFBFBD><E1B9A9><EFBFBD>õij<C3B5>ʼ<EFBFBD><CABC>ͼ
|
|
|
|
|
|
map_canvas->setExtent(theOnlyLayer->extent());
|
|
|
|
|
|
// ˢ<>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
|
|
|
|
|
|
map_canvas->refresh();
|
|
|
|
|
|
qDebug() << "ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" << theOnlyLayer->crs().description();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void ManualLabelToolWidget::updateScaleLabel(double scale)
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ʽ<EFBFBD><CABD>Ϊ<EFBFBD><EFBFBD><D7B6><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1:10000
|
|
|
|
|
|
QString scaleText = QString(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>1:%1")).arg(QString::number(scale, 'f', 0));
|
|
|
|
|
|
scaleLabel->setText(scaleText);
|
|
|
|
|
|
|
|
|
|
|
|
// ͬʱ<CDAC><CAB1><EFBFBD>µ<EFBFBD>λ<EFBFBD><CEBB>ǩ
|
|
|
|
|
|
Qgis::DistanceUnit unit = map_canvas->mapUnits();
|
|
|
|
|
|
QString unitString;
|
|
|
|
|
|
if (unit == Qgis::DistanceUnit::Meters) {
|
|
|
|
|
|
unitString = tr(u8"<EFBFBD><EFBFBD>");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (unit == Qgis::DistanceUnit::Degrees) {
|
|
|
|
|
|
unitString = tr(u8"<EFBFBD><EFBFBD>");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (unit == Qgis::DistanceUnit::Feet) {
|
|
|
|
|
|
unitString = tr(u8"Ӣ<EFBFBD><EFBFBD>");
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
unitString = tr(u8"δ֪");
|
|
|
|
|
|
}
|
|
|
|
|
|
UnitLabel->setText(QString(tr(u8"<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>%1")).arg(unitString));
|
|
|
|
|
|
|
|
|
|
|
|
// WGS<47><53><EFBFBD><EFBFBD>ϵ
|
|
|
|
|
|
QgsCoordinateReferenceSystem currentCrs = map_canvas->mapSettings().destinationCrs();
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>֤<EFBFBD><D6A4>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "WGS 84 / EPSG:4326"
|
|
|
|
|
|
QString description = currentCrs.description();
|
|
|
|
|
|
QString authid = currentCrs.authid();
|
|
|
|
|
|
|
|
|
|
|
|
if (description == "") {
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> ui->label_crs <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>Ϣ<EFBFBD><CFA2>QLabel
|
|
|
|
|
|
CoordinaryTextLabel->setText(QString(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>δ֪")));
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> ui->label_crs <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>Ϣ<EFBFBD><CFA2>QLabel
|
|
|
|
|
|
CoordinaryTextLabel->setText(QString(tr(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>%1 (%2)")).arg(description).arg(authid));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
2025-10-16 15:27:38 +00:00
|
|
|
|
=======
|
2025-10-13 05:49:55 +00:00
|
|
|
|
// 1. inti map canvas
|
|
|
|
|
|
this->map_canvas = new QgsMapCanvas();
|
|
|
|
|
|
this->setCentralWidget((this->map_canvas));
|
|
|
|
|
|
|
|
|
|
|
|
// 2. map tool pan
|
|
|
|
|
|
this->map_tool_pan = new QgsMapToolPan(this->map_canvas);
|
|
|
|
|
|
this->map_canvas->setMapTool(this->map_tool_pan);
|
|
|
|
|
|
|
|
|
|
|
|
// 3. map layer manager
|
|
|
|
|
|
this->map_layerTreeView =new QgsLayerTreeView(this);
|
|
|
|
|
|
// 4. create map model
|
|
|
|
|
|
this->map_layerModel = new QgsLayerTreeModel(QgsProject::instance()->layerTreeRoot(), this);
|
|
|
|
|
|
this->map_layerModel->setFlag(QgsLayerTreeModel::AllowNodeRename); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
this->map_layerModel->setFlag(QgsLayerTreeModel::AllowNodeReorder); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>
|
|
|
|
|
|
this->map_layerModel->setFlag(QgsLayerTreeModel::AllowNodeChangeVisibility); // <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1>ɼ<EFBFBD><C9BC><EFBFBD>
|
|
|
|
|
|
this->map_layerModel->setFlag(QgsLayerTreeModel::ShowLegendAsTree); // <20><><EFBFBD><EFBFBD>״ͼ<D7B4><CDBC>ʾͼ<CABE><CDBC>
|
|
|
|
|
|
this->map_layerModel->setAutoCollapseLegendNodes(10); // <20>Զ<EFBFBD><D4B6>۵<EFBFBD><DBB5><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
this->map_layerTreeView->setModel(this->map_layerModel);
|
|
|
|
|
|
// create bridge between mapcontrol and layer
|
|
|
|
|
|
this->map_layer_Bridge = new QgsLayerTreeMapCanvasBridge(QgsProject::instance()->layerTreeRoot(), this->map_canvas, this);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// layer <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
// 1. <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>QDockWidget<65><74>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
|
|
|
|
|
|
this->layerTreeDock =new QDockWidget(tr(u8"ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), this);
|
|
|
|
|
|
this->layerTreeDock->setWidget(this->map_layerTreeView);
|
|
|
|
|
|
|
|
|
|
|
|
// 2. <20><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ(m_layerTreeView)<29><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
|
|
|
|
|
layerTreeDock->setWidget(this->map_layerTreeView);
|
|
|
|
|
|
|
|
|
|
|
|
// 3. (<28><>ѡ<EFBFBD><D1A1><EFBFBD>Ƽ<EFBFBD>)<29><><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
layerTreeDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 5. <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
this->addDockWidget(Qt::LeftDockWidgetArea, this->layerTreeDock);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-16 15:27:38 +00:00
|
|
|
|
>>>>>>> bc199244a3370d5bb7d3f52d5c17e6e2c467f20a
|