From 5054dbf6991ddca16e53e1fc30dab52e3109a532 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=99=88=E5=A2=9E=E8=BE=89?= <3045316072@qq.com>
Date: Mon, 13 Oct 2025 13:49:55 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 2 +
.../Manual-Label-Tool-Widget.vcxproj | 123 ++++++++
.../Manual-Label-Tool-Widget.vcxproj.filters | 49 ++++
.../ManualLabelToolWidget.cpp | 276 ++++++++++++++++++
.../ManualLabelToolWidget.h | 86 ++++++
.../ManualLabelToolWidget.qrc | 4 +
Manual-Label-Tool-Widget/RasterOperator.cpp | 1 +
Manual-Label-Tool-Widget/RasterOperator.h | 5 +
Manual-Label-Tool-Widget/main.cpp | 27 ++
Manual-Label-Tool-Widget/symbology-style.db | Bin 0 -> 86016 bytes
.../Manual-Labeling-Client.sln | 31 ++
.../Manual-Labeling-Client.vcxproj | 122 ++++++++
.../Manual-Labeling-Client.vcxproj.filters | 50 ++++
.../ManualLabelingClient.cpp | 12 +
Manual-Labeling-Client/ManualLabelingClient.h | 17 ++
.../ManualLabelingClient.qrc | 4 +
.../ManualLabelingClient.ui | 29 ++
Manual-Labeling-Client/main.cpp | 11 +
Manual-Labeling-Client/stdafx.cpp | 1 +
Manual-Labeling-Client/stdafx.h | 1 +
20 files changed, 851 insertions(+)
create mode 100644 Manual-Label-Tool-Widget/Manual-Label-Tool-Widget.vcxproj
create mode 100644 Manual-Label-Tool-Widget/Manual-Label-Tool-Widget.vcxproj.filters
create mode 100644 Manual-Label-Tool-Widget/ManualLabelToolWidget.cpp
create mode 100644 Manual-Label-Tool-Widget/ManualLabelToolWidget.h
create mode 100644 Manual-Label-Tool-Widget/ManualLabelToolWidget.qrc
create mode 100644 Manual-Label-Tool-Widget/RasterOperator.cpp
create mode 100644 Manual-Label-Tool-Widget/RasterOperator.h
create mode 100644 Manual-Label-Tool-Widget/main.cpp
create mode 100644 Manual-Label-Tool-Widget/symbology-style.db
create mode 100644 Manual-Labeling-Client/Manual-Labeling-Client.sln
create mode 100644 Manual-Labeling-Client/Manual-Labeling-Client.vcxproj
create mode 100644 Manual-Labeling-Client/Manual-Labeling-Client.vcxproj.filters
create mode 100644 Manual-Labeling-Client/ManualLabelingClient.cpp
create mode 100644 Manual-Labeling-Client/ManualLabelingClient.h
create mode 100644 Manual-Labeling-Client/ManualLabelingClient.qrc
create mode 100644 Manual-Labeling-Client/ManualLabelingClient.ui
create mode 100644 Manual-Labeling-Client/main.cpp
create mode 100644 Manual-Labeling-Client/stdafx.cpp
create mode 100644 Manual-Labeling-Client/stdafx.h
diff --git a/.gitignore b/.gitignore
index 4ccd6fa..16cb3ed 100644
--- a/.gitignore
+++ b/.gitignore
@@ -662,3 +662,5 @@ cython_debug/
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
+**/**/x64
+**/**/.vs
\ No newline at end of file
diff --git a/Manual-Label-Tool-Widget/Manual-Label-Tool-Widget.vcxproj b/Manual-Label-Tool-Widget/Manual-Label-Tool-Widget.vcxproj
new file mode 100644
index 0000000..2695a43
--- /dev/null
+++ b/Manual-Label-Tool-Widget/Manual-Label-Tool-Widget.vcxproj
@@ -0,0 +1,123 @@
+
+
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ {89CAC2D1-AF91-42BC-BDE1-2BC8C490CE7A}
+ QtVS_v304
+ 10.0
+ 10.0
+ $(MSBuildProjectDirectory)\QtMsBuild
+
+
+
+ Application
+ v143
+ true
+ Unicode
+
+
+ Application
+ v143
+ false
+ true
+ Unicode
+
+
+
+
+
+
+ qgis_qt5
+ core;gui;widgets
+ debug
+
+
+ tools_qt5
+ core;xml;gui;widgets
+ release
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ D:\OSGeo4W\apps\qgis-dev\include;D:\OSGeo4W\include;$(IncludePath)
+ D:\OSGeo4W\lib;D:\OSGeo4W\apps\qgis-dev\lib;$(ReferencePath)
+ D:\OSGeo4W\lib;D:\OSGeo4W\apps\qgis-dev\lib;$(LibraryPath)
+
+
+
+ qgis_core.lib;qgis_app.lib;qgis_gui.lib;%(AdditionalDependencies)
+
+
+ _USE_MATH_DEFINES;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;%(PreprocessorDefinitions)
+ stdcpp17
+
+
+
+
+ true
+ Level3
+ true
+ true
+
+
+ Windows
+ true
+
+
+
+
+ true
+ Level3
+ true
+ true
+ true
+ true
+
+
+ Windows
+ false
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Manual-Label-Tool-Widget/Manual-Label-Tool-Widget.vcxproj.filters b/Manual-Label-Tool-Widget/Manual-Label-Tool-Widget.vcxproj.filters
new file mode 100644
index 0000000..dc0477e
--- /dev/null
+++ b/Manual-Label-Tool-Widget/Manual-Label-Tool-Widget.vcxproj.filters
@@ -0,0 +1,49 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ qml;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;hm;inl;inc;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+ {99349809-55BA-4b9d-BF79-8FDBB0286EB3}
+ ui
+
+
+ {639EADAA-A684-42e4-A9AD-28FC9BCB8F7C}
+ ts
+
+
+
+
+ Resource Files
+
+
+ Header Files
+
+
+ Source Files
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+ Header Files
+
+
+
\ No newline at end of file
diff --git a/Manual-Label-Tool-Widget/ManualLabelToolWidget.cpp b/Manual-Label-Tool-Widget/ManualLabelToolWidget.cpp
new file mode 100644
index 0000000..c41aa68
--- /dev/null
+++ b/Manual-Label-Tool-Widget/ManualLabelToolWidget.cpp
@@ -0,0 +1,276 @@
+#include "ManualLabelToolWidget.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+//QgsUnitTypes
+
+// ¶¨Òå·ÃÎʲÎÊý
+#define RASTERFILEFILTER u8"ËùÓÐÎļþ (*.*);;TIF (*.tif);;TIFF (*.tiff);;bin (*.bin);;dat (*.dat);;"
+
+
+
+ManualLabelToolWidget::ManualLabelToolWidget(QWidget *parent)
+ : QMainWindow(parent)
+{
+ this->init_UI();
+
+}
+
+ManualLabelToolWidget::~ManualLabelToolWidget()
+{
+}
+
+void ManualLabelToolWidget::init_UI()
+{
+ this->setWindowTitle(tr(u8"AI±ê×¢Èí¼þ"));
+ // ³õʼ´óС
+ {
+ this->resize(1920,1080);
+ }
+
+ //µØÍ¼¿ØÖÆ
+ {
+ // 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); // ÔÊÐíÖØÃüÃû
+ this->map_layerModel->setFlag(QgsLayerTreeModel::AllowNodeReorder); // ÔÊÐíµ÷Õû˳Ðò
+ this->map_layerModel->setFlag(QgsLayerTreeModel::AllowNodeChangeVisibility); // ÔÊÐí¸Ä±ä¿É¼ûÐÔ
+ this->map_layerModel->setFlag(QgsLayerTreeModel::ShowLegendAsTree); // ÒÔÊ÷״ͼÏÔʾͼÀý
+ this->map_layerModel->setAutoCollapseLegendNodes(10); // ×Ô¶¯ÕÛµþ¹ý¶àͼÀýÏî
+
+ 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 ²¼¾Ö
+ // 1. ´´½¨Ò»¸öQDockWidget£¨Í£¿¿´°¿Ú£©À´³ÐÔØÍ¼²ãÊ÷ÊÓͼ
+ this->layerTreeDock = new QDockWidget(tr(u8"ͼ²ã¹ÜÀíÆ÷"), this);
+ this->layerTreeDock->setWidget(this->map_layerTreeView);
+
+ // 2. ½«ÒÑÓеÄͼ²ãÊ÷ÊÓͼ(m_layerTreeView)ÉèÖÃΪÕâ¸öÍ£¿¿´°¿ÚµÄÖÐÐIJ¿¼þ
+ layerTreeDock->setWidget(this->map_layerTreeView);
+
+ // 3. (¿ÉÑ¡µ«ÍƼö)ÉèÖÃÍ£¿¿´°¿ÚÔÊÐíÍ£¿¿µÄÇøÓò
+ layerTreeDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+
+ // 5. ½«Í£¿¿´°¿ÚÌí¼Óµ½Ö÷´°¿ÚµÄ×ó²àÇøÓò
+ this->addDockWidget(Qt::LeftDockWidgetArea, this->layerTreeDock);
+
+
+ }
+
+ // ״̬¹¤¾ßÀ¸
+ {
+ appStatusBar = this->statusBar(); // »ñÈ¡»ò´´½¨×´Ì¬À¸
+
+ scaleLabel = new QLabel(tr(u8"±ÈÀý³ß£º"));
+ CoordinaryTextLabel = new QLabel(tr(u8"×ø±êϵ£º"));
+ PointXYLabel = new QLabel(tr(u8"×ø±ê£º"));
+ UnitLabel = new QLabel(tr(u8"µ¥Î»£º"));
+ appStatusBar->addPermanentWidget(PointXYLabel); //
+ appStatusBar->addPermanentWidget(scaleLabel); //
+ appStatusBar->addPermanentWidget(UnitLabel); //
+ appStatusBar->addPermanentWidget(CoordinaryTextLabel); //
+
+ // Á¬½Ó±ÈÀý³ß±ä»¯ÐźÅ
+ 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()));
+
+
+ }
+
+ // ²Ëµ¥À¸
+ {
+ menubar = this->menuBar();
+
+ // Ôڲ˵¥À¸ÉÏÌí¼Ó"Îļþ"ºÍ"±à¼"²Ëµ¥
+ fileMenu = menubar->addMenu(tr(u8"Îļþ"));
+
+
+ // Ïò"Îļþ"²Ëµ¥ÖÐÌí¼Ó²Ëµ¥ÏQAction£©
+ newAction = fileMenu->addAction(tr(u8"н¨"));
+ fileMenu->addSeparator(); // Ìí¼Ó·Ö¸îÏß[1,5](@ref)
+ openMenu = fileMenu->addMenu(tr(u8"´ò¿ª"));
+
+ openRasterFolderAction = openMenu->addAction(tr(u8"´ò¿ªÓ°ÏñÎļþ¼Ð"));
+ openRasterAction = openMenu->addAction(tr(u8"´ò¿ªÓ°Ïñ"));
+ openSLCRasterAction = openMenu->addAction(tr(u8"SLCÓ°Ïñ"));
+ editMenu = menubar->addMenu(tr(u8"±à¼"));
+
+ // ʼþ°ó¶¨
+ QObject::connect(this->openRasterAction, SIGNAL(triggered()), this, SLOT(openRasterLayerTriggered()));
+
+ }
+
+ // AI±ê×¢¹¤¾ßÀ¸
+ {
+ AiLabelToolBar = new QToolBar(tr(u8"AI±ê×¢¹¤¾ßÀ¸"), this);
+ this->addToolBar(Qt::LeftToolBarArea, AiLabelToolBar);
+ }
+
+}
+
+void ManualLabelToolWidget::open()
+{
+}
+
+
+void ManualLabelToolWidget::openRasterLayerTriggered()
+{
+ if (lastFileDialogPath.isEmpty()) {
+ lastFileDialogPath = ".";
+ }
+ // ´ò¿ªÓ°Ïñ
+ // 2. Ñ¡Ôñ¶à¸öÎļþ
+ QString rasterPath = QFileDialog::getOpenFileName(
+ this,
+ tr(u8"ÇëÑ¡ÔñÓ°ÏñÎļþ"),
+ lastFileDialogPath,
+ tr(RASTERFILEFILTER)
+ );
+
+ lastFileDialogPath = rasterPath;
+ // ¶ÁÈ¡Êý¾Ý
+ 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!";
+ // ´íÎó´¦Àí
+ return;
+ }
+
+ QgsProject::instance()->addMapLayer(rasterLayer);
+
+}
+
+void ManualLabelToolWidget::updateCoordinateLabel(const QgsPointXY& point)
+{
+ QString coordText = QString(tr(u8"×ø±ê£º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();
+
+ //// ÏÖÔÚÄã¿ÉÒÔʹÓÃÕâ¸ö·¶Î§ÐÅÏ¢ÁË£¬ÀýÈ磺
+ //// 1. ´òÓ¡·¶Î§×ø±ê
+ //qDebug() << "з¶Î§ - Xmin:" << currentExtent.xMinimum()
+ // << "Ymin:" << currentExtent.yMinimum()
+ // << "Xmax:" << currentExtent.xMaximum()
+ // << "Ymax:" << currentExtent.yMaximum();
+}
+
+void ManualLabelToolWidget::onLayersChanged(QgsMapLayer* layer)
+{
+
+ // WGS×ø±êϵ
+ QgsCoordinateReferenceSystem currentCrs = map_canvas->mapSettings().destinationCrs();
+ // »ñÈ¡×ø±êϵµÄÃèÊöÐÅÏ¢ºÍÈÏÖ¤±êʶ·û£¬ÀýÈç "WGS 84 / EPSG:4326"
+ QString description = currentCrs.description();
+ QString authid = currentCrs.authid();
+
+
+ // »ñÈ¡µ±Ç°ÏîÄ¿ÖÐËùÓÐͼ²ã
+ QList layers = QgsProject::instance()->mapLayers().values();
+ int layerCount = layers.size();
+
+ // Åжϵ±Ç°ÊÇ·ñ½öÓÐÒ»²ã
+ if (layerCount == 0&&description == "") {
+ QgsMapLayer* theOnlyLayer = layers.first();
+
+ // ¼ì²éͼ²ãÊÇ·ñÓÐЧÇÒÓµÓж¨ÒåµÄ×ø±êϵ
+ if (theOnlyLayer && theOnlyLayer->isValid() && theOnlyLayer->crs().isValid()) {
+ // ½«µØÍ¼»²¼µÄÄ¿±ê×ø±êϵÉèÖÃΪÓëͼ²ãÒ»ÖÂ
+ map_canvas->mapSettings().setDestinationCrs(theOnlyLayer->crs());
+ // ¿ÉÑ¡£º½«µØÍ¼·¶Î§Ëõ·ÅÖÁ¸Ãͼ²ãµÄÈ«·¶Î§£¬Ìṩ¸üºÃµÄ³õʼÊÓͼ
+ map_canvas->setExtent(theOnlyLayer->extent());
+ // ˢл²¼£¬Ê¹¸ü¸ÄÉúЧ
+ map_canvas->refresh();
+ qDebug() << "ͼ²ãÊýÁ¿Îª1£¬ÒÑͬ²½»²¼×ø±êϵÖÁ£º" << theOnlyLayer->crs().description();
+ }
+ }
+
+}
+
+void ManualLabelToolWidget::updateScaleLabel(double scale)
+{
+ // ½«±ÈÀý³ßÊýÖµ¸ñʽ»¯ÎªÒ×¶ÁµÄ×Ö·û´®£¬ÀýÈç 1:10000
+ QString scaleText = QString(tr(u8"±ÈÀý³ß£º1:%1")).arg(QString::number(scale, 'f', 0));
+ scaleLabel->setText(scaleText);
+
+ // ͬʱ¸üе¥Î»±êÇ©
+ Qgis::DistanceUnit unit = map_canvas->mapUnits();
+ QString unitString;
+ if (unit == Qgis::DistanceUnit::Meters) {
+ unitString = tr(u8"Ã×");
+ }
+ else if (unit == Qgis::DistanceUnit::Degrees) {
+ unitString = tr(u8"¶È");
+ }
+ else if (unit == Qgis::DistanceUnit::Feet) {
+ unitString = tr(u8"Ó¢³ß");
+ }
+ else {
+ unitString = tr(u8"δ֪");
+ }
+ UnitLabel->setText(QString(tr(u8"µ¥Î»£º%1")).arg(unitString));
+
+ // WGS×ø±êϵ
+ QgsCoordinateReferenceSystem currentCrs = map_canvas->mapSettings().destinationCrs();
+ // »ñÈ¡×ø±êϵµÄÃèÊöÐÅÏ¢ºÍÈÏÖ¤±êʶ·û£¬ÀýÈç "WGS 84 / EPSG:4326"
+ QString description = currentCrs.description();
+ QString authid = currentCrs.authid();
+
+ if (description == "") {
+ // ¼ÙÉè ui->label_crs ÊÇÓÃÓÚÏÔÊ¾×ø±êϵÐÅÏ¢µÄQLabel
+ CoordinaryTextLabel->setText(QString(tr(u8"×ø±êϵ£ºÎ´Öª")));
+ }
+ else {
+ // ¼ÙÉè ui->label_crs ÊÇÓÃÓÚÏÔÊ¾×ø±êϵÐÅÏ¢µÄQLabel
+ CoordinaryTextLabel->setText(QString(tr(u8"×ø±êϵ£º%1 (%2)")).arg(description).arg(authid));
+ }
+
+
+}
diff --git a/Manual-Label-Tool-Widget/ManualLabelToolWidget.h b/Manual-Label-Tool-Widget/ManualLabelToolWidget.h
new file mode 100644
index 0000000..4f961ca
--- /dev/null
+++ b/Manual-Label-Tool-Widget/ManualLabelToolWidget.h
@@ -0,0 +1,86 @@
+#pragma once
+
+#include
+#include
+#include
+
+class QgsMapCanvas;
+class QgsMapToolPan;
+class QgsLayerTreeModel;
+class QgsLayerTreeView;
+class QgsLayerTreeMapCanvasBridge;
+class QDockWidget;
+class QLabel;
+class QStatusBar;
+class QMenuBar;
+class QToolBar;
+class QgsMapLayer;
+
+
+class ManualLabelToolWidget : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ ManualLabelToolWidget(QWidget *parent = nullptr);
+ ~ManualLabelToolWidget();
+
+private: // UI
+ void init_UI();// Init UI
+
+private: // ×é¼þ
+ QgsMapCanvas* map_canvas=nullptr; // map widget
+ QgsMapToolPan* map_tool_pan = nullptr; // map tool for pan zoom
+
+ QgsLayerTreeModel* map_layerModel = nullptr;
+ QgsLayerTreeView* map_layerTreeView = nullptr;
+ QgsLayerTreeMapCanvasBridge* map_layer_Bridge = nullptr;
+
+private: // ²¼¾Ö
+ QDockWidget* layerTreeDock;
+
+ // ״̬À¸
+ QLabel* scaleLabel; // ±ÈÀý³ß
+ QLabel* CoordinaryTextLabel; // ͼ²ã×ø±êϵ
+ QLabel* PointXYLabel;// Êó±êÖ¸Õë×ø±ê
+ QLabel* UnitLabel;
+ QStatusBar* appStatusBar;// ״̬¿ØÖÆÀ¸
+
+private: // ²Ëµ¥À¸
+ QMenuBar* menubar;
+
+private: // »æÖÆÍ¼²ã
+ QToolBar* AiLabelToolBar;
+
+private: // Îļþ²Ëµ¥
+ QMenu* fileMenu;
+ QAction* newAction;
+ QMenu* openMenu;
+ QAction* openRasterFolderAction;
+ QAction* openRasterAction;
+ QAction* openSLCRasterAction;
+
+private:// ±à¼²Ëµ¥
+ QMenu* editMenu;
+
+public slots:// ¹¦Äܺ¯ÊýÇø
+ void open();
+ void openRasterLayerTriggered();
+ void openRaster(QString &path);
+
+public slots: // ״̬À¸º¯Êý
+ void updateScaleLabel(double);
+ void updateCoordinateLabel(const QgsPointXY&);
+
+ void onMapExtentsChanged();
+ void onLayersChanged(QgsMapLayer* layer);
+
+public: // ³£ÓñäÁ¿Çø
+ QString lastFileDialogPath;
+
+
+
+
+
+};
+
diff --git a/Manual-Label-Tool-Widget/ManualLabelToolWidget.qrc b/Manual-Label-Tool-Widget/ManualLabelToolWidget.qrc
new file mode 100644
index 0000000..876730d
--- /dev/null
+++ b/Manual-Label-Tool-Widget/ManualLabelToolWidget.qrc
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/Manual-Label-Tool-Widget/RasterOperator.cpp b/Manual-Label-Tool-Widget/RasterOperator.cpp
new file mode 100644
index 0000000..6fd7b3e
--- /dev/null
+++ b/Manual-Label-Tool-Widget/RasterOperator.cpp
@@ -0,0 +1 @@
+#include "RasterOperator.h"
diff --git a/Manual-Label-Tool-Widget/RasterOperator.h b/Manual-Label-Tool-Widget/RasterOperator.h
new file mode 100644
index 0000000..aeeb388
--- /dev/null
+++ b/Manual-Label-Tool-Widget/RasterOperator.h
@@ -0,0 +1,5 @@
+#pragma once
+class RasterOperator
+{
+};
+
diff --git a/Manual-Label-Tool-Widget/main.cpp b/Manual-Label-Tool-Widget/main.cpp
new file mode 100644
index 0000000..e3b1a43
--- /dev/null
+++ b/Manual-Label-Tool-Widget/main.cpp
@@ -0,0 +1,27 @@
+//#include "ManualLabelToolWidget.h"
+//#include
+//
+//int main(int argc, char *argv[])
+//{
+// QApplication app(argc, argv);
+// ManualLabelToolWidget window;
+// window.show();
+// return app.exec();
+//}
+#include
+#include
+
+#include
+#include
+#include
+#include "ManualLabelToolWidget.h"
+//ÕûÊýÀàÐÍÖ÷º¯Êý(ÕûÊýÀàÐÍͳ¼Æ²ÎÊý¸öÊý,×Ö·ûÀàÐÍÖ¸ÕëÊý×éÖ¸Ïò×Ö·û´®²ÎÊý)
+int main(int argc, char** argv)
+{
+ //QApplicationÓÐÇÒ½öÓÐÒ»¸öÓ¦ÓóÌÐòÀàµÄ¶ÔÏó
+ QApplication app(argc, argv);
+ ManualLabelToolWidget labeltoolwidget;
+ labeltoolwidget.show();
+ //µÈ´ýÓû§²Ù×÷
+ return app.exec();
+}
diff --git a/Manual-Label-Tool-Widget/symbology-style.db b/Manual-Label-Tool-Widget/symbology-style.db
new file mode 100644
index 0000000000000000000000000000000000000000..214fcf7ef0027f0765da4d4f8d92c5ef5c98b6e2
GIT binary patch
literal 86016
zcmeI%O>5go7{GCfnr^cWZ3@LGwvwjEv12QX
zOHaC${Vof8Ul#VhU#FBpFDq*-S!xiy_%!?tu|}h0o_T&VV`rG(UL0I_j(OG_bZyVv
zQL2inDnFT~qA2CyXF2$ZUgP_@=q9+TiE>u4tUUN*sZ{x*EY1I=R9;v9EB{&9EPXAH
zO1q_hi|yj)!r#S*h3mo(`G4}SbDwe_bIZXm@mb=Y!sLe_C38dSo@4mf37PIk3!W{k@BhxqsNS_N*iG*Q5PsjiVFu7wcr}((XED
z(|Xn18g<>UP`g^xjap6h*F=!_-P4}C)A8){uH7G|?v~QQQqS%Mf6z(c;xI>i-yqbo)aQEiNpk0>#ytF
zvf-agnz6X3UPbK&4V1ra@w?Ntc3lv_kHTi6Nflj-sRpCk@3v|lAMU?6w&Jz0b!PwG
z8;rLIleJUZE^5ZpHC4H|>^P(0l^Z;3+1Fk#yl+K;TJ@+@@~b)B*xpwC=V3>`oteWM
z75P-xZ#1>jZW{}D5ykli+bggNru21V{(C-~hGxj#J`aKQRs!z-M=(hNfd>r;T
zUbAswF4f<-dIsIC&uNCWp4HtrQmY;p@AOph>9HGjR;&i`ek;{YQ8$A=-oK?8k5{t#
zD8fX`@^;QOoj*`fB*srAbmAp!^>fB*srAb
+
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ {2F3ECF9F-10C1-4D1D-BB73-38D7C3835F73}
+ QtVS_v304
+ 10.0
+ 10.0
+ $(MSBuildProjectDirectory)\QtMsBuild
+
+
+
+ Application
+ v143
+ true
+ Unicode
+
+
+ Application
+ v143
+ false
+ true
+ Unicode
+
+
+
+
+
+
+ qgis_qt5
+ core;gui;widgets
+ debug
+
+
+ tools_qt5
+ core;gui;widgets
+ release
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ Use
+ stdafx.h
+ Level3
+ true
+ true
+
+
+ Windows
+ true
+
+
+ stdafx.h;%(PrependInclude)
+
+
+
+
+ true
+ Use
+ stdafx.h
+ Level3
+ true
+ true
+ true
+ true
+
+
+ Windows
+ false
+ true
+ true
+
+
+ stdafx.h;%(PrependInclude)
+
+
+
+
+
+
+
+
+
+
+ Create
+ Create
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Manual-Labeling-Client/Manual-Labeling-Client.vcxproj.filters b/Manual-Labeling-Client/Manual-Labeling-Client.vcxproj.filters
new file mode 100644
index 0000000..a021ac0
--- /dev/null
+++ b/Manual-Labeling-Client/Manual-Labeling-Client.vcxproj.filters
@@ -0,0 +1,50 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ qml;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;hm;inl;inc;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+ {99349809-55BA-4b9d-BF79-8FDBB0286EB3}
+ ui
+
+
+ {639EADAA-A684-42e4-A9AD-28FC9BCB8F7C}
+ ts
+
+
+
+
+ Resource Files
+
+
+ Form Files
+
+
+ Header Files
+
+
+ Source Files
+
+
+ Header Files
+
+
+ Source Files
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/Manual-Labeling-Client/ManualLabelingClient.cpp b/Manual-Labeling-Client/ManualLabelingClient.cpp
new file mode 100644
index 0000000..ec607f4
--- /dev/null
+++ b/Manual-Labeling-Client/ManualLabelingClient.cpp
@@ -0,0 +1,12 @@
+#include "stdafx.h"
+#include "ManualLabelingClient.h"
+
+ManualLabelingClient::ManualLabelingClient(QWidget *parent)
+ : QMainWindow(parent)
+{
+ ui.setupUi(this);
+}
+
+ManualLabelingClient::~ManualLabelingClient()
+{}
+
diff --git a/Manual-Labeling-Client/ManualLabelingClient.h b/Manual-Labeling-Client/ManualLabelingClient.h
new file mode 100644
index 0000000..81f18b0
--- /dev/null
+++ b/Manual-Labeling-Client/ManualLabelingClient.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#include
+#include "ui_ManualLabelingClient.h"
+
+class ManualLabelingClient : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ ManualLabelingClient(QWidget *parent = nullptr);
+ ~ManualLabelingClient();
+
+private:
+ Ui::ManualLabelingClientClass ui;
+};
+
diff --git a/Manual-Labeling-Client/ManualLabelingClient.qrc b/Manual-Labeling-Client/ManualLabelingClient.qrc
new file mode 100644
index 0000000..8df6f23
--- /dev/null
+++ b/Manual-Labeling-Client/ManualLabelingClient.qrc
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/Manual-Labeling-Client/ManualLabelingClient.ui b/Manual-Labeling-Client/ManualLabelingClient.ui
new file mode 100644
index 0000000..7344599
--- /dev/null
+++ b/Manual-Labeling-Client/ManualLabelingClient.ui
@@ -0,0 +1,29 @@
+
+
+ ManualLabelingClientClass
+
+
+ ManualLabelingClientClass
+
+
+
+ 0
+ 0
+ 600
+ 400
+
+
+
+ ManualLabelingClient
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Manual-Labeling-Client/main.cpp b/Manual-Labeling-Client/main.cpp
new file mode 100644
index 0000000..5b46cc4
--- /dev/null
+++ b/Manual-Labeling-Client/main.cpp
@@ -0,0 +1,11 @@
+#include "stdafx.h"
+#include "ManualLabelingClient.h"
+#include
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ ManualLabelingClient window;
+ window.show();
+ return app.exec();
+}
diff --git a/Manual-Labeling-Client/stdafx.cpp b/Manual-Labeling-Client/stdafx.cpp
new file mode 100644
index 0000000..fd4f341
--- /dev/null
+++ b/Manual-Labeling-Client/stdafx.cpp
@@ -0,0 +1 @@
+#include "stdafx.h"
diff --git a/Manual-Labeling-Client/stdafx.h b/Manual-Labeling-Client/stdafx.h
new file mode 100644
index 0000000..c3cbb7d
--- /dev/null
+++ b/Manual-Labeling-Client/stdafx.h
@@ -0,0 +1 @@
+#include