增加界面

pull/3/head
陈增辉 2025-02-07 17:16:22 +08:00
parent 9873927a52
commit 766168086b
114 changed files with 80935 additions and 528 deletions

30
.gitignore vendored
View File

@ -17,21 +17,21 @@
mono_crash.* mono_crash.*
# Build results # Build results
**/[Dd]ebug/ **/**/[Dd]ebug/
**/[Dd]ebugPublic/ **/**/[Dd]ebugPublic/
**/[Rr]elease/ **/**/[Rr]elease/
**/[Rr]eleases/ **/**/[Rr]eleases/
**/x64/ **/**/x64/
**/x86/ **/**/x86/
**/[Ww][Ii][Nn]32/ **/**/[Ww][Ii][Nn]32/
**/[Aa][Rr][Mm]/ **/**/[Aa][Rr][Mm]/
**/[Aa][Rr][Mm]64/ **/**/[Aa][Rr][Mm]64/
**/bld/ **/**/bld/
**/[Bb]in/ **/**/[Bb]in/
**/[Oo]bj/ **/**/[Oo]bj/
**/[Oo]ut/ **/**/[Oo]ut/
**/[Ll]og/ **/**/[Ll]og/
**/[Ll]ogs/ **/**/[Ll]ogs/
**/Releases **/Releases
# Visual Studio 2015/2017 cache/options directory # Visual Studio 2015/2017 cache/options directory

View File

@ -1,2 +0,0 @@
PlatformToolSet=v143:VCToolArchitecture=Native64Bit:VCToolsVersion=14.40.33807:TargetPlatformVersion=10.0.22621.0:VcpkgTriplet=x64-windows:
Release|x64|C:\Users\30453\Desktop\RasterTool\RasterProcessTool\LAMPSARProcessProgram\|

View File

@ -1,15 +0,0 @@
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\BaseTool\BaseTool.cpp;C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\BaseTool.obj
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\BaseTool\EchoDataFormat.cpp;C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\EchoDataFormat.obj
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\BaseTool\FileOperator.cpp;C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\FileOperator.obj
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\BaseTool\GeoOperator.cpp;C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\GeoOperator.obj
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\BaseTool\ImageOperatorBase.cpp;C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\ImageOperatorBase.obj
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\BaseTool\LogInfoCls.cpp;C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\LogInfoCls.obj
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\BaseTool\QToolProcessBarDialog.cpp;C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\QToolProcessBarDialog.obj
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\BaseTool\RasterToolBase.cpp;C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\RasterToolBase.obj
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\BaseTool\SARSimulationImageL1.cpp;C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\SARSimulationImageL1.obj
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\BaseTool\stdafx.cpp;C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\stdafx.obj
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\dllmain.cpp;C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\dllmain.obj
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\pch.cpp;C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\pch.obj
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\ToolAbstract\QToolAbstract.cpp;C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\QToolAbstract.obj
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\qt\moc\moc_QToolAbstract.cpp;C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\moc_QToolAbstract.obj
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\qt\moc\moc_QToolProcessBarDialog.cpp;C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\moc_QToolProcessBarDialog.obj

View File

@ -1,5 +0,0 @@
^C:\USERS\30453\DESKTOP\RASTERTOOL\RASTERPROCESSTOOL\BASECOMMONLIBRARY\X64\RELEASE\BASETOOL.OBJ|C:\USERS\30453\DESKTOP\RASTERTOOL\RASTERPROCESSTOOL\BASECOMMONLIBRARY\X64\RELEASE\DLLMAIN.OBJ|C:\USERS\30453\DESKTOP\RASTERTOOL\RASTERPROCESSTOOL\BASECOMMONLIBRARY\X64\RELEASE\ECHODATAFORMAT.OBJ|C:\USERS\30453\DESKTOP\RASTERTOOL\RASTERPROCESSTOOL\BASECOMMONLIBRARY\X64\RELEASE\FILEOPERATOR.OBJ|C:\USERS\30453\DESKTOP\RASTERTOOL\RASTERPROCESSTOOL\BASECOMMONLIBRARY\X64\RELEASE\GEOOPERATOR.OBJ|C:\USERS\30453\DESKTOP\RASTERTOOL\RASTERPROCESSTOOL\BASECOMMONLIBRARY\X64\RELEASE\IMAGEOPERATORBASE.OBJ|C:\USERS\30453\DESKTOP\RASTERTOOL\RASTERPROCESSTOOL\BASECOMMONLIBRARY\X64\RELEASE\LOGINFOCLS.OBJ|C:\USERS\30453\DESKTOP\RASTERTOOL\RASTERPROCESSTOOL\BASECOMMONLIBRARY\X64\RELEASE\MOC_QTOOLABSTRACT.OBJ|C:\USERS\30453\DESKTOP\RASTERTOOL\RASTERPROCESSTOOL\BASECOMMONLIBRARY\X64\RELEASE\MOC_QTOOLPROCESSBARDIALOG.OBJ|C:\USERS\30453\DESKTOP\RASTERTOOL\RASTERPROCESSTOOL\BASECOMMONLIBRARY\X64\RELEASE\PCH.OBJ|C:\USERS\30453\DESKTOP\RASTERTOOL\RASTERPROCESSTOOL\BASECOMMONLIBRARY\X64\RELEASE\QTOOLABSTRACT.OBJ|C:\USERS\30453\DESKTOP\RASTERTOOL\RASTERPROCESSTOOL\BASECOMMONLIBRARY\X64\RELEASE\QTOOLPROCESSBARDIALOG.OBJ|C:\USERS\30453\DESKTOP\RASTERTOOL\RASTERPROCESSTOOL\BASECOMMONLIBRARY\X64\RELEASE\RASTERTOOLBASE.OBJ|C:\USERS\30453\DESKTOP\RASTERTOOL\RASTERPROCESSTOOL\BASECOMMONLIBRARY\X64\RELEASE\SARSIMULATIONIMAGEL1.OBJ|C:\USERS\30453\DESKTOP\RASTERTOOL\RASTERPROCESSTOOL\BASECOMMONLIBRARY\X64\RELEASE\STDAFX.OBJ
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\LAMPSARProcessProgram\x64\Release\BaseCommonLibrary.lib
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\LAMPSARProcessProgram\x64\Release\BaseCommonLibrary.EXP
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\BaseCommonLibrary.IPDB
C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\BaseCommonLibrary.iobj

View File

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<ProjectOutputs>
<ProjectOutput>
<FullPath>C:\Users\30453\Desktop\RasterTool\RasterProcessTool\LAMPSARProcessProgram\x64\Release\BaseCommonLibrary.dll</FullPath>
</ProjectOutput>
</ProjectOutputs>
<ContentFiles />
<SatelliteDlls />
<NonRecipeFileRefs />
</Project>

View File

@ -1,97 +0,0 @@
/****************************************************************************
** Meta object code from reading C++ file 'QToolProcessBarDialog.h'
**
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.13)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include <memory>
#include "../../../../BaseTool/QToolProcessBarDialog.h"
#include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'QToolProcessBarDialog.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 67
#error "This file was generated using the moc from 5.15.13. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
QT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
struct qt_meta_stringdata_QToolProcessBarDialog_t {
QByteArrayData data[1];
char stringdata0[22];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_QToolProcessBarDialog_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
static const qt_meta_stringdata_QToolProcessBarDialog_t qt_meta_stringdata_QToolProcessBarDialog = {
{
QT_MOC_LITERAL(0, 0, 21) // "QToolProcessBarDialog"
},
"QToolProcessBarDialog"
};
#undef QT_MOC_LITERAL
static const uint qt_meta_data_QToolProcessBarDialog[] = {
// content:
8, // revision
0, // classname
0, 0, // classinfo
0, 0, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
0 // eod
};
void QToolProcessBarDialog::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
(void)_o;
(void)_id;
(void)_c;
(void)_a;
}
QT_INIT_METAOBJECT const QMetaObject QToolProcessBarDialog::staticMetaObject = { {
QMetaObject::SuperData::link<QDialog::staticMetaObject>(),
qt_meta_stringdata_QToolProcessBarDialog.data,
qt_meta_data_QToolProcessBarDialog,
qt_static_metacall,
nullptr,
nullptr
} };
const QMetaObject *QToolProcessBarDialog::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *QToolProcessBarDialog::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_QToolProcessBarDialog.stringdata0))
return static_cast<void*>(this);
if (!strcmp(_clname, "ShowProessAbstract"))
return static_cast< ShowProessAbstract*>(this);
return QDialog::qt_metacast(_clname);
}
int QToolProcessBarDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QDialog::qt_metacall(_c, _id, _a);
return _id;
}
QT_WARNING_POP
QT_END_MOC_NAMESPACE

View File

@ -1,26 +0,0 @@
QMAKE_CXX.QT_COMPILER_STDCXX = 199711L
QMAKE_CXX.QMAKE_MSC_VER = 1940
QMAKE_CXX.QMAKE_MSC_FULL_VER = 194033813
QMAKE_CXX.COMPILER_MACROS = \
QT_COMPILER_STDCXX \
QMAKE_MSC_VER \
QMAKE_MSC_FULL_VER
QMAKE_CXX.INCDIRS = \
./BaseTool \
"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.40.33807\\include" \
"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.40.33807\\atlmfc\\include" \
"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\VS\\include" \
"C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\ucrt" \
"C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\um" \
"C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\shared" \
"C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\winrt" \
"C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.22621.0\\cppwinrt" \
"C:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.8\\Include\\um" \
C:\\vcpkg\\installed\\x64-windows\\include
QMAKE_CXX.LIBDIRS = \
"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.40.33807\\lib\\x64" \
"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.40.33807\\atlmfc\\lib\\x64" \
"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\VS\\lib\\x64" \
"C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.22621.0\\ucrt\\x64" \
"C:\\Program Files (x86)\\Windows Kits\\10\\lib\\10.0.22621.0\\um\\x64" \
"C:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.8\\lib\\um\\x64"

View File

@ -1 +0,0 @@
This is a dummy file needed to create ./moc_predefs.h

View File

@ -1,25 +0,0 @@
QT_SYSROOT:
QT_INSTALL_PREFIX:C:/vcpkg/installed/x64-windows
QT_INSTALL_ARCHDATA:C:/vcpkg/installed/x64-windows/tools/qt5
QT_INSTALL_DATA:C:/vcpkg/installed/x64-windows/share/qt5
QT_INSTALL_DOCS:C:/vcpkg/installed/x64-windows/share/qt5/doc
QT_INSTALL_HEADERS:C:/vcpkg/installed/x64-windows/include/qt5
QT_INSTALL_LIBS:C:/vcpkg/installed/x64-windows/lib
QT_INSTALL_LIBEXECS:C:/vcpkg/installed/x64-windows/tools/qt5
QT_INSTALL_BINS:C:/vcpkg/installed/x64-windows/bin
QT_INSTALL_TESTS:C:/vcpkg/installed/x64-windows/tests
QT_INSTALL_PLUGINS:C:/vcpkg/installed/x64-windows/plugins
QT_INSTALL_IMPORTS:C:/vcpkg/installed/x64-windows/tools/qt5/imports
QT_INSTALL_QML:C:/vcpkg/installed/x64-windows/qml
QT_INSTALL_TRANSLATIONS:C:/vcpkg/installed/x64-windows/share/qt5/translations
QT_INSTALL_CONFIGURATION:
QT_INSTALL_EXAMPLES:C:/vcpkg/installed/x64-windows/share/qt5/examples
QT_INSTALL_DEMOS:C:/vcpkg/installed/x64-windows/share/qt5/examples
QT_HOST_PREFIX:C:/vcpkg/installed/x64-windows/tools/qt5
QT_HOST_DATA:C:/vcpkg/installed/x64-windows/tools/qt5
QT_HOST_BINS:C:/vcpkg/installed/x64-windows/tools/qt5/bin
QT_HOST_LIBS:C:/vcpkg/installed/x64-windows/tools/qt5/lib
QMAKE_SPEC:win32-msvc
QMAKE_XSPEC:win32-msvc
QMAKE_VERSION:3.1
QT_VERSION:5.15.13

View File

@ -1,36 +0,0 @@
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts
CONFIG += no_fixpath
QT = core xml sql opengl gui svg xmlpatterns widgets location positioning openglextensions charts

View File

@ -1,88 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid></ProjectGuid>
<RootNamespace>qtvars</RootNamespace>
<Keyword>Qt4VSv1.0</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Release|x64&apos;" Label="Configuration">
<PlatformToolset>v143</PlatformToolset>
<OutputDirectory>.\</OutputDirectory>
<ATLMinimizesCRunTimeLibraryUsage>false</ATLMinimizesCRunTimeLibraryUsage>
<CharacterSet>NotSet</CharacterSet>
<ConfigurationType>Application</ConfigurationType>
<PrimaryOutput>qtvars</PrimaryOutput>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Release|x64&apos;" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists(&apos;$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props&apos;)" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<OutDir Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Release|x64&apos;">.\</OutDir>
<TargetName Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Release|x64&apos;">qtvars</TargetName>
<IgnoreImportLibrary Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Release|x64&apos;">true</IgnoreImportLibrary>
<LinkIncremental Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Release|x64&apos;">false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Release|x64&apos;">
<ClCompile>
<AdditionalIncludeDirectories>C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\qt\qmake;C:\vcpkg\installed\x64-windows\include\qt5;C:\vcpkg\installed\x64-windows\include\qt5\QtXml;C:\vcpkg\installed\x64-windows\include\qt5\QtSql;C:\vcpkg\installed\x64-windows\include\qt5\QtOpenGL;C:\vcpkg\installed\x64-windows\include\qt5\QtSvg;C:\vcpkg\installed\x64-windows\include\qt5\QtCharts;C:\vcpkg\installed\x64-windows\include\qt5\QtWidgets;C:\vcpkg\installed\x64-windows\include\qt5\QtLocation;C:\vcpkg\installed\x64-windows\include\qt5\QtPositioningQuick;C:\vcpkg\installed\x64-windows\include\qt5\QtQuick;C:\vcpkg\installed\x64-windows\include\qt5\QtOpenGLExtensions;C:\vcpkg\installed\x64-windows\include\qt5\QtGui;C:\vcpkg\installed\x64-windows\include\qt5\QtXmlPatterns;C:\vcpkg\installed\x64-windows\include\qt5\QtQmlModels;C:\vcpkg\installed\x64-windows\include\qt5\QtQml;C:\vcpkg\installed\x64-windows\include\qt5\QtNetwork;C:\vcpkg\installed\x64-windows\include\qt5\QtPositioning;C:\vcpkg\installed\x64-windows\include\qt5\QtCore;C:\Users\30453\Desktop\RasterTool\RasterProcessTool\BaseCommonLibrary\x64\Release\qt\qmake;C:\vcpkg\installed\x64-windows\tools\qt5\mkspecs\win32-msvc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
<AssemblerListingLocation>.\</AssemblerListingLocation>
<BrowseInformation>false</BrowseInformation>
<DebugInformationFormat>None</DebugInformationFormat>
<ExceptionHandling>Sync</ExceptionHandling>
<ObjectFileName>.\</ObjectFileName>
<Optimization>MaxSpeed</Optimization>
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;NDEBUG;QT_NO_DEBUG;QT_XML_LIB;QT_SQL_LIB;QT_OPENGL_LIB;QT_SVG_LIB;QT_CHARTS_LIB;QT_WIDGETS_LIB;QT_LOCATION_LIB;QT_POSITIONINGQUICK_LIB;QT_QUICK_LIB;QT_OPENGLEXTENSIONS_LIB;QT_GUI_LIB;QT_XMLPATTERNS_LIB;QT_QMLMODELS_LIB;QT_QML_LIB;QT_NETWORK_LIB;QT_POSITIONING_LIB;QT_CORE_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessToFile>false</PreprocessToFile>
<ProgramDataBaseFileName></ProgramDataBaseFileName>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<SuppressStartupBanner>true</SuppressStartupBanner>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<UseFullPaths>false</UseFullPaths>
<WarningLevel>TurnOffAllWarnings</WarningLevel>
</ClCompile>
<Link>
<AdditionalDependencies>C:\vcpkg\installed\x64-windows\lib\Qt5Xml.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Sql.lib;C:\vcpkg\installed\x64-windows\lib\Qt5OpenGL.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Svg.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Charts.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Widgets.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Location.lib;C:\vcpkg\installed\x64-windows\lib\Qt5PositioningQuick.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Quick.lib;C:\vcpkg\installed\x64-windows\lib\Qt5OpenGLExtensions.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;C:\vcpkg\installed\x64-windows\lib\bz2.lib;C:\vcpkg\installed\x64-windows\lib\libpng16.lib;C:\vcpkg\installed\x64-windows\lib\zlib.lib;C:\vcpkg\installed\x64-windows\lib\zstd.lib;C:\vcpkg\installed\x64-windows\lib\icuin.lib;C:\vcpkg\installed\x64-windows\lib\icuuc.lib;C:\vcpkg\installed\x64-windows\lib\icuio.lib;C:\vcpkg\installed\x64-windows\lib\icudt.lib;advapi32.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Gui.lib;C:\vcpkg\installed\x64-windows\lib\Qt5XmlPatterns.lib;C:\vcpkg\installed\x64-windows\lib\Qt5QmlModels.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Qml.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Network.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Positioning.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Core.lib;C:\vcpkg\installed\x64-windows\lib\manual-link\qtmain.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;C:\vcpkg\installed\x64-windows\lib\bz2.lib;C:\vcpkg\installed\x64-windows\lib\libpng16.lib;C:\vcpkg\installed\x64-windows\lib\zlib.lib;C:\vcpkg\installed\x64-windows\lib\zstd.lib;C:\vcpkg\installed\x64-windows\lib\icuin.lib;C:\vcpkg\installed\x64-windows\lib\icuuc.lib;C:\vcpkg\installed\x64-windows\lib\icuio.lib;C:\vcpkg\installed\x64-windows\lib\icudt.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>C:\vcpkg\installed\x64-windows\lib;C:\vcpkg\installed\x64-windows\lib\manual-link;C:\vcpkg\installed\x64-windows\lib;C:\vcpkg\installed\x64-windows\lib\manual-link;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>&quot;/MANIFESTDEPENDENCY:type=&apos;win32&apos; name=&apos;Microsoft.Windows.Common-Controls&apos; version=&apos;6.0.0.0&apos; publicKeyToken=&apos;6595b64144ccf1df&apos; language=&apos;*&apos; processorArchitecture=&apos;*&apos;&quot; %(AdditionalOptions)</AdditionalOptions>
<DataExecutionPrevention>true</DataExecutionPrevention>
<GenerateDebugInformation>false</GenerateDebugInformation>
<IgnoreImportLibrary>true</IgnoreImportLibrary>
<LinkIncremental>false</LinkIncremental>
<OptimizeReferences>true</OptimizeReferences>
<OutputFile>$(OutDir)\qtvars.exe</OutputFile>
<RandomizedBaseAddress>true</RandomizedBaseAddress>
<SubSystem>Windows</SubSystem>
<SuppressStartupBanner>true</SuppressStartupBanner>
</Link>
<Midl>
<DefaultCharType>Unsigned</DefaultCharType>
<EnableErrorChecks>None</EnableErrorChecks>
<WarningLevel>0</WarningLevel>
</Midl>
<ResourceCompile>
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;NDEBUG;QT_NO_DEBUG;QT_XML_LIB;QT_SQL_LIB;QT_OPENGL_LIB;QT_SVG_LIB;QT_CHARTS_LIB;QT_WIDGETS_LIB;QT_LOCATION_LIB;QT_POSITIONINGQUICK_LIB;QT_QUICK_LIB;QT_OPENGLEXTENSIONS_LIB;QT_GUI_LIB;QT_XMLPATTERNS_LIB;QT_QMLMODELS_LIB;QT_QML_LIB;QT_NETWORK_LIB;QT_POSITIONING_LIB;QT_CORE_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemGroup>
<CustomBuild Include="moc_predefs.h.cbt">
<FileType>Document</FileType>
<AdditionalInputs Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Release|x64&apos;">C:\vcpkg\installed\x64-windows\tools\qt5\mkspecs\features\data\dummy.cpp;%(AdditionalInputs)</AdditionalInputs>
<Command Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Release|x64&apos;">cl -BxC:\vcpkg\installed\x64-windows\tools\qt5\bin\qmake.exe -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -O2 -MD -W0 -E C:\vcpkg\installed\x64-windows\tools\qt5\mkspecs\features\data\dummy.cpp 2&gt;NUL &gt;moc_predefs.h</Command>
<Message Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Release|x64&apos;">Generate moc_predefs.h</Message>
<Outputs Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Release|x64&apos;">moc_predefs.h;%(Outputs)</Outputs>
</CustomBuild>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets" />
</Project>

View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Generated Files">
<UniqueIdentifier>{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}</UniqueIdentifier>
<Extensions>cpp;c;cxx;moc;h;def;odl;idl;res;</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="moc_predefs.h.cbt">
<Filter>Generated Files</Filter>
</CustomBuild>
</ItemGroup>
</Project>

View File

@ -1,41 +0,0 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Qt_DEFINES_>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;NDEBUG;QT_NO_DEBUG;QT_XML_LIB;QT_SQL_LIB;QT_OPENGL_LIB;QT_SVG_LIB;QT_CHARTS_LIB;QT_WIDGETS_LIB;QT_LOCATION_LIB;QT_POSITIONINGQUICK_LIB;QT_QUICK_LIB;QT_OPENGLEXTENSIONS_LIB;QT_GUI_LIB;QT_XMLPATTERNS_LIB;QT_QMLMODELS_LIB;QT_QML_LIB;QT_NETWORK_LIB;QT_POSITIONING_LIB;QT_CORE_LIB</Qt_DEFINES_>
<Qt_INCLUDEPATH_>C:\vcpkg\installed\x64-windows\include\qt5;C:\vcpkg\installed\x64-windows\include\qt5\QtXml;C:\vcpkg\installed\x64-windows\include\qt5\QtSql;C:\vcpkg\installed\x64-windows\include\qt5\QtOpenGL;C:\vcpkg\installed\x64-windows\include\qt5\QtSvg;C:\vcpkg\installed\x64-windows\include\qt5\QtCharts;C:\vcpkg\installed\x64-windows\include\qt5\QtWidgets;C:\vcpkg\installed\x64-windows\include\qt5\QtLocation;C:\vcpkg\installed\x64-windows\include\qt5\QtPositioningQuick;C:\vcpkg\installed\x64-windows\include\qt5\QtQuick;C:\vcpkg\installed\x64-windows\include\qt5\QtOpenGLExtensions;C:\vcpkg\installed\x64-windows\include\qt5\QtGui;C:\vcpkg\installed\x64-windows\include\qt5\QtXmlPatterns;C:\vcpkg\installed\x64-windows\include\qt5\QtQmlModels;C:\vcpkg\installed\x64-windows\include\qt5\QtQml;C:\vcpkg\installed\x64-windows\include\qt5\QtNetwork;C:\vcpkg\installed\x64-windows\include\qt5\QtPositioning;C:\vcpkg\installed\x64-windows\include\qt5\QtCore;C:\vcpkg\installed\x64-windows\tools\qt5\mkspecs\win32-msvc</Qt_INCLUDEPATH_>
<Qt_STDCPP_></Qt_STDCPP_>
<Qt_RUNTIME_>MultiThreadedDLL</Qt_RUNTIME_>
<Qt_CL_OPTIONS_>-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus</Qt_CL_OPTIONS_>
<Qt_LIBS_>C:\vcpkg\installed\x64-windows\lib\Qt5Xml.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Sql.lib;C:\vcpkg\installed\x64-windows\lib\Qt5OpenGL.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Svg.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Charts.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Widgets.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Location.lib;C:\vcpkg\installed\x64-windows\lib\Qt5PositioningQuick.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Quick.lib;C:\vcpkg\installed\x64-windows\lib\Qt5OpenGLExtensions.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;C:\vcpkg\installed\x64-windows\lib\bz2.lib;C:\vcpkg\installed\x64-windows\lib\libpng16.lib;C:\vcpkg\installed\x64-windows\lib\zlib.lib;C:\vcpkg\installed\x64-windows\lib\zstd.lib;C:\vcpkg\installed\x64-windows\lib\icuin.lib;C:\vcpkg\installed\x64-windows\lib\icuuc.lib;C:\vcpkg\installed\x64-windows\lib\icuio.lib;C:\vcpkg\installed\x64-windows\lib\icudt.lib;advapi32.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Gui.lib;C:\vcpkg\installed\x64-windows\lib\Qt5XmlPatterns.lib;C:\vcpkg\installed\x64-windows\lib\Qt5QmlModels.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Qml.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Network.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Positioning.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Core.lib;C:\vcpkg\installed\x64-windows\lib\manual-link\qtmain.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;C:\vcpkg\installed\x64-windows\lib\bz2.lib;C:\vcpkg\installed\x64-windows\lib\libpng16.lib;C:\vcpkg\installed\x64-windows\lib\zlib.lib;C:\vcpkg\installed\x64-windows\lib\zstd.lib;C:\vcpkg\installed\x64-windows\lib\icuin.lib;C:\vcpkg\installed\x64-windows\lib\icuuc.lib;C:\vcpkg\installed\x64-windows\lib\icuio.lib;C:\vcpkg\installed\x64-windows\lib\icudt.lib;advapi32.lib</Qt_LIBS_>
<Qt_LINK_OPTIONS_>"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'"</Qt_LINK_OPTIONS_>
<QMake_QT_SYSROOT_></QMake_QT_SYSROOT_>
<QMake_QT_INSTALL_PREFIX_>C:/vcpkg/installed/x64-windows</QMake_QT_INSTALL_PREFIX_>
<QMake_QT_INSTALL_ARCHDATA_>C:/vcpkg/installed/x64-windows/tools/qt5</QMake_QT_INSTALL_ARCHDATA_>
<QMake_QT_INSTALL_DATA_>C:/vcpkg/installed/x64-windows/share/qt5</QMake_QT_INSTALL_DATA_>
<QMake_QT_INSTALL_DOCS_>C:/vcpkg/installed/x64-windows/share/qt5/doc</QMake_QT_INSTALL_DOCS_>
<QMake_QT_INSTALL_HEADERS_>C:/vcpkg/installed/x64-windows/include/qt5</QMake_QT_INSTALL_HEADERS_>
<QMake_QT_INSTALL_LIBS_>C:/vcpkg/installed/x64-windows/lib</QMake_QT_INSTALL_LIBS_>
<QMake_QT_INSTALL_LIBEXECS_>C:/vcpkg/installed/x64-windows/tools/qt5</QMake_QT_INSTALL_LIBEXECS_>
<QMake_QT_INSTALL_BINS_>C:/vcpkg/installed/x64-windows/bin</QMake_QT_INSTALL_BINS_>
<QMake_QT_INSTALL_TESTS_>C:/vcpkg/installed/x64-windows/tests</QMake_QT_INSTALL_TESTS_>
<QMake_QT_INSTALL_PLUGINS_>C:/vcpkg/installed/x64-windows/plugins</QMake_QT_INSTALL_PLUGINS_>
<QMake_QT_INSTALL_IMPORTS_>C:/vcpkg/installed/x64-windows/tools/qt5/imports</QMake_QT_INSTALL_IMPORTS_>
<QMake_QT_INSTALL_QML_>C:/vcpkg/installed/x64-windows/qml</QMake_QT_INSTALL_QML_>
<QMake_QT_INSTALL_TRANSLATIONS_>C:/vcpkg/installed/x64-windows/share/qt5/translations</QMake_QT_INSTALL_TRANSLATIONS_>
<QMake_QT_INSTALL_CONFIGURATION_></QMake_QT_INSTALL_CONFIGURATION_>
<QMake_QT_INSTALL_EXAMPLES_>C:/vcpkg/installed/x64-windows/share/qt5/examples</QMake_QT_INSTALL_EXAMPLES_>
<QMake_QT_INSTALL_DEMOS_>C:/vcpkg/installed/x64-windows/share/qt5/examples</QMake_QT_INSTALL_DEMOS_>
<QMake_QT_HOST_PREFIX_>C:/vcpkg/installed/x64-windows/tools/qt5</QMake_QT_HOST_PREFIX_>
<QMake_QT_HOST_DATA_>C:/vcpkg/installed/x64-windows/tools/qt5</QMake_QT_HOST_DATA_>
<QMake_QT_HOST_BINS_>C:/vcpkg/installed/x64-windows/tools/qt5/bin</QMake_QT_HOST_BINS_>
<QMake_QT_HOST_LIBS_>C:/vcpkg/installed/x64-windows/tools/qt5/lib</QMake_QT_HOST_LIBS_>
<QMake_QMAKE_SPEC_>win32-msvc</QMake_QMAKE_SPEC_>
<QMake_QMAKE_XSPEC_>win32-msvc</QMake_QMAKE_XSPEC_>
<QMake_QMAKE_VERSION_>3.1</QMake_QMAKE_VERSION_>
<QMake_QT_VERSION_>5.15.13</QMake_QT_VERSION_>
<QtBkup_QtHash>jVJBbsMwDPuKfpDTjj24suZqUyRXUrYWw9D//2JOkKHALsvBgCGTFEn4iytpct5PaSbxuOYLoDnBbRaIq4B10ibQFob4aOu4l0xyDfjk2igDxLAkm0K34PXC2nYe3ZI0xigAL8UH+My6nUqvrBSnqbu9EebESfM23CSa29InFLS5s9BA0QAiRZg/UQGsKEul4elyVKrUuq0ospMr+zBgzhQQWbH3o1JStC2lUWTRWryCL6PMmY7yd7jw2YvfAeVhfS3wcC3PLDsRhtY/7BH7fXoSR3mk4xPgGn99O+bhj8rveiehEvT9Aw==</QtBkup_QtHash>
<QtVersion>5.15.13</QtVersion>
<QtVersionMajor>5</QtVersionMajor>
<QtVersionMinor>15</QtVersionMinor>
<QtVersionPatch>13</QtVersionPatch>
</PropertyGroup>
</Project>

View File

@ -1,41 +0,0 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Qt_DEFINES_>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;NDEBUG;QT_NO_DEBUG;QT_XML_LIB;QT_SQL_LIB;QT_OPENGL_LIB;QT_SVG_LIB;QT_CHARTS_LIB;QT_WIDGETS_LIB;QT_LOCATION_LIB;QT_POSITIONINGQUICK_LIB;QT_QUICK_LIB;QT_OPENGLEXTENSIONS_LIB;QT_GUI_LIB;QT_XMLPATTERNS_LIB;QT_QMLMODELS_LIB;QT_QML_LIB;QT_NETWORK_LIB;QT_POSITIONING_LIB;QT_CORE_LIB</Qt_DEFINES_>
<Qt_INCLUDEPATH_>C:\vcpkg\installed\x64-windows\include\qt5;C:\vcpkg\installed\x64-windows\include\qt5\QtXml;C:\vcpkg\installed\x64-windows\include\qt5\QtSql;C:\vcpkg\installed\x64-windows\include\qt5\QtOpenGL;C:\vcpkg\installed\x64-windows\include\qt5\QtSvg;C:\vcpkg\installed\x64-windows\include\qt5\QtCharts;C:\vcpkg\installed\x64-windows\include\qt5\QtWidgets;C:\vcpkg\installed\x64-windows\include\qt5\QtLocation;C:\vcpkg\installed\x64-windows\include\qt5\QtPositioningQuick;C:\vcpkg\installed\x64-windows\include\qt5\QtQuick;C:\vcpkg\installed\x64-windows\include\qt5\QtOpenGLExtensions;C:\vcpkg\installed\x64-windows\include\qt5\QtGui;C:\vcpkg\installed\x64-windows\include\qt5\QtXmlPatterns;C:\vcpkg\installed\x64-windows\include\qt5\QtQmlModels;C:\vcpkg\installed\x64-windows\include\qt5\QtQml;C:\vcpkg\installed\x64-windows\include\qt5\QtNetwork;C:\vcpkg\installed\x64-windows\include\qt5\QtPositioning;C:\vcpkg\installed\x64-windows\include\qt5\QtCore;C:\vcpkg\installed\x64-windows\tools\qt5\mkspecs\win32-msvc</Qt_INCLUDEPATH_>
<Qt_STDCPP_></Qt_STDCPP_>
<Qt_RUNTIME_>MultiThreadedDLL</Qt_RUNTIME_>
<Qt_CL_OPTIONS_>-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus</Qt_CL_OPTIONS_>
<Qt_LIBS_>C:\vcpkg\installed\x64-windows\lib\Qt5Xml.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Sql.lib;C:\vcpkg\installed\x64-windows\lib\Qt5OpenGL.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Svg.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Charts.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Widgets.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Location.lib;C:\vcpkg\installed\x64-windows\lib\Qt5PositioningQuick.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Quick.lib;C:\vcpkg\installed\x64-windows\lib\Qt5OpenGLExtensions.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;C:\vcpkg\installed\x64-windows\lib\bz2.lib;C:\vcpkg\installed\x64-windows\lib\libpng16.lib;C:\vcpkg\installed\x64-windows\lib\zlib.lib;C:\vcpkg\installed\x64-windows\lib\zstd.lib;C:\vcpkg\installed\x64-windows\lib\icuin.lib;C:\vcpkg\installed\x64-windows\lib\icuuc.lib;C:\vcpkg\installed\x64-windows\lib\icuio.lib;C:\vcpkg\installed\x64-windows\lib\icudt.lib;advapi32.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Gui.lib;C:\vcpkg\installed\x64-windows\lib\Qt5XmlPatterns.lib;C:\vcpkg\installed\x64-windows\lib\Qt5QmlModels.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Qml.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Network.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Positioning.lib;C:\vcpkg\installed\x64-windows\lib\Qt5Core.lib;C:\vcpkg\installed\x64-windows\lib\manual-link\qtmain.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;C:\vcpkg\installed\x64-windows\lib\bz2.lib;C:\vcpkg\installed\x64-windows\lib\libpng16.lib;C:\vcpkg\installed\x64-windows\lib\zlib.lib;C:\vcpkg\installed\x64-windows\lib\zstd.lib;C:\vcpkg\installed\x64-windows\lib\icuin.lib;C:\vcpkg\installed\x64-windows\lib\icuuc.lib;C:\vcpkg\installed\x64-windows\lib\icuio.lib;C:\vcpkg\installed\x64-windows\lib\icudt.lib;advapi32.lib</Qt_LIBS_>
<Qt_LINK_OPTIONS_>"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'"</Qt_LINK_OPTIONS_>
<QMake_QT_SYSROOT_></QMake_QT_SYSROOT_>
<QMake_QT_INSTALL_PREFIX_>C:/vcpkg/installed/x64-windows</QMake_QT_INSTALL_PREFIX_>
<QMake_QT_INSTALL_ARCHDATA_>C:/vcpkg/installed/x64-windows/tools/qt5</QMake_QT_INSTALL_ARCHDATA_>
<QMake_QT_INSTALL_DATA_>C:/vcpkg/installed/x64-windows/share/qt5</QMake_QT_INSTALL_DATA_>
<QMake_QT_INSTALL_DOCS_>C:/vcpkg/installed/x64-windows/share/qt5/doc</QMake_QT_INSTALL_DOCS_>
<QMake_QT_INSTALL_HEADERS_>C:/vcpkg/installed/x64-windows/include/qt5</QMake_QT_INSTALL_HEADERS_>
<QMake_QT_INSTALL_LIBS_>C:/vcpkg/installed/x64-windows/lib</QMake_QT_INSTALL_LIBS_>
<QMake_QT_INSTALL_LIBEXECS_>C:/vcpkg/installed/x64-windows/tools/qt5</QMake_QT_INSTALL_LIBEXECS_>
<QMake_QT_INSTALL_BINS_>C:/vcpkg/installed/x64-windows/bin</QMake_QT_INSTALL_BINS_>
<QMake_QT_INSTALL_TESTS_>C:/vcpkg/installed/x64-windows/tests</QMake_QT_INSTALL_TESTS_>
<QMake_QT_INSTALL_PLUGINS_>C:/vcpkg/installed/x64-windows/plugins</QMake_QT_INSTALL_PLUGINS_>
<QMake_QT_INSTALL_IMPORTS_>C:/vcpkg/installed/x64-windows/tools/qt5/imports</QMake_QT_INSTALL_IMPORTS_>
<QMake_QT_INSTALL_QML_>C:/vcpkg/installed/x64-windows/qml</QMake_QT_INSTALL_QML_>
<QMake_QT_INSTALL_TRANSLATIONS_>C:/vcpkg/installed/x64-windows/share/qt5/translations</QMake_QT_INSTALL_TRANSLATIONS_>
<QMake_QT_INSTALL_CONFIGURATION_></QMake_QT_INSTALL_CONFIGURATION_>
<QMake_QT_INSTALL_EXAMPLES_>C:/vcpkg/installed/x64-windows/share/qt5/examples</QMake_QT_INSTALL_EXAMPLES_>
<QMake_QT_INSTALL_DEMOS_>C:/vcpkg/installed/x64-windows/share/qt5/examples</QMake_QT_INSTALL_DEMOS_>
<QMake_QT_HOST_PREFIX_>C:/vcpkg/installed/x64-windows/tools/qt5</QMake_QT_HOST_PREFIX_>
<QMake_QT_HOST_DATA_>C:/vcpkg/installed/x64-windows/tools/qt5</QMake_QT_HOST_DATA_>
<QMake_QT_HOST_BINS_>C:/vcpkg/installed/x64-windows/tools/qt5/bin</QMake_QT_HOST_BINS_>
<QMake_QT_HOST_LIBS_>C:/vcpkg/installed/x64-windows/tools/qt5/lib</QMake_QT_HOST_LIBS_>
<QMake_QMAKE_SPEC_>win32-msvc</QMake_QMAKE_SPEC_>
<QMake_QMAKE_XSPEC_>win32-msvc</QMake_QMAKE_XSPEC_>
<QMake_QMAKE_VERSION_>3.1</QMake_QMAKE_VERSION_>
<QMake_QT_VERSION_>5.15.13</QMake_QT_VERSION_>
<QtBkup_QtHash>jVJBbsMwDPuKfpDTjj24suZqUyRXUrYWw9D//2JOkKHALsvBgCGTFEn4iytpct5PaSbxuOYLoDnBbRaIq4B10ibQFob4aOu4l0xyDfjk2igDxLAkm0K34PXC2nYe3ZI0xigAL8UH+My6nUqvrBSnqbu9EebESfM23CSa29InFLS5s9BA0QAiRZg/UQGsKEul4elyVKrUuq0ospMr+zBgzhQQWbH3o1JStC2lUWTRWryCL6PMmY7yd7jw2YvfAeVhfS3wcC3PLDsRhtY/7BH7fXoSR3mk4xPgGn99O+bhj8rveiehEvT9Aw==</QtBkup_QtHash>
<QtVersion>5.15.13</QtVersion>
<QtVersionMajor>5</QtVersionMajor>
<QtVersionMinor>15</QtVersionMinor>
<QtVersionPatch>13</QtVersionPatch>
</PropertyGroup>
</Project>

View File

@ -1,111 +0,0 @@
/********************************************************************************
** Form generated from reading UI file 'QToolProcessBarDialog.ui'
**
** Created by: Qt User Interface Compiler version 5.15.13
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_QTOOLPROCESSBARDIALOG_H
#define UI_QTOOLPROCESSBARDIALOG_H
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QDialog>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QLabel>
#include <QtWidgets/QProgressBar>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_QToolProcessBarDialogClass
{
public:
QVBoxLayout *verticalLayout;
QWidget *widget;
QGridLayout *gridLayout;
QPushButton *OKpushButton;
QLabel *labelTip;
QProgressBar *progressBar;
QGroupBox *groupBox;
QVBoxLayout *verticalLayout_2;
QTextEdit *textEditTip;
void setupUi(QDialog *QToolProcessBarDialogClass)
{
if (QToolProcessBarDialogClass->objectName().isEmpty())
QToolProcessBarDialogClass->setObjectName(QString::fromUtf8("QToolProcessBarDialogClass"));
QToolProcessBarDialogClass->resize(600, 400);
verticalLayout = new QVBoxLayout(QToolProcessBarDialogClass);
verticalLayout->setSpacing(6);
verticalLayout->setContentsMargins(11, 11, 11, 11);
verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
widget = new QWidget(QToolProcessBarDialogClass);
widget->setObjectName(QString::fromUtf8("widget"));
gridLayout = new QGridLayout(widget);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(11, 11, 11, 11);
gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
OKpushButton = new QPushButton(widget);
OKpushButton->setObjectName(QString::fromUtf8("OKpushButton"));
OKpushButton->setMinimumSize(QSize(120, 26));
OKpushButton->setMaximumSize(QSize(120, 26));
gridLayout->addWidget(OKpushButton, 1, 2, 1, 1);
labelTip = new QLabel(widget);
labelTip->setObjectName(QString::fromUtf8("labelTip"));
gridLayout->addWidget(labelTip, 1, 0, 1, 1);
progressBar = new QProgressBar(widget);
progressBar->setObjectName(QString::fromUtf8("progressBar"));
progressBar->setValue(24);
gridLayout->addWidget(progressBar, 2, 0, 1, 2);
verticalLayout->addWidget(widget);
groupBox = new QGroupBox(QToolProcessBarDialogClass);
groupBox->setObjectName(QString::fromUtf8("groupBox"));
verticalLayout_2 = new QVBoxLayout(groupBox);
verticalLayout_2->setSpacing(6);
verticalLayout_2->setContentsMargins(11, 11, 11, 11);
verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
textEditTip = new QTextEdit(groupBox);
textEditTip->setObjectName(QString::fromUtf8("textEditTip"));
verticalLayout_2->addWidget(textEditTip);
verticalLayout->addWidget(groupBox);
retranslateUi(QToolProcessBarDialogClass);
QMetaObject::connectSlotsByName(QToolProcessBarDialogClass);
} // setupUi
void retranslateUi(QDialog *QToolProcessBarDialogClass)
{
QToolProcessBarDialogClass->setWindowTitle(QCoreApplication::translate("QToolProcessBarDialogClass", "QToolProcessBarDialog", nullptr));
OKpushButton->setText(QCoreApplication::translate("QToolProcessBarDialogClass", "\351\200\200\345\207\272", nullptr));
labelTip->setText(QCoreApplication::translate("QToolProcessBarDialogClass", "\346\217\220\347\244\272", nullptr));
groupBox->setTitle(QString());
} // retranslateUi
};
namespace Ui {
class QToolProcessBarDialogClass: public Ui_QToolProcessBarDialogClass {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_QTOOLPROCESSBARDIALOG_H

63
LAMPMainWidget/.gitattributes vendored Normal file
View File

@ -0,0 +1,63 @@
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain

464
LAMPMainWidget/.gitignore vendored Normal file
View File

@ -0,0 +1,464 @@
CMakeCache.txt
CMakeFiles
CMakeScripts
Testing
Makefile
cmake_install.cmake
install_manifest.txt
compile_commands.json
CTestTestfile.cmake
/cmake-build-debug
/.idea
/.vs
*.swp
*.stash
*.user
.DS_Store
# ---> C++
# Prerequisites
*.d
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
# ---> VisualStudio
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
# ---> VisualStudioCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets
# Local History for Visual Studio Code
.history/
# Built Visual Studio Code Extensions
*.vsix

View File

@ -0,0 +1,99 @@
######################################################################
# Modified by ZLY 2022 01 15 22:08
######################################################################
TEMPLATE = app
TARGET = LAMPMainWidget
QT += core gui
QT += widgets sql
# Input
HEADERS += \
include/crs.h \
include/layerprovider.h \
include/mapcanvas.h \
include/mapcanvasmap.h \
include/maplayer.h \
include/maptool.h \
include/pointxy.h \
include/crs/webmercator.h \
include/gui/mainwindow.h \
include/gui/sponsorwindow.h \
include/gui/taskwindow.h \
include/layer/tmslayer.h \
include/provider/tmsprovider.h \
include/tools/maptoolpan.h \
include/tools/maptoolselect.h \
include/tools/maptoolzoomin.h \
include/tools/maptoolzoomout.h \
include/utils/LAMPMainWidget.h \
include/utils/imgwriter.h \
include/utils/network.h \
include/provider/tms/gaodenormalprovider.h \
include/provider/tms/gaodesatelliteprovider.h \
include/provider/tms/googlechinanormalprovider.h \
include/provider/tms/googlechinasatelliteprovider.h \
include/provider/tms/ostnormalprovider.h \
include/provider/tms/tmsproviderfactory.h \
include/tools/maptooldrawline.h \
maparea.h \
mapautoplane.h \
mapline.h \
include/tools/maptooladdplane.h \
include/tools/maptooldrawarea.h
FORMS += include/gui/mainwindow.ui \
include/gui/sponsorwindow.ui \
include/gui/taskwindow.ui
SOURCES += crs.cpp \
egmain.cpp \
maparea.cpp \
mapautoplane.cpp \
mapcanvas.cpp \
mapcanvasmap.cpp \
maplayer.cpp \
mapline.cpp \
maptool.cpp \
pointxy.cpp \
crs/webmercator.cpp \
gui/mainwindow.cpp \
gui/sponsorwindow.cpp \
gui/taskwindow.cpp \
layer/tmslayer.cpp \
provider/tmsprovider.cpp \
tools/maptooldrawline.cpp \
tools/maptoolpan.cpp \
tools/maptoolselect.cpp \
tools/maptoolzoomin.cpp \
tools/maptoolzoomout.cpp \
tools/maptooldrawarea.cpp \
tools/maptooladdplane.cpp \
utils/imgwriter.cpp \
utils/network.cpp \
provider/tms/gaodenormalprovider.cpp \
provider/tms/ostnormalprovider.cpp \
provider/tms/tmsproviderfactory.cpp
RESOURCES += resources/res.qrc
#LIBS += -LE:/PROJ/lib/ -lproj
#LIBS += -LE:/PROJ/lib/ -lproj_i
#LIBS += -LE:/curl7.80/lib/x64/ -llibcurl
#INCLUDEPATH += E:/curl7.80/include
#DEPENDPATH += E:/curl7.80/include
#INCLUDEPATH += E:/PROJ/include
#DEPENDPATH += E:/PROJ/include
win32: LIBS += -L$$PWD/curl_7.80/lib/x64/ -llibcurl
INCLUDEPATH += $$PWD/curl_7.80/include
DEPENDPATH += $$PWD/curl_7.80/include
win32: LIBS += -L$$PWD/proj4_5.2.0/lib/ -lproj
INCLUDEPATH += $$PWD/proj4_5.2.0/include
DEPENDPATH += $$PWD/proj4_5.2.0/include
win32: LIBS += -L$$PWD/proj4_5.2.0/lib/ -lproj_i
INCLUDEPATH += $$PWD/proj4_5.2.0/include
DEPENDPATH += $$PWD/proj4_5.2.0/include

View File

@ -0,0 +1,244 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 2.7.2, 2022-01-15T21:57:03. -->
<qtcreator>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QByteArray" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QString" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QByteArray" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QString" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">0</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap"/>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.1.0 MSVC2010 32bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.1.0 MSVC2010 32bit</value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">qt.510.win32_msvc2010.essentials_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">C:/Users/Administrator/Desktop/%{JS: Util.asciify(&quot;build-LAMPMainWidget-Desktop_Qt_5_1_0_MSVC2010_32bit-Debug&quot;)}</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">清理</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">C:/Users/Administrator/Desktop/%{JS: Util.asciify(&quot;build-LAMPMainWidget-Desktop_Qt_5_1_0_MSVC2010_32bit-Release&quot;)}</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">部署</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">在本地部署</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Project.UseGlobal">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">LAMPMainWidget</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/Users/Administrator/Desktop/LAMPMainWidget-master/LAMPMainWidget.pro</value>
<value type="int" key="Qt4ProjectManager.Qt4RunConfiguration.BaseEnvironmentBase">2</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">LAMPMainWidget.pro</value>
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">false</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.Qt4RunConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
<value type="QString">{eb13e5e2-0535-44b1-b74d-6dffbc511dad}</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">12</value>
</data>
</qtcreator>

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -0,0 +1,299 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{D50E4F7D-D021-36B9-A36A-7E4442AE70A5}</ProjectGuid>
<RootNamespace>LAMPMainWidget</RootNamespace>
<Keyword>QtVS_v304</Keyword>
<WindowsTargetPlatformVersion>10.0.22621.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformMinVersion>10.0.22621.0</WindowsTargetPlatformMinVersion>
<QtMsBuild Condition="'$(QtMsBuild)'=='' OR !Exists('$(QtMsBuild)\qt.targets')">$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<PlatformToolset>v143</PlatformToolset>
<OutputDirectory>release\</OutputDirectory>
<ATLMinimizesCRunTimeLibraryUsage>false</ATLMinimizesCRunTimeLibraryUsage>
<CharacterSet>NotSet</CharacterSet>
<ConfigurationType>Application</ConfigurationType>
<IntermediateDirectory>release\</IntermediateDirectory>
<PrimaryOutput>LAMPMainWidget</PrimaryOutput>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<PlatformToolset>v141</PlatformToolset>
<OutputDirectory>debug\</OutputDirectory>
<ATLMinimizesCRunTimeLibraryUsage>false</ATLMinimizesCRunTimeLibraryUsage>
<CharacterSet>NotSet</CharacterSet>
<ConfigurationType>Application</ConfigurationType>
<IntermediateDirectory>debug\</IntermediateDirectory>
<PrimaryOutput>LAMPMainWidget</PrimaryOutput>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<Import Project="$(QtMsBuild)\qt_defaults.props" Condition="Exists('$(QtMsBuild)\qt_defaults.props')" />
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<QtInstall>tools_qt5</QtInstall>
<QtModules>core;sql;gui;widgets</QtModules>
</PropertyGroup>
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<QtInstall>tools_qt5</QtInstall>
<QtModules>core;sql;gui;widgets</QtModules>
</PropertyGroup>
<Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') OR !Exists('$(QtMsBuild)\Qt.props')">
<Message Importance="High" Text="QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly." />
</Target>
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
<Import Project="$(QtMsBuild)\Qt.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
<Import Project="$(QtMsBuild)\Qt.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">release\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">release\</IntDir>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">LAMPMainWidget</TargetName>
<IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</IgnoreImportLibrary>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">debug\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">debug\</IntDir>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">LAMPMainWidget</TargetName>
<IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</IgnoreImportLibrary>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<AdditionalIncludeDirectories>GeneratedFiles\$(ConfigurationName);GeneratedFiles;.;curl_7.80\include;proj4_5.2.0\include;C:\vcpkg\installed\x64-windows\include\qt5;C:\vcpkg\installed\x64-windows\include\qt5\QtWidgets;C:\vcpkg\installed\x64-windows\include\qt5\QtGui;C:\vcpkg\installed\x64-windows\include\qt5\QtSql;C:\vcpkg\installed\x64-windows\include\qt5\QtCore;release;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 %(AdditionalOptions)</AdditionalOptions>
<AssemblerListingLocation>release\</AssemblerListingLocation>
<BrowseInformation>false</BrowseInformation>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<DisableSpecificWarnings>4577;4467;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<ExceptionHandling>Sync</ExceptionHandling>
<ObjectFileName>release\</ObjectFileName>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;NDEBUG;QT_NO_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessToFile>false</PreprocessToFile>
<ProgramDataBaseFileName>
</ProgramDataBaseFileName>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<SuppressStartupBanner>true</SuppressStartupBanner>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<UseFullPaths>false</UseFullPaths>
<WarningLevel>Level3</WarningLevel>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>.\curl_7.80\lib\x64;.\proj4_5.2.0\lib;C:\vcpkg\installed\x64-windows\lib;C:\vcpkg\installed\x64-windows\lib\manual-link;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions)</AdditionalOptions>
<DataExecutionPrevention>true</DataExecutionPrevention>
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
<IgnoreImportLibrary>true</IgnoreImportLibrary>
<LinkIncremental>false</LinkIncremental>
<OptimizeReferences>true</OptimizeReferences>
<OutputFile>$(OutDir)\LAMPMainWidget.exe</OutputFile>
<RandomizedBaseAddress>true</RandomizedBaseAddress>
<SubSystem>Console</SubSystem>
<SuppressStartupBanner>true</SuppressStartupBanner>
</Link>
<Midl>
<DefaultCharType>Unsigned</DefaultCharType>
<EnableErrorChecks>None</EnableErrorChecks>
<WarningLevel>0</WarningLevel>
</Midl>
<ResourceCompile>
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;NDEBUG;QT_NO_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<QtMoc>
<CompilerFlavor>msvc</CompilerFlavor>
<Include>./$(Configuration)/moc_predefs.h</Include>
<ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription>
<DynamicSource>output</DynamicSource>
<QtMocDir>$(Configuration)</QtMocDir>
<QtMocFileName>moc_%(Filename).cpp</QtMocFileName>
</QtMoc>
<QtRcc>
<Compression>default</Compression>
<InitFuncName>res</InitFuncName>
<ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription>
<QtRccDir>$(Configuration)</QtRccDir>
<QtRccFileName>qrc_%(Filename).cpp</QtRccFileName>
</QtRcc>
<QtUic>
<ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription>
<QtUicDir>$(ProjectDir)</QtUicDir>
<QtUicFileName>ui_%(Filename).h</QtUicFileName>
</QtUic>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<AdditionalIncludeDirectories>GeneratedFiles\$(ConfigurationName);GeneratedFiles;.;curl_7.80\include;proj4_5.2.0\include;C:\vcpkg\installed\x64-windows\include\qt5;C:\vcpkg\installed\x64-windows\include\qt5\QtWidgets;C:\vcpkg\installed\x64-windows\include\qt5\QtGui;C:\vcpkg\installed\x64-windows\include\qt5\QtSql;C:\vcpkg\installed\x64-windows\include\qt5\QtCore;debug;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 %(AdditionalOptions)</AdditionalOptions>
<AssemblerListingLocation>debug\</AssemblerListingLocation>
<BrowseInformation>false</BrowseInformation>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<DisableSpecificWarnings>4577;4467;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<ExceptionHandling>Sync</ExceptionHandling>
<ObjectFileName>debug\</ObjectFileName>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessToFile>false</PreprocessToFile>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<SuppressStartupBanner>true</SuppressStartupBanner>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<UseFullPaths>false</UseFullPaths>
<WarningLevel>Level3</WarningLevel>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>.\curl_7.80\lib\x64\libcurl.lib;.\proj4_5.2.0\lib\proj.lib;.\proj4_5.2.0\lib\proj_i.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>.\curl_7.80\lib\x64;.\proj4_5.2.0\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>/DEBUG "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions)</AdditionalOptions>
<DataExecutionPrevention>true</DataExecutionPrevention>
<GenerateDebugInformation>false</GenerateDebugInformation>
<IgnoreImportLibrary>true</IgnoreImportLibrary>
<OutputFile>$(OutDir)\LAMPMainWidget.exe</OutputFile>
<RandomizedBaseAddress>true</RandomizedBaseAddress>
<SubSystem>Windows</SubSystem>
<SuppressStartupBanner>true</SuppressStartupBanner>
</Link>
<Midl>
<DefaultCharType>Unsigned</DefaultCharType>
<EnableErrorChecks>None</EnableErrorChecks>
<WarningLevel>0</WarningLevel>
</Midl>
<ResourceCompile>
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<QtRcc>
<Compression>default</Compression>
<InitFuncName>res</InitFuncName>
<ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription>
<QtRccDir>$(Configuration)</QtRccDir>
<QtRccFileName>qrc_%(Filename).cpp</QtRccFileName>
</QtRcc>
<QtMoc>
<CompilerFlavor>msvc</CompilerFlavor>
<Include>./$(Configuration)/moc_predefs.h</Include>
<ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription>
<DynamicSource>output</DynamicSource>
<QtMocDir>$(Configuration)</QtMocDir>
<QtMocFileName>moc_%(Filename).cpp</QtMocFileName>
</QtMoc>
<QtUic>
<ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription>
<QtUicDir>$(ProjectDir)</QtUicDir>
<QtUicFileName>ui_%(Filename).h</QtUicFileName>
</QtUic>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="crs.cpp" />
<ClCompile Include="egmain.cpp" />
<ClCompile Include="provider\tms\gaodenormalprovider.cpp" />
<ClCompile Include="utils\imgwriter.cpp" />
<ClCompile Include="gui\mainwindow.cpp" />
<ClCompile Include="maparea.cpp" />
<ClCompile Include="mapautoplane.cpp" />
<ClCompile Include="mapcanvas.cpp" />
<ClCompile Include="mapcanvasmap.cpp" />
<ClCompile Include="maplayer.cpp" />
<ClCompile Include="mapline.cpp" />
<ClCompile Include="maptool.cpp" />
<ClCompile Include="tools\maptooladdplane.cpp" />
<ClCompile Include="tools\maptooldrawarea.cpp" />
<ClCompile Include="tools\maptooldrawline.cpp" />
<ClCompile Include="tools\maptoolpan.cpp" />
<ClCompile Include="tools\maptoolselect.cpp" />
<ClCompile Include="tools\maptoolzoomin.cpp" />
<ClCompile Include="tools\maptoolzoomout.cpp" />
<ClCompile Include="utils\network.cpp" />
<ClCompile Include="provider\tms\ostnormalprovider.cpp" />
<ClCompile Include="pointxy.cpp" />
<ClCompile Include="gui\sponsorwindow.cpp" />
<ClCompile Include="gui\taskwindow.cpp" />
<ClCompile Include="layer\tmslayer.cpp" />
<ClCompile Include="provider\tmsprovider.cpp" />
<ClCompile Include="provider\tms\tmsproviderfactory.cpp" />
<ClCompile Include="crs\webmercator.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="include\crs.h" />
<ClInclude Include="include\utils\LAMPMainWidget.h" />
<QtMoc Include="include\provider\tms\gaodenormalprovider.h" />
<ClInclude Include="include\provider\tms\gaodesatelliteprovider.h" />
<ClInclude Include="include\provider\tms\googlechinanormalprovider.h" />
<ClInclude Include="include\provider\tms\googlechinasatelliteprovider.h" />
<ClInclude Include="include\utils\imgwriter.h" />
<QtMoc Include="include\layerprovider.h" />
<QtMoc Include="include\gui\mainwindow.h" />
<ClInclude Include="maparea.h" />
<ClInclude Include="mapautoplane.h" />
<QtMoc Include="include\mapcanvas.h" />
<ClInclude Include="include\mapcanvasmap.h" />
<ClInclude Include="include\maplayer.h" />
<ClInclude Include="mapline.h" />
<ClInclude Include="include\maptool.h" />
<ClInclude Include="include\tools\maptooladdplane.h" />
<ClInclude Include="include\tools\maptooldrawarea.h" />
<ClInclude Include="include\tools\maptooldrawline.h" />
<ClInclude Include="include\tools\maptoolpan.h" />
<ClInclude Include="include\tools\maptoolselect.h" />
<ClInclude Include="include\tools\maptoolzoomin.h" />
<ClInclude Include="include\tools\maptoolzoomout.h" />
<ClInclude Include="include\utils\network.h" />
<QtMoc Include="include\provider\tms\ostnormalprovider.h" />
<ClInclude Include="include\pointxy.h" />
<QtMoc Include="include\gui\sponsorwindow.h" />
<QtMoc Include="include\gui\taskwindow.h" />
<ClInclude Include="include\layer\tmslayer.h" />
<QtMoc Include="include\provider\tmsprovider.h" />
<ClInclude Include="include\provider\tms\tmsproviderfactory.h" />
<ClInclude Include="include\crs\webmercator.h" />
</ItemGroup>
<ItemGroup>
<CustomBuild Include="debug\moc_predefs.h.cbt">
<FileType>Document</FileType>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\mkspecs\features\data\dummy.cpp;%(AdditionalInputs)</AdditionalInputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">cl -Bx"$(QTDIR)\bin\qmake.exe" -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -E $(QTDIR)\mkspecs\features\data\dummy.cpp 2&gt;NUL &gt;$(IntDir)\moc_predefs.h</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generate moc_predefs.h</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)\moc_predefs.h;%(Outputs)</Outputs>
</CustomBuild>
<CustomBuild Include="release\moc_predefs.h.cbt">
<FileType>Document</FileType>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\mkspecs\features\data\dummy.cpp;%(AdditionalInputs)</AdditionalInputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">cl -Bx"$(QTDIR)\bin\qmake.exe" -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -O2 -MD -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -E $(QTDIR)\mkspecs\features\data\dummy.cpp 2&gt;NUL &gt;$(IntDir)\moc_predefs.h</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generate moc_predefs.h</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)\moc_predefs.h;%(Outputs)</Outputs>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<QtUic Include="include\gui\mainwindow.ui" />
<QtUic Include="include\gui\sponsorwindow.ui" />
<QtUic Include="include\gui\taskwindow.ui" />
</ItemGroup>
<ItemGroup>
<None Include="resources\theme\mActionDownload.svg" />
<None Include="resources\theme\mActionPan.svg" />
<None Include="resources\theme\mActionRefresh.svg" />
<None Include="resources\theme\mActionSelect.svg" />
<None Include="resources\theme\mActionZoomIn.svg" />
<None Include="resources\theme\mActionZoomOut.svg" />
<None Include="resources\plane-black.png" />
<None Include="resources\plane-red.png" />
<QtRcc Include="resources\res.qrc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<Import Project="$(QtMsBuild)\qt.targets" Condition="Exists('$(QtMsBuild)\qt.targets')" />
<ImportGroup Label="ExtensionTargets" />
</Project>

View File

@ -0,0 +1,281 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Form Files">
<UniqueIdentifier>{99349809-55BA-4b9d-BF79-8FDBB0286EB3}</UniqueIdentifier>
<Extensions>ui</Extensions>
<ParseFiles>false</ParseFiles>
</Filter>
<Filter Include="Form Files">
<UniqueIdentifier>{99349809-55BA-4b9d-BF79-8FDBB0286EB3}</UniqueIdentifier>
<Extensions>ui</Extensions>
<ParseFiles>false</ParseFiles>
</Filter>
<Filter Include="Generated Files">
<UniqueIdentifier>{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}</UniqueIdentifier>
<Extensions>cpp;c;cxx;moc;h;def;odl;idl;res;</Extensions>
</Filter>
<Filter Include="Generated Files">
<UniqueIdentifier>{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}</UniqueIdentifier>
<Extensions>cpp;c;cxx;moc;h;def;odl;idl;res;</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier>
<Extensions>qrc;*</Extensions>
<ParseFiles>false</ParseFiles>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier>
<Extensions>qrc;*</Extensions>
<ParseFiles>false</ParseFiles>
</Filter>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="crs.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="egmain.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="provider\tms\gaodenormalprovider.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="utils\imgwriter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="gui\mainwindow.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="maparea.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="mapautoplane.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="mapcanvas.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="mapcanvasmap.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="maplayer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="mapline.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="maptool.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="tools\maptooladdplane.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="tools\maptooldrawarea.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="tools\maptooldrawline.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="tools\maptoolpan.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="tools\maptoolselect.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="tools\maptoolzoomin.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="tools\maptoolzoomout.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="utils\network.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="provider\tms\ostnormalprovider.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pointxy.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="gui\sponsorwindow.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="gui\taskwindow.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="layer\tmslayer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="provider\tmsprovider.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="provider\tms\tmsproviderfactory.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="crs\webmercator.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="include\crs.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\utils\LAMPMainWidget.h">
<Filter>Header Files</Filter>
</ClInclude>
<QtMoc Include="include\provider\tms\gaodenormalprovider.h">
<Filter>Header Files</Filter>
</QtMoc>
<ClInclude Include="include\provider\tms\gaodesatelliteprovider.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\provider\tms\googlechinanormalprovider.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\provider\tms\googlechinasatelliteprovider.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\utils\imgwriter.h">
<Filter>Header Files</Filter>
</ClInclude>
<QtMoc Include="include\layerprovider.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="include\gui\mainwindow.h">
<Filter>Header Files</Filter>
</QtMoc>
<ClInclude Include="maparea.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="mapautoplane.h">
<Filter>Header Files</Filter>
</ClInclude>
<QtMoc Include="include\mapcanvas.h">
<Filter>Header Files</Filter>
</QtMoc>
<ClInclude Include="include\mapcanvasmap.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\maplayer.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="mapline.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\maptool.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\tools\maptooladdplane.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\tools\maptooldrawarea.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\tools\maptooldrawline.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\tools\maptoolpan.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\tools\maptoolselect.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\tools\maptoolzoomin.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\tools\maptoolzoomout.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\utils\network.h">
<Filter>Header Files</Filter>
</ClInclude>
<QtMoc Include="include\provider\tms\ostnormalprovider.h">
<Filter>Header Files</Filter>
</QtMoc>
<ClInclude Include="include\pointxy.h">
<Filter>Header Files</Filter>
</ClInclude>
<QtMoc Include="include\gui\sponsorwindow.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="include\gui\taskwindow.h">
<Filter>Header Files</Filter>
</QtMoc>
<ClInclude Include="include\layer\tmslayer.h">
<Filter>Header Files</Filter>
</ClInclude>
<QtMoc Include="include\provider\tmsprovider.h">
<Filter>Header Files</Filter>
</QtMoc>
<ClInclude Include="include\provider\tms\tmsproviderfactory.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\crs\webmercator.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="debug\moc_predefs.h.cbt">
<Filter>Generated Files</Filter>
</CustomBuild>
<CustomBuild Include="release\moc_predefs.h.cbt">
<Filter>Generated Files</Filter>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<QtUic Include="include\gui\mainwindow.ui">
<Filter>Form Files</Filter>
</QtUic>
<QtUic Include="include\gui\sponsorwindow.ui">
<Filter>Form Files</Filter>
</QtUic>
<QtUic Include="include\gui\taskwindow.ui">
<Filter>Form Files</Filter>
</QtUic>
</ItemGroup>
<ItemGroup>
<None Include="resources\theme\mActionDownload.svg">
<Filter>Resource Files</Filter>
</None>
<None Include="resources\theme\mActionPan.svg">
<Filter>Resource Files</Filter>
</None>
<None Include="resources\theme\mActionRefresh.svg">
<Filter>Resource Files</Filter>
</None>
<None Include="resources\theme\mActionSelect.svg">
<Filter>Resource Files</Filter>
</None>
<None Include="resources\theme\mActionZoomIn.svg">
<Filter>Resource Files</Filter>
</None>
<None Include="resources\theme\mActionZoomOut.svg">
<Filter>Resource Files</Filter>
</None>
<None Include="resources\plane-black.png">
<Filter>Resource Files</Filter>
</None>
<None Include="resources\plane-red.png">
<Filter>Resource Files</Filter>
</None>
<QtRcc Include="resources\res.qrc">
<Filter>Resource Files</Filter>
</QtRcc>
</ItemGroup>
</Project>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

199
LAMPMainWidget/crs.cpp Normal file
View File

@ -0,0 +1,199 @@
//#include <QDebug>
//#include <proj_api.h>
//
//#include <include/crs.h>
//#pragma execution_character_set("utf-8")
//
//namespace LAMPMainWidget {
//
//PointXY
//CRS::forward(const PointXY &point) const {
// auto pjCtx = pj_ctx_alloc();
// auto pjLonlat = pj_init_plus_ctx(pjCtx, "+proj=longlat +datum=WGS84 +no_defs");
// if (!pjLonlat) {
// qWarning() << "初始化wgs84坐标系失败=>" << pj_strerrno(pj_ctx_get_errno(pjCtx));
// pj_ctx_free(pjCtx);
// return PointXY{};
// }
// auto pjDest = pj_init_plus_ctx(pjCtx, proj4Def().toStdString().c_str());
// if (!pjDest) {
// qWarning() << "初始化目标坐标系失败=>" << pj_strerrno(pj_ctx_get_errno(pjCtx));
// pj_free(pjLonlat);
// pj_ctx_free(pjCtx);
// return PointXY{};
// }
//
// double x{point.x() * DEG_TO_RAD}, y{point.y() * DEG_TO_RAD};
// auto err = pj_transform(pjLonlat, pjDest, 1, 1, &x, &y, nullptr);
// if (err) {
// qWarning() << "坐标转换失败=>" << point;
// pj_free(pjDest);
// pj_free(pjLonlat);
// pj_ctx_free(pjCtx);
// return PointXY{};
// }
//
// pj_free(pjDest);
// pj_free(pjLonlat);
// pj_ctx_free(pjCtx);
//
// return PointXY{x, y};
//}
//
//PointXY
//CRS::inverse(const PointXY &point) const {
// auto pjCtx = pj_ctx_alloc();
// auto pjLonlat = pj_init_plus_ctx(pjCtx, "+proj=longlat +datum=WGS84 +no_defs");
// if (!pjLonlat) {
// qWarning() << "初始化wgs84坐标系失败=>" << pj_strerrno(pj_ctx_get_errno(pjCtx));
// pj_ctx_free(pjCtx);
// return PointXY{};
// }
// auto pjDest = pj_init_plus_ctx(pjCtx, proj4Def().toStdString().c_str());
// if (!pjDest) {
// qWarning() << "初始化目标坐标系失败=>" << pj_strerrno(pj_ctx_get_errno(pjCtx));
// pj_free(pjLonlat);
// pj_ctx_free(pjCtx);
// return PointXY{};
// }
//
// double x{point.x()}, y{point.y()};
// auto err = pj_transform(pjDest, pjLonlat, 1, 1, &x, &y, nullptr);
// if (err) {
// qWarning() << "坐标转换失败=>" << point;
// pj_free(pjDest);
// pj_free(pjLonlat);
// pj_ctx_free(pjCtx);
// return PointXY{};
// }
//
// pj_free(pjDest);
// pj_free(pjLonlat);
// pj_ctx_free(pjCtx);
//
// return PointXY{x * RAD_TO_DEG, y * RAD_TO_DEG};
//}
//
//}
#include <QDebug>
#include <proj.h>
#include <include/crs.h>
#pragma execution_character_set("utf-8")
namespace LAMPMainWidget {
PointXY
CRS::forward(const PointXY& point) const {
const double DEG_TO_RAD = 0.017453292519943295;
PJ_CONTEXT* pjCtx = proj_context_create();
if (!pjCtx) {
qWarning() << u8"Create proj context failed";
return PointXY{};
}
// PJ* target_crs = proj_create(pjCtx, proj4Def().toStdString().c_str());
// if (!target_crs) {
// qWarning() << "Failed to create target CRS from PROJ string";
// return PointXY{};
// }
//
//
//const char* wkt = proj_as_wkt(pjCtx, target_crs, PJ_WKT2_2019, nullptr);
// if (wkt) {
// printf("CRS (WKT):\n%s\n", wkt);
// //return PointXY{};
// }
qWarning() << "create target_crs sucessfully";
PJ* pjLonlat = proj_create_crs_to_crs(pjCtx,
"EPSG:4326", // WGS84
proj4Def().toStdString().c_str(),
nullptr);
if (!pjLonlat) {
qWarning() << u8"convert unsucessfully from EPSG:4326 to target project coodination =>" << proj_errno_string(proj_context_errno(pjCtx));
//proj_destroy(target_crs);
proj_context_destroy(pjCtx);
return PointXY{};
}
PJ_COORD coordIn, coordOut;
coordIn.lpzt.lam = point.x() * DEG_TO_RAD;
coordIn.lpzt.phi = point.y() * DEG_TO_RAD;
coordOut = proj_trans(pjLonlat, PJ_FWD, coordIn);
if (proj_errno(pjLonlat)) {
qWarning() << u8"convert unsucessfully point from EPSG:4326 to point in EPSG:4326=>" << point;
proj_destroy(pjLonlat);
//proj_destroy(target_crs);
proj_context_destroy(pjCtx);
return PointXY{};
}
proj_destroy(pjLonlat);
//proj_destroy(target_crs);
proj_context_destroy(pjCtx);
return PointXY{ coordOut.xy.x, coordOut.xy.y };
}
PointXY
CRS::inverse(const PointXY& point) const {
const double RAD_TO_DEG = 57.29577951308232;
PJ_CONTEXT* pjCtx = proj_context_create();
if (!pjCtx) {
qWarning() << u8"create proj context ";
return PointXY{};
}
//PJ* target_crs = proj_create(pjCtx, proj4Def().toStdString().c_str());
//if (!target_crs) {
// qWarning() << "Failed to create target CRS from PROJ string";
// return PointXY{};
//}
//qWarning() << "create target_crs sucessfully";
//const char* wkt = proj_as_wkt(pjCtx, target_crs, PJ_WKT2_2019, nullptr);
//if (wkt) {
// printf("CRS (WKT):\n%s\n", wkt);
// return PointXY{};
//}
qWarning() << "create target_crs sucessfully";
PJ* pjLonlat = proj_create_crs_to_crs(pjCtx,
"EPSG:4326", // WGS84
proj4Def().toStdString().c_str(),
nullptr);
if (!pjLonlat) {
qWarning() << u8"=>" << proj_errno_string(proj_context_errno(pjCtx));
//proj_destroy(target_crs);
proj_context_destroy(pjCtx);
return PointXY{};
}
PJ_COORD coordIn, coordOut;
coordIn.xy.x = point.x();
coordIn.xy.y = point.y();
coordOut = proj_trans(pjLonlat, PJ_INV, coordIn);
if (proj_errno(pjLonlat)) {
qWarning() << u8"convert unsucessfully from point in target project coodination to point in EPSG:4326=>" << point;
proj_destroy(pjLonlat);
//proj_destroy(target_crs);
proj_context_destroy(pjCtx);
return PointXY{};
}
//proj_destroy(target_crs);
proj_destroy(pjLonlat);
proj_context_destroy(pjCtx);
return PointXY{ coordOut.lpzt.lam * RAD_TO_DEG, coordOut.lpzt.phi * RAD_TO_DEG };
}
}

View File

@ -0,0 +1,135 @@
#include <include/crs.h>
#include <include/crs/webmercator.h>
#pragma execution_character_set("utf-8")
namespace LAMPMainWidget
{
PointXY
WebMercator::forward(const LAMPMainWidget::PointXY& point) const
{
PointXY result{};
PointXY originXy = CRS::forward(point);
QSizeF sz = extent().size();
result.setX(sz.width() / 2 + originXy.x());
result.setY(sz.height() / 2 - originXy.y());
return result;
}
PointXY
WebMercator::inverse(const LAMPMainWidget::PointXY& point) const
{
PointXY originXy{};
QSizeF sz = extent().size();
originXy.setX(point.x() - sz.width() / 2);
originXy.setY(sz.height() / 2 - point.y());
return CRS::inverse(originXy);
}
QString
WebMercator::proj4Cvt() const
{
return QString{"+proj=webmerc +datum=WGS84"};
}
QString
WebMercator::wktDef() const
{
return QString{
R"(
PROJCS["WGS 84 / Pseudo-Mercator",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4326"]],
PROJECTION["Mercator_1SP"],
PARAMETER["central_meridian",0],
PARAMETER["scale_factor",1],
PARAMETER["false_easting",0],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
AXIS["X",EAST],
AXIS["Y",NORTH],
EXTENSION["PROJ4",
"+proj=merc
+a=6378137
+b=6378137
+lat_ts=0.0
+lon_0=0.0
+x_0=0.0
+y_0=0
+k=1.0
+units=m
+nadgrids=@null
+wktext
+no_defs"],
AUTHORITY["EPSG","3857"]
])"
};
}
QRectF
WebMercator::extent() const
{
return QRectF{0, 0, 40075016.686, 40075016.686};
}
QString
WebMercator::proj4Def() const
{
/* return QString{
R"(
+proj=merc
+a=6378137
+b=6378137
+lat_ts=0.0
+lon_0=0.0
+x_0=0.0
+y_0=0
+k=1.0
+units=m
+nadgrids=@null
+wktext
+no_defs)"
};
*/
return QString{
R"(
PROJCS["unnamed",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4326"]],
PROJECTION["Mercator_1SP"],
PARAMETER["central_meridian",0],
PARAMETER["scale_factor",1],
PARAMETER["false_easting",0],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
AXIS["Easting",EAST],
AXIS["Northing",NORTH]]
)"
};
}
}

File diff suppressed because it is too large Load Diff

21
LAMPMainWidget/egmain.cpp Normal file
View File

@ -0,0 +1,21 @@
#include <QDebug>
#include <QApplication>
#include <QVector>
#include <include/provider/tmsprovider.h>
#include <include/gui/mainwindow.h>
#pragma execution_character_set("utf-8")
using namespace LAMPMainWidget;
int
main(int argc, char **argv) {
qRegisterMetaType<TileInfo>("TileInfo");
qRegisterMetaType<QVector<int>>("QVector<int>");
QApplication app{argc, argv};
MainWindow window{};
window.show();
return QApplication::exec();
}

View File

@ -0,0 +1,303 @@
#include <QLabel>
#include <QDesktopServices>
#include <QMessageBox>
#include <QTableWidgetItem>
#include <include/gui/mainwindow.h>
#include <include/gui/sponsorwindow.h>
#include <include/gui/taskwindow.h>
#include <include/layer/tmslayer.h>
#pragma execution_character_set("utf-8")
namespace LAMPMainWidget {
QString
MainWindow::tutorialUrl() {
return QString{R"(https://gitee.com/qizr_admin/LAMPMainWidget)"};
}
QString
MainWindow::srcUrl() {
return QString{R"(https://gitee.com/qizr_admin/LAMPMainWidget)"};
}
QHash<QString, MapLayer *>MainWindow::mMaps{};
MainWindow::MainWindow(QWidget *parent)
: mUi(new Ui::MainWindow),
mMapConvas(new MapCanvas),
mScaleText(new QLineEdit),
mScaleLabel(new QLabel),
mCenterText(new QLineEdit),
mCenterLabel(new QLabel),
mZoomText(new QLineEdit),
mZoomLabel(new QLabel),
mMapActionGroup(new QActionGroup(dynamic_cast<QObject *>(this))),
mSetLeftTop(true),
mLayerList(),
mLeftTop(),
mRightBottom() {
mUi->setupUi(dynamic_cast<QMainWindow *>(this));
setupWindow();
setupTaskWindow();
setupLayers();
setupStatusBar();
setupActions();
mUi->panAction->trigger();
mUi->layerList->setCurrentItem(mLayerList.first());
}
MainWindow::~MainWindow() {
delete mUi;
delete mMapConvas;
delete mScaleText;
delete mScaleLabel;
delete mCenterText;
delete mCenterLabel;
}
void
MainWindow::setupTaskWindow() {
mUi->taskTable->setColumnCount(5);
mUi->taskTable->setHorizontalHeaderLabels(QStringList{
"名称", "范围", "zoom值", "数据源", "进度"
});
mUi->taskTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
}
void
MainWindow::setupActions() {
mMapActionGroup->addAction(mUi->panAction);
mMapActionGroup->addAction(mUi->zoomInAction);
mMapActionGroup->addAction(mUi->zoomOutAction);
mMapActionGroup->addAction(mUi->selectAction);
mUi->selectAction->setEnabled(false);
QObject::connect(mUi->panAction, &QAction::triggered, this, &MainWindow::panHandle);
QObject::connect(mUi->zoomInAction, &QAction::triggered, this, &MainWindow::zoomInHandle);
QObject::connect(mUi->zoomOutAction, &QAction::triggered, this, &MainWindow::zoomOutHandle);
QObject::connect(mUi->tutorialAction, &QAction::triggered, this, &MainWindow::tutorialHanle);
QObject::connect(mUi->srcAction, &QAction::triggered, this, &MainWindow::srcHandle);
QObject::connect(mUi->refreshAction, &QAction::triggered, this, &MainWindow::refreshHandle);
QObject::connect(mUi->sponsorAction, &QAction::triggered, this, &MainWindow::sponsorHandle);
QObject::connect(mUi->selectAction, &QAction::triggered, this, &MainWindow::selectHandle);
QObject::connect(mUi->downloadAction, &QAction::triggered, this, &MainWindow::createDownloadTask);
QObject::connect(mUi->drawlineAction, &QAction::triggered, this, &MainWindow::drawlineHandle);
}
void MainWindow::setupWindow() {
mUi->mapCanvasLayout->addWidget(mMapConvas);
setFixedSize(size());
setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint);
QObject::connect(mMapConvas, &MapCanvas::zoomChanged, this, &MainWindow::zoomChangedHandle);
QObject::connect(mMapConvas, &MapCanvas::clicked, this, &MainWindow::clickedHandle);
QObject::connect(mMapConvas, &MapCanvas::mapCenterChanged, this, &MainWindow::centerChangedHandle);
QObject::connect(mUi->layerList, &QListWidget::currentItemChanged, this, &MainWindow::layerChanged);
QObject::connect(mUi->leftTopBtn, &QPushButton::clicked, this, &MainWindow::leftTopClickedHandle);
QObject::connect(mUi->rightBottomBtn, &QPushButton::clicked, this, &MainWindow::rightBottomClickedHandle);
}
void MainWindow::setupStatusBar() {
/// 比例尺
mScaleLabel->setText("比例尺");
mScaleText->setText(QString("1cm : %1m").arg(mMapConvas->scale()));
mScaleText->setFixedWidth(150);
mScaleText->setReadOnly(true);
mUi->statusbar->addWidget(mScaleLabel);
mUi->statusbar->addWidget(mScaleText);
/// 空白间隔
mUi->statusbar->addWidget(spacerWiget(30));
/// zoom值
mZoomLabel->setText("Zoom值=>");
mZoomText->setText(QString("%1").arg(mMapConvas->zoomValue()));
mZoomText->setFixedWidth(80);
mZoomText->setReadOnly(true);
mUi->statusbar->addWidget(mZoomLabel);
mUi->statusbar->addWidget(mZoomText);
/// 空白间隔
mUi->statusbar->addWidget(spacerWiget(30));
/// 视图中心坐标
mCenterLabel->setText("视图中心坐标=>");
PointXY center = mMapConvas->mapCenter();
mCenterText->setText(QString("lon:%1, lat:%2").arg(center.x()).arg(center.y()));
mCenterText->setFixedWidth(300);
mCenterText->setReadOnly(true);
mUi->statusbar->addWidget(mCenterLabel);
mUi->statusbar->addWidget(mCenterText);
}
void MainWindow::setupLayers() {
initMaps();
auto i = mMaps.constBegin();
for (; i != mMaps.constEnd(); ++i) {
mLayerList.append(new QListWidgetItem(i.key(), mUi->layerList));
}
}
void
MainWindow::initMaps() {
if (mMaps.isEmpty()) {
mMaps = QHash<QString, MapLayer *>{
{"Openstreet地图", new TmsLayer(OSTNormalMap, "ostnormalmap", mMapConvas)},
{"高德地图", new TmsLayer(GaodeNormapMap, "gaodenormalmap", mMapConvas)}
};
}
}
QWidget *MainWindow::spacerWiget(int width) const {
auto spacer = new QWidget{};
spacer->setHidden(true);
spacer->setVisible(true);
spacer->setFixedWidth(width);
return spacer;
}
void
MainWindow::panHandle(bool checked) {
mMapConvas->selectTool(QString{"pan_tool"});
}
void
MainWindow::zoomInHandle(bool checked) {
mMapConvas->selectTool(QString{"zoomin_tool"});
}
void
MainWindow::zoomOutHandle(bool checked) {
mMapConvas->selectTool(QString{"zoomout_tool"});
}
void MainWindow::drawlineHandle(bool checked)
{
mMapConvas->selectTool("drawline_tool");
}
void
MainWindow::tutorialHanle(bool checked) {
if (!QDesktopServices::openUrl(tutorialUrl())) {
QMessageBox::critical(dynamic_cast<QWidget *>(this), "异常", "未能打开系统浏览器");
}
}
void
MainWindow::srcHandle(bool checked) {
if (!QDesktopServices::openUrl(srcUrl())) {
QMessageBox::critical(dynamic_cast<QWidget *>(this), "异常", "未能打开系统浏览器");
}
}
void
MainWindow::sponsorHandle(bool checked) {
auto *window = new SponsorWindow(dynamic_cast<QWidget *>(this));
window->exec();
window->deleteLater();
}
void
MainWindow::refreshHandle(bool checked) {
mMapConvas->refreshMap();
}
void
MainWindow::selectHandle(bool checked) {
mMapConvas->selectTool(QString{"select_tool"});
}
void
MainWindow::centerChangedHandle(LAMPMainWidget::PointXY pos) {
mCenterText->setText(QString("lon:%1, lat:%2").arg(pos.x()).arg(pos.y()));
}
void
MainWindow::zoomChangedHandle(int zoom) {
mZoomText->setText(QString("%1").arg(zoom));
mScaleText->setText(QString("1cm:%1m").arg(this->mMapConvas->scale()));
}
void
MainWindow::clickedHandle(LAMPMainWidget::PointXY pos) {
QString posText = QString("%1, %2").arg(pos.x()).arg(pos.y());
if (mSetLeftTop) {
mUi->leftTopText->setText(posText);
mLeftTop = pos;
} else {
mUi->rightBottomText->setText(posText);
mRightBottom = pos;
}
}
void
MainWindow::leftTopClickedHandle() {
mSetLeftTop = true;
mUi->selectAction->trigger();
}
void
MainWindow::rightBottomClickedHandle() {
mSetLeftTop = false;
mUi->selectAction->trigger();
}
void
MainWindow::layerChanged(QListWidgetItem *current, QListWidgetItem *previous) {
auto mapName = current->text();
if (!mMaps.contains(mapName)) {
qDebug() << mapName << "不支持";
return;
}
auto layer = mMaps.value(mapName);
auto i = mMaps.begin();
for (; i != mMaps.end(); ++i) {
if (i.key() == mapName) {
i.value()->setVisiblity(true);
qDebug() << i.key() << i.value()->isVisible();
continue;
}
i.value()->setVisiblity(false);
}
mMapConvas->addLayer(layer);
mMapConvas->setCurrentLayer(layer->id());
mMapConvas->refreshMap();
zoomChangedHandle(mMapConvas->zoomValue());
centerChangedHandle(mMapConvas->mapCenter());
}
void
MainWindow::createDownloadTask() {
auto taskWindow = new TaskWindow(dynamic_cast<QWidget *>(this));
taskWindow->exec();
taskWindow->deleteLater();
}
void
MainWindow::changeTaskTable(int row, int col, QString text) {
mUi->taskTable->takeItem(row, col);
mUi->taskTable->setItem(row, col, new QTableWidgetItem(text));
}
void MainWindow::on_drawArea_triggered()
{
mMapConvas->selectTool("drawarea_tool");
}
void MainWindow::on_addPlaneaction_triggered()
{
mMapConvas->selectTool("addplane_tool");
}
}

View File

@ -0,0 +1,66 @@
#include <QtGui/QPixmap>
#include <QtWidgets/QMessageBox>
#include <QtCore/QDebug>
#include <include/gui/sponsorwindow.h>
#pragma execution_character_set("utf-8")
SponsorWindow::SponsorWindow(QWidget *parent) :
QDialog(parent),
ui(new Ui::SponsorWindow) {
ui->setupUi(this);
UiSetup();
Initialize();
}
SponsorWindow::~SponsorWindow() {
delete ui;
}
/**
* @brief
*/
void SponsorWindow::UiSetup() {
setFixedSize(size());
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
ui->payLbl->setScaledContents(true);
}
/**
* @brief
*/
void SponsorWindow::Initialize() {
connect(ui->aliPayBtn, &QPushButton::clicked, this, &SponsorWindow::AliPayClickedHandle);
connect(ui->wxPayBtn, &QPushButton::clicked, this, &SponsorWindow::WxPayClickedHandle);
ui->wxPayBtn->click();
}
/**
* @brief
*/
void SponsorWindow::AliPayClickedHandle() {
QPixmap img{};
if (!img.load(":/alipay")) {
QMessageBox::critical(this, "错误", "支付码载入错误!");
deleteLater();
return;
}
img.scaled(ui->payLbl->size(), Qt::KeepAspectRatio);
ui->payLbl->setPixmap(img);
}
/**
* @brief
*/
void SponsorWindow::WxPayClickedHandle() {
QPixmap img{};
if (!img.load(":/wxpay")) {
QMessageBox::critical(this, "错误", "支付码载入错误!");
deleteLater();
return;
}
img.scaled(ui->payLbl->size(), Qt::KeepAspectRatio);
ui->payLbl->setPixmap(img);
}

View File

@ -0,0 +1,204 @@
#include <utility>
#include <QObject>
#include <QFileDialog>
#include <QMessageBox>
#include <QHash>
#include <QImage>
#include <QThreadPool>
#include <include/gui/taskwindow.h>
#include <include/layer/tmslayer.h>
#include <include/utils/network.h>
#include <include/utils/imgwriter.h>
#include <include/provider/tmsprovider.h>
#pragma execution_character_set("utf-8")
namespace LAMPMainWidget
{
void
DownloadTask::run()
{
auto currentLayer = dynamic_cast<const TmsLayer *>(mTaskInfo.layer);
auto provider = dynamic_cast<const TmsProvider*>(&currentLayer->provider());
auto tileSize = provider->tileSize();
QHash<QPoint, QString> tiles{};
QSize imgSize{};
if (!currentLayer->parseTiles(mTaskInfo.extent, mTaskInfo.zoom, tiles, imgSize)) {
qCritical() << "瓦片路径解析错误";
generateErrorRow();
return;
}
generateSuccessRow();
ImgWriter imgWriter{mTaskInfo.taskPath, imgSize};
QByteArray tileData{};
Network web{};
auto item = tiles.constBegin();
auto count = tiles.count();
int completed{0};
for (; item != tiles.constEnd(); ++item) {
tileData = web.httpsRequest(item.value());
if (tileData.isEmpty()) {
qCritical() << item.value() << "下载数据为空";
return;
}
++completed;
auto pos = QPoint(item.key().x() * tileSize.width(), item.key().y() * tileSize.height());
if (!imgWriter.write(pos, tileData)) {
qCritical() << "瓦片写出失败";
}
double progress = static_cast<double>(completed) / count;
auto progessStr = QString("%1").arg(progress * 100);
mTaskInfo.display->takeItem(mRowId, 4);
mTaskInfo.display->setItem(mRowId, 4,
new QTableWidgetItem(QString("%1").arg(progress * 100)));
// mTaskInfo.display->resizeColumnsToContents();
// mTaskInfo.display->horizontalHeader()->setStretchLastSection(true);
}
}
void
DownloadTask::generateCommonRow()
{
auto provider = dynamic_cast<const TmsProvider*>(&mTaskInfo.layer->provider());
mRowId = mTaskInfo.display->rowCount();
mTaskInfo.display->insertRow(mRowId);
mTaskInfo.display->setItem(mRowId, 0, new QTableWidgetItem(mTaskInfo.taskName));
mTaskInfo.display->setItem(mRowId, 1, new QTableWidgetItem(getExtentStr()));
mTaskInfo.display->setItem(mRowId, 2, new QTableWidgetItem(QString("%1").arg(mTaskInfo.zoom)));
mTaskInfo.display->setItem(mRowId, 3, new QTableWidgetItem(provider->id()));
}
void
DownloadTask::generateErrorRow()
{
generateCommonRow();
mTaskInfo.display->setItem(mRowId, 4, new QTableWidgetItem("任务新建失败"));
mTaskInfo.display->resizeColumnsToContents();
}
void
DownloadTask::generateSuccessRow()
{
generateCommonRow();
mTaskInfo.display->setItem(mRowId, 4, new QTableWidgetItem("0.0%"));
mTaskInfo.display->resizeColumnsToContents();
}
QString
DownloadTask::getExtentStr()
{
auto leftTop = mTaskInfo.extent.topLeft();
auto rightBottom = mTaskInfo.extent.bottomRight();
return QString("[%1, %2], [%3, %4]").arg(leftTop.x()).arg(leftTop.y())
.arg(rightBottom.x()).arg(rightBottom.y());
}
TaskWindow::TaskWindow(QWidget* parent)
: mUi(new Ui::TaskWindow),
mParent(dynamic_cast<MainWindow *>(parent)),
mSavePath(),
QDialog(parent)
{
mUi->setupUi(this);
setupWindow();
setupAction();
}
TaskWindow::~TaskWindow()
{
delete mUi;
}
void
TaskWindow::setupWindow()
{
setFixedSize(size());
auto currentLayer = dynamic_cast<const TmsLayer *>(mParent->mMapConvas->currentLayer());
auto minZoom = currentLayer->minZoom();
auto maxZoom = currentLayer->maxZoom();
for (auto i = minZoom; i <= maxZoom; ++i) {
mUi->zoomValueCbx->addItem(QString("%1").arg(i), i);
}
mUi->leftTopText->setText(
QString("%1, %2").arg(mParent->mLeftTop.x()).arg(mParent->mLeftTop.y()));
mUi->rightBottomText->setText(
QString("%1, %2").arg(mParent->mRightBottom.x()).arg(mParent->mRightBottom.y()));
}
void
TaskWindow::setupAction()
{
QObject::connect(mUi->exitBtn, &QPushButton::clicked, this, &TaskWindow::close);
QObject::connect(mUi->createBtn, &QPushButton::clicked, this, &TaskWindow::createTask);
QObject::connect(mUi->saveDirBtn, &QPushButton::clicked, this, &TaskWindow::setupSaveDir);
QObject::connect(mUi->taskNameText, &QLineEdit::textChanged, this, &TaskWindow::setupTaskName);
QObject::connect(mUi->zoomValueCbx, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &TaskWindow::setupZoomValue);
}
void
TaskWindow::createTask()
{
if (!taskInfoCheck()) {
return;
}
mSavePath.append("/").append(mTaskName).append(".tiff");
auto savePath = QDir::toNativeSeparators(mSavePath);
auto extent = QRectF(QPointF(mParent->mLeftTop.x(), mParent->mLeftTop.y()),
QPointF(mParent->mRightBottom.x(), mParent->mRightBottom.y()));
auto tileInfo = TaskInfo{mTaskName, savePath, extent,
mZoomValue, mParent->mMapConvas->currentLayer(),mParent->mUi->taskTable};
auto task = new DownloadTask(tileInfo);
QThreadPool::globalInstance()->start(task);
close();
}
void
TaskWindow::setupSaveDir()
{
auto saveDir = QFileDialog::getExistingDirectory(dynamic_cast<QWidget *>(this), "存储路径选择");
if (saveDir.isEmpty()) {
qWarning() << "未选择存储路径";
return;
}
mSavePath = saveDir;
mUi->saveDirText->setText(mSavePath);
}
void
TaskWindow::setupTaskName(const QString& text)
{
qDebug() << "任务名=>" << text;
mTaskName = text;
}
bool
TaskWindow::taskInfoCheck()
{
if (mTaskName.isEmpty()) {
QMessageBox::critical(dynamic_cast<QWidget *>(this), "错误", "任务名称为空");
return false;
}
if (mSavePath.isEmpty()) {
QMessageBox::critical(dynamic_cast<QWidget *>(this), "错误", "存储路径为空");
return false;
}
return true;
}
void
TaskWindow::setupZoomValue(int index)
{
auto zoom = mUi->zoomValueCbx->itemData(index).toInt();
qDebug() << "设置下载任务zoom值=>" << zoom;
mZoomValue = zoom;
}
}

View File

@ -0,0 +1,55 @@
#pragma once
#include <QRectF>
#include <QString>
#include <include/pointxy.h>
namespace LAMPMainWidget
{
class CRS
{
public:
CRS() = default;
virtual ~CRS() = default;
public:
/**
* wgs84
* @param point
* @return wgs84
*/
virtual PointXY forward(const PointXY& point) const;
/**
* wgs84
* @param point
* @return wgs84
*/
virtual PointXY inverse(const PointXY& point) const;
/**
* proj4
* @return
*/
virtual QString proj4Cvt() const = 0;
/**
* wkt
* @return wkt
*/
virtual QString wktDef() const = 0;
/**
* proj4
* @return proj4
*/
virtual QString proj4Def() const = 0;
/**
*
* @return
*/
virtual QRectF extent() const = 0;
};
}

View File

@ -0,0 +1,56 @@
#pragma once
#include <QtCore/QRectF>
#include <QtCore/QString>
#include <include/crs.h>
#include <include/pointxy.h>
namespace LAMPMainWidget
{
/**
* Webweb
* googleopenstreetmap
*/
class WebMercator : public CRS
{
public:
/**
* proj4
* @return
*/
QString proj4Cvt() const override;
/**
* wkt
* @return wkt
*/
QString wktDef() const override;
/**
* proj4
* @return proj4
*/
QString proj4Def() const override;
/**
*
* @return
*/
QRectF extent() const override;
/**
* wgs84
* @param point
* @return wgs84
*/
PointXY forward(const PointXY& point) const override;
/**
* wgs84
* @param point
* @return wgs84
*/
PointXY inverse(const PointXY& point) const override;
};
}

View File

@ -0,0 +1,95 @@
#pragma once
#include "ui_mainwindow.h"
#include <QMainWindow>
#include <QVector>
#include <QLabel>
#include <QLineEdit>
#include <QWidget>
#include <QActionGroup>
#include <QListWidgetItem>
#include <QHash>
#include <include/mapcanvas.h>
#include <include/maplayer.h>
namespace Ui {
class MainWindow;
}
namespace LAMPMainWidget {
class MainWindow : public QMainWindow {
Q_OBJECT
friend class TaskWindow;
friend class DownloadTask;
public slots:
void changeTaskTable(int row, int col, QString text);
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow() override;
protected:
void setupWindow();
void setupActions();
void setupStatusBar();
void setupLayers();
void setupTaskWindow();
void initMaps();
protected:
/// 各处处理函数
void panHandle(bool checked);
void zoomInHandle(bool checked);
void zoomOutHandle(bool checked);
void drawlineHandle(bool checked);
void tutorialHanle(bool checked);
void srcHandle(bool checked);
void sponsorHandle(bool checked);
void refreshHandle(bool checked);
void selectHandle(bool checked);
void zoomChangedHandle(int zoom);
void clickedHandle(PointXY pos);
void centerChangedHandle(PointXY pos);
void leftTopClickedHandle();
void rightBottomClickedHandle();
void createDownloadTask();
void layerChanged(QListWidgetItem *current, QListWidgetItem *previous);
private:
QWidget *spacerWiget(int width) const;
protected:
static QString tutorialUrl();
static QString srcUrl();
private slots:
void on_drawArea_triggered();
void on_addPlaneaction_triggered();
private:
Ui::MainWindow *mUi;
MapCanvas *mMapConvas;
QLineEdit *mScaleText;
QLabel *mScaleLabel;
QLineEdit *mCenterText;
QLabel *mCenterLabel;
QLineEdit *mZoomText;
QLabel *mZoomLabel;
QActionGroup *mMapActionGroup;
bool mSetLeftTop;
QVector<QListWidgetItem*> mLayerList;
PointXY mLeftTop;
PointXY mRightBottom;
private:
static QHash<QString, MapLayer*> mMaps;
};
}

View File

@ -0,0 +1,419 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1450</width>
<height>1000</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>地图下载器</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QWidget" name="gridLayoutWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1441</width>
<height>911</height>
</rect>
</property>
<layout class="QGridLayout" name="mainLayout">
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="mapTab">
<attribute name="title">
<string>地图</string>
</attribute>
<widget class="QWidget" name="gridLayoutWidget_2">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1241</width>
<height>881</height>
</rect>
</property>
<layout class="QGridLayout" name="mapCanvasLayout"/>
</widget>
<widget class="QWidget" name="gridLayoutWidget_3">
<property name="geometry">
<rect>
<x>1250</x>
<y>-1</y>
<width>191</width>
<height>881</height>
</rect>
</property>
<layout class="QGridLayout" name="infoLayout">
<item row="0" column="1">
<widget class="QGroupBox" name="layersListGbx">
<property name="title">
<string/>
</property>
<widget class="QGroupBox" name="layersGbx">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>171</width>
<height>611</height>
</rect>
</property>
<property name="title">
<string>图层列表</string>
</property>
<widget class="QWidget" name="gridLayoutWidget_4">
<property name="geometry">
<rect>
<x>9</x>
<y>30</y>
<width>151</width>
<height>571</height>
</rect>
</property>
<layout class="QGridLayout" name="layersLayout">
<item row="0" column="0">
<widget class="QListWidget" name="layerList"/>
</item>
</layout>
</widget>
</widget>
<widget class="QGroupBox" name="downloadGbx">
<property name="geometry">
<rect>
<x>10</x>
<y>650</y>
<width>171</width>
<height>221</height>
</rect>
</property>
<property name="title">
<string>下载区域</string>
</property>
<widget class="QLineEdit" name="leftTopText">
<property name="geometry">
<rect>
<x>10</x>
<y>40</y>
<width>151</width>
<height>31</height>
</rect>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QPushButton" name="leftTopBtn">
<property name="geometry">
<rect>
<x>10</x>
<y>80</y>
<width>151</width>
<height>25</height>
</rect>
</property>
<property name="toolTip">
<string>点击开始选择左上角点</string>
</property>
<property name="text">
<string>选择左上角</string>
</property>
</widget>
<widget class="QLineEdit" name="rightBottomText">
<property name="geometry">
<rect>
<x>12</x>
<y>140</y>
<width>151</width>
<height>31</height>
</rect>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QPushButton" name="rightBottomBtn">
<property name="geometry">
<rect>
<x>10</x>
<y>180</y>
<width>151</width>
<height>25</height>
</rect>
</property>
<property name="toolTip">
<string>点击开始选择右下角点</string>
</property>
<property name="text">
<string>选择右下角</string>
</property>
</widget>
</widget>
</widget>
</item>
</layout>
</widget>
</widget>
<widget class="QWidget" name="taskTab">
<attribute name="title">
<string>任务</string>
</attribute>
<widget class="QWidget" name="gridLayoutWidget_5">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1431</width>
<height>871</height>
</rect>
</property>
<layout class="QGridLayout" name="taskLayout">
<item row="0" column="0">
<widget class="QTableWidget" name="taskTable"/>
</item>
</layout>
</widget>
</widget>
</widget>
</item>
</layout>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1450</width>
<height>23</height>
</rect>
</property>
<widget class="QMenu" name="projectMenu">
<property name="title">
<string>项目</string>
</property>
</widget>
<widget class="QMenu" name="editMenu">
<property name="title">
<string>编辑</string>
</property>
</widget>
<widget class="QMenu" name="viewMenu">
<property name="title">
<string>视图</string>
</property>
</widget>
<widget class="QMenu" name="layersMenu">
<property name="title">
<string>图层</string>
</property>
</widget>
<widget class="QMenu" name="optionsMenu">
<property name="title">
<string>设置</string>
</property>
</widget>
<widget class="QMenu" name="toolsMenu">
<property name="title">
<string>工具</string>
</property>
</widget>
<widget class="QMenu" name="helpMenu">
<property name="title">
<string>帮助</string>
</property>
<addaction name="tutorialAction"/>
<addaction name="srcAction"/>
<addaction name="separator"/>
</widget>
<addaction name="projectMenu"/>
<addaction name="editMenu"/>
<addaction name="viewMenu"/>
<addaction name="layersMenu"/>
<addaction name="optionsMenu"/>
<addaction name="toolsMenu"/>
<addaction name="helpMenu"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<widget class="QToolBar" name="toolBar">
<property name="windowTitle">
<string>toolBar</string>
</property>
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
<addaction name="selectAction"/>
<addaction name="panAction"/>
<addaction name="zoomInAction"/>
<addaction name="zoomOutAction"/>
<addaction name="refreshAction"/>
<addaction name="drawArea"/>
<addaction name="drawlineAction"/>
<addaction name="separator"/>
<addaction name="addPlaneaction"/>
<addaction name="downloadAction"/>
<addaction name="separator"/>
</widget>
<action name="tutorialAction">
<property name="text">
<string>使用教程</string>
</property>
</action>
<action name="srcAction">
<property name="text">
<string>源码</string>
</property>
<property name="toolTip">
<string>源码</string>
</property>
</action>
<action name="sponsorAction">
<property name="text">
<string>捐赠</string>
</property>
</action>
<action name="panAction">
<property name="checkable">
<bool>true</bool>
</property>
<property name="icon">
<iconset theme="default" resource="../../resources/res.qrc">
<normaloff>:/themes/mActionPan</normaloff>:/themes/mActionPan</iconset>
</property>
<property name="text">
<string>拖动</string>
</property>
<property name="toolTip">
<string>拖动图层,查看不同地方</string>
</property>
</action>
<action name="zoomInAction">
<property name="checkable">
<bool>true</bool>
</property>
<property name="icon">
<iconset theme="default" resource="../../resources/res.qrc">
<normaloff>:/themes/mActionZoomIn</normaloff>:/themes/mActionZoomIn</iconset>
</property>
<property name="text">
<string>放大</string>
</property>
<property name="toolTip">
<string>增大zoom值</string>
</property>
</action>
<action name="zoomOutAction">
<property name="checkable">
<bool>true</bool>
</property>
<property name="icon">
<iconset theme="default" resource="../../resources/res.qrc">
<normaloff>:/themes/mActionZoomOut</normaloff>:/themes/mActionZoomOut</iconset>
</property>
<property name="text">
<string>缩小</string>
</property>
<property name="toolTip">
<string>减小zoom值</string>
</property>
</action>
<action name="refreshAction">
<property name="icon">
<iconset theme="default" resource="../../resources/res.qrc">
<normaloff>:/themes/mActionRefresh</normaloff>:/themes/mActionRefresh</iconset>
</property>
<property name="text">
<string>刷新地图</string>
</property>
<property name="toolTip">
<string>刷新地图显示内容</string>
</property>
</action>
<action name="downloadAction">
<property name="icon">
<iconset theme="default" resource="../../resources/res.qrc">
<normaloff>:/themes/mActionDownload</normaloff>:/themes/mActionDownload</iconset>
</property>
<property name="text">
<string>下载</string>
</property>
<property name="toolTip">
<string>创建下载任务</string>
</property>
</action>
<action name="selectAction">
<property name="checkable">
<bool>true</bool>
</property>
<property name="icon">
<iconset theme="default" resource="../../resources/res.qrc">
<normaloff>:/themes/mActionSelect</normaloff>:/themes/mActionSelect</iconset>
</property>
<property name="text">
<string>选择</string>
</property>
<property name="toolTip">
<string>选择地图中点</string>
</property>
</action>
<action name="drawlineAction">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="text">
<string>航线</string>
</property>
<property name="toolTip">
<string>绘制航线</string>
</property>
</action>
<action name="drawArea">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>区域</string>
</property>
</action>
<action name="addPlaneaction">
<property name="checkable">
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="../../resources/res.qrc">
<normaloff>:/plane-red.png</normaloff>:/plane-red.png</iconset>
</property>
<property name="text">
<string>飞机</string>
</property>
</action>
</widget>
<resources>
<include location="../../resources/res.qrc"/>
</resources>
<connections/>
</ui>

View File

@ -0,0 +1,26 @@
#pragma once
#include "ui_sponsorwindow.h"
#include <QtWidgets/QDialog>
namespace Ui {
class SponsorWindow;
}
class SponsorWindow : public QDialog {
Q_OBJECT
public:
explicit SponsorWindow(QWidget *parent = 0);
~SponsorWindow();
protected:
void UiSetup();
void Initialize();
void WxPayClickedHandle();
void AliPayClickedHandle();
private:
Ui::SponsorWindow *ui;
};

View File

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SponsorWindow</class>
<widget class="QDialog" name="SponsorWindow">
<property name="windowModality">
<enum>Qt::NonModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>283</width>
<height>338</height>
</rect>
</property>
<property name="contextMenuPolicy">
<enum>Qt::DefaultContextMenu</enum>
</property>
<property name="windowTitle">
<string>赞助作者</string>
</property>
<widget class="QLabel" name="payLbl">
<property name="geometry">
<rect>
<x>10</x>
<y>20</y>
<width>261</width>
<height>261</height>
</rect>
</property>
<property name="text">
<string>支付码</string>
</property>
</widget>
<widget class="QWidget" name="horizontalLayoutWidget">
<property name="geometry">
<rect>
<x>30</x>
<y>290</y>
<width>221</width>
<height>41</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="wxPayBtn">
<property name="text">
<string>微信支付</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="aliPayBtn">
<property name="text">
<string>支付宝支付</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,76 @@
#pragma once
#include "ui_taskwindow.h"
#include <QDialog>
#include <QWidget>
#include <QString>
#include <QRunnable>
#include <include/gui/mainwindow.h>
#include <include/layerprovider.h>
#include <include/pointxy.h>
namespace Ui{
class TaskWindow;
}
namespace LAMPMainWidget{
struct TaskInfo{
QString taskName;
QString taskPath;
QRectF extent;
int zoom;
const MapLayer *layer;
QTableWidget *display;
};
class DownloadTask : public QObject, public QRunnable {
Q_OBJECT
signals:
void progressChanged(int row, int column, QString text);
public:
explicit DownloadTask(TaskInfo task, QObject *parent = nullptr)
: mTaskInfo(std::move(task)), mRowId(), QObject(parent), QRunnable() {}
~DownloadTask() override = default;
public:
void run() override;
protected:
void generateCommonRow();
void generateErrorRow();
void generateSuccessRow();
QString getExtentStr();
protected:
TaskInfo mTaskInfo;
int mRowId;
};
class TaskWindow: public QDialog{
Q_OBJECT
public:
explicit TaskWindow(QWidget * parent= nullptr);
~TaskWindow() override;
protected:
void setupWindow();
void setupAction();
void createTask();
void setupSaveDir();
void setupTaskName(const QString &text);
bool taskInfoCheck();
void setupZoomValue(int index);
private:
Ui::TaskWindow *mUi;
MainWindow *mParent;
QString mSavePath;
QString mTaskName;
int mZoomValue;
};
}

View File

@ -0,0 +1,208 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TaskWindow</class>
<widget class="QDialog" name="TaskWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>400</height>
</rect>
</property>
<property name="windowTitle">
<string>创建任务</string>
</property>
<widget class="QGroupBox" name="groupBox">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>621</width>
<height>311</height>
</rect>
</property>
<property name="title">
<string>任务信息</string>
</property>
<widget class="QLineEdit" name="saveDirText">
<property name="geometry">
<rect>
<x>100</x>
<y>40</y>
<width>391</width>
<height>30</height>
</rect>
</property>
</widget>
<widget class="QPushButton" name="saveDirBtn">
<property name="geometry">
<rect>
<x>510</x>
<y>40</y>
<width>89</width>
<height>30</height>
</rect>
</property>
<property name="text">
<string>选择路径</string>
</property>
</widget>
<widget class="QGroupBox" name="groupBox_2">
<property name="geometry">
<rect>
<x>20</x>
<y>130</y>
<width>581</width>
<height>161</height>
</rect>
</property>
<property name="title">
<string>下载区域</string>
</property>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>20</x>
<y>40</y>
<width>67</width>
<height>30</height>
</rect>
</property>
<property name="text">
<string>左上角</string>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>320</x>
<y>40</y>
<width>67</width>
<height>30</height>
</rect>
</property>
<property name="text">
<string>右下角</string>
</property>
</widget>
<widget class="QLineEdit" name="leftTopText">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>100</x>
<y>40</y>
<width>141</width>
<height>30</height>
</rect>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="rightBottomText">
<property name="geometry">
<rect>
<x>400</x>
<y>40</y>
<width>141</width>
<height>30</height>
</rect>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel" name="label_5">
<property name="geometry">
<rect>
<x>20</x>
<y>100</y>
<width>67</width>
<height>30</height>
</rect>
</property>
<property name="text">
<string>Zoom值</string>
</property>
</widget>
<widget class="QComboBox" name="zoomValueCbx">
<property name="geometry">
<rect>
<x>100</x>
<y>100</y>
<width>441</width>
<height>30</height>
</rect>
</property>
</widget>
</widget>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>20</x>
<y>40</y>
<width>67</width>
<height>30</height>
</rect>
</property>
<property name="text">
<string>保存路径</string>
</property>
</widget>
<widget class="QLabel" name="label_4">
<property name="geometry">
<rect>
<x>20</x>
<y>90</y>
<width>67</width>
<height>30</height>
</rect>
</property>
<property name="text">
<string>任务名</string>
</property>
</widget>
<widget class="QLineEdit" name="taskNameText">
<property name="geometry">
<rect>
<x>100</x>
<y>90</y>
<width>391</width>
<height>30</height>
</rect>
</property>
</widget>
</widget>
<widget class="QPushButton" name="createBtn">
<property name="geometry">
<rect>
<x>420</x>
<y>350</y>
<width>89</width>
<height>30</height>
</rect>
</property>
<property name="text">
<string>创建</string>
</property>
</widget>
<widget class="QPushButton" name="exitBtn">
<property name="geometry">
<rect>
<x>540</x>
<y>350</y>
<width>89</width>
<height>30</height>
</rect>
</property>
<property name="text">
<string>取消</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,70 @@
#pragma once
#include <QString>
#include <QRectF>
#include <include/maplayer.h>
#include <include/mapcanvas.h>
#include <include/crs/webmercator.h>
#include <include/provider/tms/tmsproviderfactory.h>
namespace LAMPMainWidget
{
/**
* tms
*/
class TmsLayer : public MapLayer
{
public:
TmsLayer(TmsProviders provider,
const QString& id,
MapCanvas* mapCanvas,
CRS* crs = new WebMercator{});
public:
/**
* zoom
* @return
*/
double resolution() const override;
/**
*
* @return
*/
QRectF extent() const override;
/**
* zoom
* @param zoom zoom
*/
void setZoomValue(int zoom) override;
/**
* rectzoomurl
* tiles
* @param rect
* @param zoom zoom
* @param tiles
* @param size
* @return
*/
bool parseTiles(const QRectF& rect, int zoom, QHash<QPoint, QString>& tiles, QSize& size) const;
/**
* zoom
* @return zoom
*/
virtual int maxZoom() const { return kMaxZoom; }
/**
* zoom
* @return zoom
*/
virtual int minZoom() const { return kMinZoom; }
private:
static const int kMinZoom{4};
static const int kMaxZoom{18};
};
}

View File

@ -0,0 +1,36 @@
#pragma once
#include <QtGui/QImage>
#include <QtCore/QMap>
#include <QtCore/QPointF>
namespace LAMPMainWidget {
/**
* provider
*/
class LayerProvider : public QObject {
Q_OBJECT
public slots:
virtual void createTask(const QRectF &rect, int zoom) = 0;
public:
explicit LayerProvider(QObject *parent = nullptr)
: QObject(parent) {}
~LayerProvider() override = default;
public:
/**
*
* @return
*/
virtual const QImage preparedImage() const = 0;
/**
* 使
* @return truefasle
*/
virtual bool hasContent() const = 0;
};
}

View File

@ -0,0 +1,189 @@
#pragma once
#include <QWheelEvent>
#include <QPaintEvent>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QTimer>
#include <QEvent>
#include <QKeyEvent>
#include <QMouseEvent>
#include <QResizeEvent>
#include <QDragEnterEvent>
#include <QRectF>
#include <QMarginsF>
#include <QHash>
#include <include/crs.h>
#include <include/pointxy.h>
#include <include/mapcanvasmap.h>
#include <include/maptool.h>
namespace LAMPMainWidget {
class MapLayer;
class MapTool;
/**
* QGraphicsView
* Qt GraphicsView Framework
*/
class MapCanvas : public QGraphicsView {
Q_OBJECT
signals:
void zoomChanged(int zoom);
void crsChanged();
void clicked(PointXY pos);
void mapCenterChanged(PointXY pos);
friend class MapToolPan;
friend class MapToolZoomIn;
friend class MapToolZoomOut;
friend class MapToolSelect;
public:
explicit MapCanvas(QWidget *parent = nullptr);
~MapCanvas() override;
public:
/**
*
*/
void refreshMap();
/**
* 使
* @param layer
*/
void addLayer(MapLayer *layer);
/**
*
* @return
*/
double scale() const;
/**
*
* @return
*/
double resolution() const;
/**
* zoom
* @return zoom
*/
int zoomValue() const;
/**
* zoom
* @param zoom zoom
*/
void setZoomValue(int zoom);
/**
*
* @return
*/
const QRectF &viewExtent() const { return mViewExtent; }
/**
*
*
* @param crs
*/
void setCrs(const CRS *crs);
/**
*
* @return
*/
const CRS &crs() const { return *mCrs; }
/**
*
* @param id id
*/
void setCurrentLayer(const QString &id);
/**
*
* @return
*/
const MapLayer *currentLayer() { return mCurrentLayer; }
/**
*
* @return
*/
const PointXY &mapCenter() const { return mMapCenter; }
/**
*
* @param tool
* @return
*/
bool selectTool(const QString &tool);
void timerEvent(QTimerEvent *event);
protected:
/**
*
* resize
*/
void updateViewExtent(bool reset = false);
/**
*
* @param point
* @return
*/
PointXY pixel2Lonlat(const QPointF &point) const;
/**
*
*/
void setupTools();
private:
/**
* zoom
* @param zoom zoom
* @return 使zoom
*/
int normalizeZoom(int zoom) const;
protected:
void mousePressEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void wheelEvent(QWheelEvent *event) override;
void resizeEvent(QResizeEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
protected:
QGraphicsScene *mScene;
QRectF mMapExtent;
QRectF mViewExtent;
QRectF mDragRect;
bool mIsDragging;
QMap<QString, MapLayer *> mLayers;
MapLayer *mCurrentLayer;
const CRS *mCrs;
PointXY mMapCenter;
int mZoomValue;
PointXY mLastXY;
QTimer *mMapUpdateTimer;
MapTool *mCurrentTool;
QHash<QString, MapTool *> mMapTools;
private:
const static int kDefaultZoomValue{8};
static const int kMaxZoomValue{20};
static const int kMinZoomValue{1};
protected:
static PointXY defaultMapCenter();
};
}

View File

@ -0,0 +1,41 @@
#pragma once
#include <QGraphicsItem>
namespace LAMPMainWidget {
class MapLayer;
/**
*
*/
class MapCanvasMap : public QGraphicsItem {
public:
explicit MapCanvasMap(MapLayer *layer, QGraphicsItem *parent = nullptr)
: mLayer(layer), QGraphicsItem(parent) {}
~MapCanvasMap() override = default;
public:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
QRectF boundingRect() const override;
/**
*
* @param rect
*/
void setViewExtent(const QRectF &rect);
protected:
/**
*
*/
const MapLayer *mLayer;
/**
*
*/
QRectF mViewExtent;
};
}

View File

@ -0,0 +1,149 @@
#pragma once
#include <QtCore/QString>
#include <QtCore/QDebug>
#include <QtCore/QRectF>
#include <include/crs.h>
#include <include/layerprovider.h>
#include <include/mapcanvasmap.h>
namespace LAMPMainWidget {
class MapCanvas;
/*
*
*/
class MapLayer {
public:
MapLayer(const QString &id, CRS *crs, MapCanvas *mapCanvas);
MapLayer(const MapLayer &other);
MapLayer(MapLayer &&other) noexcept;
virtual ~MapLayer();
MapLayer &operator=(const MapLayer &other);
MapLayer &operator=(MapLayer &&other) noexcept;
public:
/*
* id
* @return id
*/
const QString &id() const { return mId; }
/*
* z
* @return z
*/
const int zValue() const { return mZValue; }
/*
*
* @return
*/
const CRS &crs() const { return *mCrs; }
/*
* map
* @return map
*/
const MapCanvas &mapCanvas() const { return *mMapCanvas; }
/*
*
* @return
*/
const LayerProvider &provider() const { return *mProvider; }
/*
* id
* @param id id
*/
void setId(const QString &id) { mId = id; }
/*
* z
* @param zValue z
*/
void setZValue(const int zValue) { mZValue = zValue; }
/*
*
* @param crs
*/
void setCrs(CRS *const crs) { mCrs = crs; }
/*
*
* @param provider
*/
void setProvider(LayerProvider *const provider) { mProvider = provider; }
/*
* pixel:m
* @return
*/
virtual double resolution() const = 0;
/*
*
* @return
*/
virtual QRectF extent() const = 0;
/*
* zoom
* @return zoom
*/
int zoomValue() const { return mZoomValue; }
/*
* zoom
* @param zoom zoom
*/
virtual void setZoomValue(int zoom) { mZoomValue = zoom; }
/*
*
* @param map
*/
void setMap(MapCanvasMap *map) { mMapCanvasMap = map; }
/*
*
* @return
*/
MapCanvasMap *map() const { return mMapCanvasMap; }
/*
*
* @return truefalse
*/
bool isVisible() const {return mIsVisible;}
/*
*
* @param visible truefalse
*/
void setVisiblity(bool visible) {mIsVisible = visible;}
/*
*
* @return true
*/
virtual void update();
protected:
QString mId;
CRS *mCrs;
int mZValue;
int mZoomValue;
LayerProvider *mProvider;
MapCanvasMap *mMapCanvasMap;
const MapCanvas *mMapCanvas;
bool mIsVisible{false};
private:
const static int kDefaultZoomValue{10};
};
}

View File

@ -0,0 +1,42 @@
#pragma once
#include <QtGui/QMouseEvent>
namespace LAMPMainWidget {
class MapCanvas;
/**
*
*/
class MapTool {
public:
MapTool(MapCanvas *mapCanvas) : mMapCanvas(mapCanvas) {}
virtual ~MapTool();
public:
/**
*
* @param event
*/
virtual void execute(QMouseEvent *event) = 0;
/**
* 使
*/
virtual void setup() = 0;
/**
* 使
*/
virtual void deSetup() = 0;
/**
*
* @return
*/
virtual QString id() = 0;
protected:
MapCanvas *mMapCanvas;
};
}

View File

@ -0,0 +1,99 @@
#pragma once
#include <QtCore/QtGlobal>
#include <QtCore/QPoint>
#include <QtCore/QPointF>
#include <QtCore/QDebug>
namespace LAMPMainWidget {
class PointXY {
public:
PointXY() = default;
PointXY(double x, double y) : mX(x), mY(y) {}
PointXY(const PointXY &other) = default;
PointXY(PointXY &&other) = default;
explicit PointXY(const QPointF &other) : mX(other.x()), mY(other.y()) {}
explicit PointXY(const QPoint &other) : mX(double(other.x())), mY(double(other.y())) {}
~PointXY() = default;
public:
/**
* x
* @param x x
*/
void setX(double const x) { mX = x; }
/**
* y
* @param y y
*/
void
setY(double const y) { mY = y; }
/**
* xy
* @param x x
* @param y y
*/
void set(double const x, double const y) {
mX = x;
mY = y;
}
/**
* x
* @return x
*/
double x() const { return mX; }
/**
* y
* @return y
*/
double y() const { return mY; }
/**
* (mX, mY)(x,y)
* @param x x
* @param y y
* @return
*/
double distance(double x, double y) const;
/**
* (mX, mY)p
* @param p
* @return
*/
double distance(const PointXY &p) const { return distance(p.mX, p.mY); }
/**
* xyscalar
* @param scalar
*/
void multiply(double scalar) {
mX *= scalar;
mY *= scalar;
}
/**
* WKT
* @return WKT
*/
QString toWKT() const;
public:
bool operator==(const PointXY &other);
bool operator!=(const PointXY &other) { return !(*this == other); }
PointXY &operator=(const PointXY &other);
PointXY &operator=(const QPointF &other);
PointXY &operator=(const QPoint &other);
private:
double mX;
double mY;
};
}
QDebug operator<<(QDebug debug, const LAMPMainWidget::PointXY &point);

View File

@ -0,0 +1,55 @@
#pragma once
#include <QtCore/QSize>
#include <QtCore/QString>
#include <include/pointxy.h>
#include <include/provider/tmsprovider.h>
#include <include/utils/LAMPMainWidget.h>
namespace LAMPMainWidget {
/**
*
*/
class GaodeNormalProvider : public TmsProvider {
Q_OBJECT
public:
explicit GaodeNormalProvider(QObject *parent = nullptr);
~GaodeNormalProvider() override = default;
public:
/**
*
* @return 256*256
*/
const QSize tileSize() const override {
return QSize{256, 256};
}
/**
*
* @return
*/
QString server() const { return QString("0%1").arg(randomInt(1, 4)); }
/**
* url
* @param pos
* @param zoom zoom
* @return url
*/
QString tileUrl(const PointXY &pos, int zoom) const override;
/**
* id
* @return id
*/
const QString &id() const override { return mId; }
private:
const QString mId{"gaodenormalmap"};
};
}

View File

@ -0,0 +1,8 @@
//
// Created by jackie on 18-7-30.
//
#ifndef LAMPMainWidget_GOOGLECHINANORMALPROVIDER_H
#define LAMPMainWidget_GOOGLECHINANORMALPROVIDER_H
#endif //LAMPMainWidget_GOOGLECHINANORMALPROVIDER_H

View File

@ -0,0 +1,8 @@
//
// Created by jackie on 18-7-30.
//
#ifndef LAMPMainWidget_GOOGLECHINASATELLITEPROVIDER_H
#define LAMPMainWidget_GOOGLECHINASATELLITEPROVIDER_H
#endif //LAMPMainWidget_GOOGLECHINASATELLITEPROVIDER_H

View File

@ -0,0 +1,54 @@
#pragma once
#include <QtCore/QSize>
#include <include/pointxy.h>
#include <include/provider/tmsprovider.h>
#include <include/utils/LAMPMainWidget.h>
namespace LAMPMainWidget {
/**
* OpenStreetMap
*/
class OSTNormalProvider : public TmsProvider {
Q_OBJECT
public:
explicit OSTNormalProvider(QObject *parent= nullptr);
~OSTNormalProvider() override = default;
public:
/**
*
* @return 256*256
*/
const QSize tileSize() const override {
return QSize{256, 256};
}
/**
* openstreetmap
* @return
*/
char server() const { return static_cast<char>('a' + randomInt(0, 3)); }
/**
* url
* @param pos
* @param zoom zoom
* @return url
*/
QString tileUrl(const PointXY &pos, int zoom) const override;
/**
* opensteetid
* @return opensteetid
*/
const QString& id() const override{return mId;}
private:
const QString mId{"ostnormalmap"};
};
}

View File

@ -0,0 +1,32 @@
#pragma once
#include <QHash>
#include <include/layerprovider.h>
namespace LAMPMainWidget {
/**
* Provider
*/
enum TmsProviders {
OSTNormalMap,
GaodeNormapMap
};
/**
* TMS
*/
class TmsProviderFactory {
public:
TmsProviderFactory() = delete;
~TmsProviderFactory() = default;
static LayerProvider *
create(TmsProviders provider);
protected:
static QHash<TmsProviders, LayerProvider *> mProviders;
};
}

View File

@ -0,0 +1,174 @@
#pragma once
#include <QtMath>
#include <QSize>
#include <QString>
#include <QRunnable>
#include <QByteArray>
#include <QPointF>
#include <QImage>
#include <QObject>
#include <QSqlDatabase>
#include <include/layerprovider.h>
#include <include/pointxy.h>
namespace LAMPMainWidget
{
/*
* 线
*/
struct TileInfo
{
QPointF index;
QPoint position;
int zoom;
QPoint coord;
QString url;
QByteArray data;
};
/*
*
*/
class TileDownloadTask : public QObject, public QRunnable
{
Q_OBJECT
signals:
void tileReady(TileInfo tile);
public:
explicit TileDownloadTask(TileInfo tile, QObject* parent = nullptr);
TileDownloadTask(const TileDownloadTask& other) = delete;
TileDownloadTask(TileDownloadTask&& other) = delete;
TileDownloadTask& operator=(const TileDownloadTask& other) = delete;
TileDownloadTask& operator=(TileDownloadTask&& other) = delete;
~TileDownloadTask() override = default;
public:
void run() override;
protected:
TileInfo mTile;
};
class TmsProvider : public LayerProvider
{
Q_OBJECT
public:
explicit TmsProvider(QObject* parent = nullptr);
~TmsProvider() override;
public:
/*
*
* @return 256*256
*/
virtual const QSize tileSize() const = 0;
/*
* url
* @param pos
* @param zoom zoom
* @return url
*/
virtual QString tileUrl(const PointXY& pos, int zoom) const = 0;
/*
*
* @return
*/
const QImage preparedImage() const override { return *mImage; }
/*
*
* @return truefalse
*/
bool hasContent() const override { return static_cast<bool>(mImage); }
/*
* tms
* @return
*/
virtual const QString& id() const = 0;
public slots:
/*
*
* @param rect
* @param zoom zoom
*/
void createTask(const QRectF& rect, int zoom) override;
/*
*
* @param tile
*/
void tileReady(TileInfo tile);
protected:
/*
*
* @param rect
*/
void newImage(const QRectF& rect);
/*
*
* @param pos
* @param zoom zoom
* @return
*/
virtual QByteArray getCache(const QPoint& pos, int zoom);
/*
*
* @param pos
* @param zoom zoom
* @return
*/
virtual bool addCache(const QPoint& pos, int zoom, QByteArray data);
/*
*
* @param pos
* @param zoom zoom
* @return truefalse
*/
virtual bool cacheContains(const QPoint& pos, int zoom);
/*
*
*/
virtual bool initCache();
protected:
/*
*
*/
QImage* mImage;
/*
*
*/
const QString mDbName{"LAMPMainWidget.sqlite"};
/*
*
*/
const QString mTableName{"tiles"};
/*
*
*/
QSqlDatabase mDbConn;
};
}
inline uint qHash(const QPoint& p)
{
return qHash(qPow(p.x(), p.y()));
}

View File

@ -0,0 +1,25 @@
#ifndef MAPTOOLADDPLANE_H
#define MAPTOOLADDPLANE_H
#include "include/maptool.h"
#include <QList>
namespace LAMPMainWidget{
class MapAutoplane;
class MapToolAddplane:public MapTool
{
public:
explicit MapToolAddplane(MapCanvas *mapCanvas):MapTool(mapCanvas){}
~MapToolAddplane() override = default;
void execute(QMouseEvent *event) override;
void setup() override;
void deSetup() override;
QString id() override;
inline QList<MapAutoplane*> getPlanes(){return planes;};
private:
void addPlane(MapAutoplane*plane);
void delePlane(MapAutoplane* plane);
private:
QList<MapAutoplane*> planes;
};
}
#endif // MAPTOOLADDPLANE_H

View File

@ -0,0 +1,23 @@
#ifndef MAPTOOLDRAWAREA_H
#define MAPTOOLDRAWAREA_H
#include <include/maptool.h>
namespace LAMPMainWidget{
class MapCanvas;
class Maparea;
class MapToolDrawarea:public MapTool
{
public:
explicit MapToolDrawarea(MapCanvas *mapCanvas):MapTool(mapCanvas),isDrawing(false),current_area(nullptr){}
~MapToolDrawarea() override = default;
public:
void execute(QMouseEvent *event) override;
void setup() override;
void deSetup() override;
QString id() override;
private:
bool isDrawing;
Maparea * current_area;
};
}
#endif // MAPTOOLDRAWAREA_H

View File

@ -0,0 +1,31 @@
#ifndef MAPTOOLDRAWLINE_H
#define MAPTOOLDRAWLINE_H
#include <include/maptool.h>
namespace LAMPMainWidget {
class Mapline;
class MapCanvas;
/**
* @brief 线
*/
class MapToolDrawline: public MapTool
{
public:
explicit MapToolDrawline(MapCanvas *mapCanvas):MapTool(mapCanvas),isDrawing(false),current_line(nullptr){}
~MapToolDrawline() override = default;
public:
void execute(QMouseEvent *event) override;
void setup() override;
void deSetup() override;
QString id() override;
private:
bool isDrawing;
Mapline* current_line;
};
}
#endif // MAPTOOLDRAWLINE_H

View File

@ -0,0 +1,31 @@
#pragma once
#include <QtCore/QRect>
#include <QtGui/QMouseEvent>
#include <QtCore/QString>
#include <include/mapcanvas.h>
#include <include/maptool.h>
namespace LAMPMainWidget {
/**
*
*/
class MapToolPan : public MapTool {
public:
explicit MapToolPan(MapCanvas *mapCanvas):MapTool(mapCanvas){}
~MapToolPan() override = default;
public:
void execute(QMouseEvent *event) override;
void setup() override;
void deSetup() override;
QString id() override;
private:
QPoint mDragStartPos;
QPoint mDragEndPos;
};
}

View File

@ -0,0 +1,32 @@
#pragma once
#include <QtCore/QRect>
#include <QtGui/QMouseEvent>
#include <QtCore/QString>
#include <include/mapcanvas.h>
#include <include/maptool.h>
namespace LAMPMainWidget {
/**
*
*/
class MapToolSelect : public MapTool {
public:
explicit MapToolSelect(MapCanvas *mapCanvas):MapTool(mapCanvas){}
~MapToolSelect() override = default;
public:
void execute(QMouseEvent *event) override;
void setup() override;
void deSetup() override;
QString id() override;
private:
QPoint mDragStartPos;
QPoint mDragEndPos;
};
}

View File

@ -0,0 +1,29 @@
#pragma once
#include <QtCore/QRect>
#include <QtGui/QMouseEvent>
#include <QtCore/QString>
#include <include/mapcanvas.h>
#include <include/maptool.h>
namespace LAMPMainWidget {
/**
*
*/
class MapToolZoomIn : public MapTool {
public:
MapToolZoomIn(MapCanvas *mapCanvas):MapTool(mapCanvas){}
virtual ~MapToolZoomIn() = default;
public:
void execute(QMouseEvent *event) override;
void setup() override;
void deSetup() override;
QString id() override;
};
}

View File

@ -0,0 +1,29 @@
#pragma once
#include <QtCore/QRect>
#include <QtGui/QMouseEvent>
#include <QtCore/QString>
#include <include/mapcanvas.h>
#include <include/maptool.h>
namespace LAMPMainWidget {
/**
*
*/
class MapToolZoomOut : public MapTool {
public:
MapToolZoomOut(MapCanvas *mapCanvas):MapTool(mapCanvas){}
virtual ~MapToolZoomOut() = default;
public:
void execute(QMouseEvent *event) override;
void setup() override;
void deSetup() override;
QString id() override;
};
}

View File

@ -0,0 +1,53 @@
#pragma once
#include <QtCore/QtGlobal>
#include <QtCore/QDebug>
#include <QtCore/QTime>
namespace LAMPMainWidget {
/*
*
*/
const double DoublePrecision{0.00000001};
/*
* d1d2
* @param d1
* @param d2
* @param precision
* @return truefalse
*/
inline bool
isDoubleNearby(double d1, double d2, double precision = DoublePrecision) {
return qAbs(d1 - d2) < precision;
}
/*
* minmax
* @param min
* @param max
* @return
*/
inline int
randomInt(int min, int max) {
if (max <= min) {
qDebug() << "随机数的最大值大于最小值";
return -1;
}
qsrand(static_cast<uint>(QTime{0, 0}.msecsTo(QTime::currentTime())));
return min + qrand() % (max - min);
}
/*
* 2
* @param n
* @return
*/
inline int
power2(int n) {
return 1u << static_cast<unsigned>(n);
}
}

View File

@ -0,0 +1,24 @@
#pragma once
#include <QString>
namespace LAMPMainWidget
{
class ImgWriter
{
public:
ImgWriter(QString file, const QSize& size);
ImgWriter(const ImgWriter& other) = delete;
ImgWriter(ImgWriter&& other) = delete;
ImgWriter operator =(const ImgWriter& other) = delete;
ImgWriter operator =(ImgWriter&& other) = delete;
virtual ~ImgWriter() = default;
public:
bool write(const QPoint& pos, const QByteArray& data) const;
protected:
QString mFile;
};
}

View File

@ -0,0 +1,45 @@
#pragma once
#include <QtCore/QString>
#include <QtCore/QByteArray>
#include <curl/curl.h>
namespace LAMPMainWidget {
/**
* httphttps使
* @param content
* @param size
* @param nmemb
* @param userp
* @return
*/
size_t
writeData(void *content, size_t size, size_t nmemb, void *userp);
class Network {
public:
Network() { curl_global_init(CURL_GLOBAL_DEFAULT); }
~Network() { curl_global_cleanup(); }
public:
/**
* httpGet
* @param url 访
* @return
*/
QByteArray
httpRequest(const QString &url);
/**
* httpsGet
* @param url
* @return
*/
QByteArray
httpsRequest(const QString &url);
private:
static const QString kUserAgent;
};
}

View File

@ -0,0 +1,97 @@
#include <QSize>
#include <QRectF>
#include <QObject>
#include <QHash>
#include <include/layer/tmslayer.h>
#include <include/provider/tmsprovider.h>
#include <include/utils/LAMPMainWidget.h>
#pragma execution_character_set("utf-8")
namespace LAMPMainWidget {
TmsLayer::TmsLayer(LAMPMainWidget::TmsProviders provider,
const QString &id,
LAMPMainWidget::MapCanvas *mapCanvas,
LAMPMainWidget::CRS *crs)
: MapLayer(id, crs, mapCanvas) {
setProvider(TmsProviderFactory::create(provider));
}
double
TmsLayer::resolution() const {
auto pd = dynamic_cast<const TmsProvider *>(&provider());
auto sz = pd->tileSize();
double length = crs().extent().width();
double result = length / ((power2(zoomValue())) * sz.width());
#ifdef DEBUG
qDebug() << "resolution=>" << result;
#endif
return result;
}
QRectF
TmsLayer::extent() const {
auto pd = dynamic_cast<const TmsProvider *>(&provider());
QSize sz = pd->tileSize();
int width = power2(zoomValue()) * sz.width();
int height = power2(zoomValue()) * sz.height();
//#ifdef DEBUG
// qDebug() << "layer extent=>{width:" << width << ", height:" << height << "}";
//#endif
return {0, 0, static_cast<qreal>(width), static_cast<qreal>(height)};
}
void
TmsLayer::setZoomValue(int zoom) {
int zoomValue{};
if (zoom <= minZoom()) {
zoomValue = minZoom();
} else if (zoom >= maxZoom()) {
zoomValue = maxZoom();
} else {
zoomValue = zoom;
}
mZoomValue = zoomValue;
}
bool
TmsLayer::parseTiles(const QRectF &rect, int zoom, QHash<QPoint, QString> &tiles, QSize &size) const {
auto pd = dynamic_cast<const TmsProvider *>(&provider());
auto tileSize = pd->tileSize();
auto resolution = mCrs->extent().width() / ((power2(zoom)) * tileSize.width());
auto crsLeftTop = mCrs->forward(PointXY(rect.topLeft()));
auto crsRightBottom = mCrs->forward(PointXY(rect.bottomRight()));
auto mapLeftTop = QPointF(crsLeftTop.x() / resolution, crsLeftTop.y() / resolution);
auto mapRightBottom = QPointF(crsRightBottom.x() / resolution, crsRightBottom.y() / resolution);
auto xMin = qFloor(mapLeftTop.x() / tileSize.width());
auto xMax = qFloor(mapRightBottom.x() / tileSize.width());
auto yMin = qFloor(mapLeftTop.y() / tileSize.height());
auto yMax = qFloor(mapRightBottom.y() / tileSize.height());
if((xMin > xMax) || (yMin > yMax)){
qDebug() << "下载区边界错误";
return false;
}
size.setWidth((xMax - xMin + 1) * tileSize.width());
size.setHeight((yMax - yMin + 1) * tileSize.height());
for (int i = xMin; i <= xMax; ++i) {
for (int j = yMin; j <= yMax; ++j) {
auto url = pd->tileUrl(PointXY(i, j), zoom);
tiles.insert(QPoint(i - xMin, j - yMin), url);
}
}
return true;
}
}

View File

@ -0,0 +1,39 @@
#include "maparea.h"
#include "include/maplayer.h"
#include <QPainter>
#include <QDateTime>
#pragma execution_character_set("utf-8")
void LAMPMainWidget::Maparea::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->setPen(this->pen());
painter->setBrush(this->brush());
double r=mLayer->resolution();
QPolygonF scene_points;
foreach(QPointF point,this->mkt_points){
scene_points.append(point/r);
}
painter->drawPolygon(scene_points);
}
QRectF LAMPMainWidget::Maparea::boundingRect() const
{
if(this->mkt_points.size()==0){
return QRectF();
}
double r=mLayer->resolution();
QRectF rect= this->mkt_points.boundingRect();
return QRectF(rect.x()/r,rect.y()/r,rect.width()/r,rect.height()/r);
}
void LAMPMainWidget::Maparea::append(QPointF mkt_point)
{
this->mkt_points.append(mkt_point);
}
QPointF &LAMPMainWidget::Maparea::lastMktpoint()
{
return this->mkt_points.last();
}

36
LAMPMainWidget/maparea.h Normal file
View File

@ -0,0 +1,36 @@
#ifndef MAPAREA_H
#define MAPAREA_H
#include <QAbstractGraphicsShapeItem>
#include <QPolygonF>
#include <QPen>
namespace LAMPMainWidget {
class MapLayer;
/**
* @brief
*/
class Maparea : public QAbstractGraphicsShapeItem
{
public:
explicit Maparea(const MapLayer *layer, QGraphicsItem *parent = nullptr)
: mLayer(layer), QAbstractGraphicsShapeItem(parent) {
QPen pen(Qt::red);
pen.setWidth(2);
this->setPen(pen);
QColor color(Qt::red);
color.setAlpha(50);
this->setBrush(color);
}
~Maparea() override = default;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
QRectF boundingRect() const override;
void append(QPointF mkt_point);
QPointF& lastMktpoint();
private:
const MapLayer *mLayer;
QPolygonF mkt_points;
};
}
#endif // MAPAREA_H

View File

@ -0,0 +1,35 @@
#include "mapautoplane.h"
#include "include/maplayer.h"
#include <QRandomGenerator>
#include <QDebug>
#pragma execution_character_set("utf-8")
LAMPMainWidget::MapAutoplane::MapAutoplane(const MapLayer *layer,QPointF pos,QGraphicsItem *parent):mLayer(layer), current_mktpoint(pos),QGraphicsPixmapItem(parent)
{
QPixmap pix(":/plane-red.png");
this->setPixmap(pix);
QPointF scene_point=this->current_mktpoint/this->mLayer->resolution();
this->setOffset(scene_point);
}
void LAMPMainWidget::MapAutoplane::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
QPointF scene_point=this->current_mktpoint/this->mLayer->resolution();
this->setOffset(scene_point);
QGraphicsPixmapItem::paint(painter,option,widget);
}
QRectF LAMPMainWidget::MapAutoplane::boundingRect() const
{
QPointF scene_point=this->current_mktpoint/this->mLayer->resolution();
return QRectF(scene_point.x(),scene_point.y(),16,16);
}
void LAMPMainWidget::MapAutoplane::updatePos()
{
qreal x=QRandomGenerator::global()->bounded(-1000, 1000);
qreal y=QRandomGenerator::global()->bounded(-1000, 1000);
this->current_mktpoint+=QPointF(x,y);
}

View File

@ -0,0 +1,24 @@
#ifndef MAPAUTOPLANE_H
#define MAPAUTOPLANE_H
#include <QGraphicsPixmapItem>
#include <QPointF>
namespace LAMPMainWidget{
class MapLayer;
class MapAutoplane : public QGraphicsPixmapItem
{
public:
explicit MapAutoplane(const MapLayer *layer,QPointF pos,QGraphicsItem *parent = nullptr);
~MapAutoplane() override = default;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
QRectF boundingRect() const override;
void append(QPointF mkt_point);
void updatePos();
private:
const MapLayer *mLayer;
QPointF current_mktpoint;
};
}
#endif // MAPAUTOPLANE_H

View File

@ -0,0 +1,301 @@
#include <QDebug>
#include <QTimer>
#include <include/maptool.h>
#include <include/maplayer.h>
#include <include/tools/maptoolpan.h>
#include <include/tools/maptoolselect.h>
#include <include/tools/maptoolzoomin.h>
#include <include/tools/maptoolzoomout.h>
#include <include/tools/maptooldrawline.h>
#include <include/tools/maptooldrawarea.h>
#include <include/tools/maptooladdplane.h>
#include "mapautoplane.h"
#pragma execution_character_set("utf-8")
namespace LAMPMainWidget {
PointXY
MapCanvas::defaultMapCenter() {
return PointXY{116.4074, 39.9042};
}
MapCanvas::MapCanvas(QWidget *parent)
: QGraphicsView(parent),
mScene(nullptr),
mMapExtent(),
mViewExtent(),
mDragRect(),
mIsDragging(false),
mLayers(),
mCurrentLayer(nullptr),
mCrs(nullptr),
mMapCenter(defaultMapCenter()),
mZoomValue(kDefaultZoomValue),
mLastXY(),
mMapUpdateTimer(nullptr),
mCurrentTool(nullptr),
mMapTools() {
setAutoFillBackground(true);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setMouseTracking(true);
setFocusPolicy(Qt::StrongFocus);
mScene = new QGraphicsScene();
setScene(mScene);
mMapUpdateTimer = new QTimer();
QObject::connect(mMapUpdateTimer, &QTimer::timeout, [this]() {
this->mScene->update();
});
mMapUpdateTimer->start(200);
setupTools();
this->startTimer(1000);
}
MapCanvas::~MapCanvas() {
mLayers.clear();
delete mScene;
delete mCurrentLayer;
delete mMapUpdateTimer;
}
void
MapCanvas::mousePressEvent(QMouseEvent *event) {
if (mCurrentTool) {
mCurrentTool->execute(event);
}
QGraphicsView::mousePressEvent(event);
}
void
MapCanvas::mouseReleaseEvent(QMouseEvent *event) {
if (mCurrentTool) {
mCurrentTool->execute(event);
}
QGraphicsView::mouseReleaseEvent(event);
}
void
MapCanvas::wheelEvent(QWheelEvent *event) {
int delta = event->delta() / 120;
int zoom = zoomValue();
zoom += delta;
setZoomValue(zoom);
}
void
MapCanvas::resizeEvent(QResizeEvent *event) {
updateViewExtent(true);
}
void MapCanvas::mouseMoveEvent(QMouseEvent *event)
{
if (mCurrentTool) {
mCurrentTool->execute(event);
}
QGraphicsView::mouseMoveEvent(event);
}
void
MapCanvas::refreshMap() {
QMapIterator<QString, MapLayer *> iterator(mLayers);
while (iterator.hasNext()) {
iterator.next();
iterator.value()->map()->setViewExtent(mViewExtent);
iterator.value()->update();
}
mScene->update();
}
void
MapCanvas::addLayer(MapLayer *const layer) {
if (!layer)
return;
if (mLayers.contains(layer->id())) {
qWarning() << layer->id() << "图层已存在";
return;
}
mLayers.insert(layer->id(), layer);
if (mLayers.count() == 1) {
setCurrentLayer(layer->id());
}
mScene->addItem(layer->map());
refreshMap();
}
void
MapCanvas::setZoomValue(const int zoom) {
mZoomValue = normalizeZoom(zoom);
zoomChanged(mZoomValue);
/// 更新每个图层的zoom值
QMapIterator<QString, MapLayer *> iterator(mLayers);
while (iterator.hasNext()) {
iterator.next();
iterator.value()->setZoomValue(mZoomValue);
}
/// 更新可视区域的内容
updateViewExtent(true);
}
void
MapCanvas::updateViewExtent(bool reset) {
if (!mCurrentLayer) {
qDebug() << "未设置当前图层,视图区域无法更新";
return;
}
if (reset) {
/// 重置视图区域
mScene->setSceneRect(mCurrentLayer->extent());
QRectF testrect=mCurrentLayer->extent();
mViewExtent.setRect(0, 0, 0, 0);
mViewExtent.setSize(size());
PointXY crsCenter = mCrs->forward(mMapCenter);
QPointF mapCenter{crsCenter.x() / resolution(), crsCenter.y() / resolution()};
QPointF offset = mapCenter - mViewExtent.center();
mViewExtent.translate(offset.x(), offset.y());
} else {
/// 视图偏移并重置偏移属性
mViewExtent.translate(-mDragRect.width(), -mDragRect.height());
mDragRect.setRect(0, 0, 0, 0);
/// 更新地图可视区域中心点
QPointF mapCenter = mViewExtent.center();
PointXY crsCenter{mapCenter.x() * resolution(), mapCenter.y() * resolution()};
mMapCenter = mCrs->inverse(crsCenter);
mapCenterChanged(mMapCenter);
}
/// 刷新地图
centerOn(mViewExtent.center());
refreshMap();
}
void
MapCanvas::setCrs(const CRS *const crs) {
mCrs = crs;
crsChanged();
updateViewExtent(true);
}
void
MapCanvas::setCurrentLayer(const QString &id) {
if (!mLayers.contains(id)) {
qWarning() << "未添加图层=>" << id;
return;
}
mCurrentLayer = mLayers[id];
if (!mCrs) {
setCrs(&mCurrentLayer->crs());
}
updateViewExtent(true);
}
double
MapCanvas::scale() const {
return logicalDpiX() * resolution() * 39.37 / 100;;
}
double
MapCanvas::resolution() const {
if (!mCurrentLayer) {
qWarning() << "未设置当前图层,无法获取分辨率";
return 0;
}
return mCurrentLayer->resolution();
}
int
MapCanvas::zoomValue() const {
if (!mCurrentLayer) {
qWarning() << "未设置当前图层默认返回zoom值为0";
return 0;
}
return mCurrentLayer->zoomValue();
}
int
MapCanvas::normalizeZoom(const int zoom) const {
int z{};
if (zoom <= kMinZoomValue) {
z = kMinZoomValue;
} else if (z >= kMaxZoomValue) {
z = kMaxZoomValue;
} else {
z = zoom;
}
return z;
}
PointXY
MapCanvas::pixel2Lonlat(const QPointF &point) const {
QPointF scenePoint = mapToScene(QPoint{static_cast<int>(point.x()), static_cast<int>(point.y())});
QPointF mapPoint{scenePoint.x() * resolution(), scenePoint.y() * resolution()};
PointXY crsPoint = mCrs->inverse(PointXY{mapPoint});
qDebug() << "坐标装换=>{" << point << "=>" << crsPoint << "}";
return crsPoint;
}
bool
MapCanvas::selectTool(const QString &tool) {
if (!mMapTools.contains(tool)) {
qWarning() << QString("%1工具不存在").arg(tool);
return false;
}
auto toolPtr = mMapTools.value(tool);
if (mCurrentTool) {
mCurrentTool->deSetup();
}
mCurrentTool = toolPtr;
toolPtr->setup();
return true;
}
void MapCanvas::timerEvent(QTimerEvent *event)
{
MapToolAddplane *maptoolAddplane=dynamic_cast<MapToolAddplane*>(mMapTools["addplane_tool"]);
QList<MapAutoplane*> planes=maptoolAddplane->getPlanes();
foreach(MapAutoplane *plane,planes){
plane->updatePos();
}
}
void
MapCanvas::setupTools() {
auto panTool = new MapToolPan(this);
mMapTools.insert(panTool->id(), panTool);
auto zoominTool = new MapToolZoomIn(this);
mMapTools.insert(zoominTool->id(), zoominTool);
auto zoomoutTool = new MapToolZoomOut(this);
mMapTools.insert(zoomoutTool->id(), zoomoutTool);
auto selectTool = new MapToolSelect(this);
mMapTools.insert(selectTool->id(), selectTool);
auto drawlineTool=new MapToolDrawline(this);
mMapTools.insert(drawlineTool->id(),drawlineTool);
auto drawareTool=new MapToolDrawarea(this);
mMapTools.insert(drawareTool->id(),drawareTool);
auto addplaneTool=new MapToolAddplane(this);
mMapTools.insert(addplaneTool->id(),addplaneTool);
}
}

View File

@ -0,0 +1,37 @@
#include <QtCore/QDebug>
#include <QtGui/QPainter>
#include <QtWidgets/QGraphicsSceneMouseEvent>
#include <include/mapcanvasmap.h>
#include <include/mapcanvas.h>
#include <include/maplayer.h>
#include <QDateTime>
#pragma execution_character_set("utf-8")
namespace LAMPMainWidget {
void
MapCanvasMap::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {
if (!mLayer->provider().hasContent()) {
return;
}
painter->drawImage(mViewExtent.topLeft(), mLayer->provider().preparedImage());
}
QRectF
MapCanvasMap::boundingRect() const {
auto width = mViewExtent.size().width();
auto height = mViewExtent.size().height();
return mViewExtent + QMarginsF(1024, 1024, 1024, 1024);
}
void MapCanvasMap::setViewExtent(const QRectF &rect) {
//qDebug() << "更新图层显示对象边界=>" << rect;
if (rect != mViewExtent) {
prepareGeometryChange();
mViewExtent = rect;
}
}
}

View File

@ -0,0 +1,90 @@
#include <QObject>
#include <include/maplayer.h>
#include <include/mapcanvas.h>
#include <QDateTime>
#pragma execution_character_set("utf-8")
namespace LAMPMainWidget {
MapLayer::MapLayer(
const QString &id,
LAMPMainWidget::CRS *crs,
LAMPMainWidget::MapCanvas *mapCanvas)
: mId(id),
mCrs(crs),
mZValue(-1),
mZoomValue(kDefaultZoomValue),
mProvider(nullptr),
mMapCanvasMap(new MapCanvasMap(this)),
mMapCanvas(mapCanvas) {
}
MapLayer::~MapLayer() {
delete mCrs;
delete mProvider;
}
MapLayer::MapLayer(const MapLayer &other) {
mId = other.mId;
mZValue = other.mZValue;
mCrs = other.mCrs;
mMapCanvas = other.mMapCanvas;
}
MapLayer::MapLayer(MapLayer &&other) noexcept {
mId = other.mId;
mZValue = other.mZValue;
mCrs = other.mCrs;
mMapCanvas = other.mMapCanvas;
other.mId = QString{};
other.mCrs = nullptr;
other.mZValue = 0;
other.mMapCanvas = nullptr;
}
MapLayer &
MapLayer::operator=(const MapLayer &other) {
if (this != &other) {
mId = other.mId;
mZValue = other.mZValue;
mCrs = other.mCrs;
mMapCanvas = other.mMapCanvas;
}
return *this;
}
MapLayer &
MapLayer::operator=(MapLayer &&other) noexcept {
if (this != &other) {
mId = other.mId;
mZValue = other.mZValue;
mCrs = other.mCrs;
mMapCanvas = other.mMapCanvas;
other.mId = QString{};
other.mCrs = nullptr;
other.mZValue = 0;
other.mMapCanvas = nullptr;
}
return *this;
}
void
MapLayer::update() {
if(!isVisible()){
qDebug() << id() << "=>图层不显示,跳过刷新操作";
mMapCanvasMap->hide();
return;
}
//qDebug() << "刷新图层内容=>" << mMapCanvas->viewExtent()<<QDateTime::currentDateTime()<<"zoom"<<mZoomValue;
mProvider->createTask(mMapCanvas->viewExtent(), mZoomValue);
mMapCanvasMap->show();
}
}

View File

@ -0,0 +1,35 @@
#include "mapline.h"
#include "include/maplayer.h"
#include <QPainter>
#include <QDebug>
#pragma execution_character_set("utf-8")
void LAMPMainWidget::Mapline::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->setPen(this->pen());
painter->setBrush(this->brush());
double r=mLayer->resolution();
for(int i=0;i<(mkt_points.size()-1);i++){
painter->drawLine(mkt_points[i]/r,mkt_points[i+1]/r);
}
}
QRectF LAMPMainWidget::Mapline::boundingRect() const
{
if(this->mkt_points.size()==0){
return QRectF();
}
double r=mLayer->resolution();
QRectF rect= this->mkt_points.boundingRect();
return QRectF(rect.x()/r,rect.y()/r,rect.width()/r,rect.height()/r);
}
void LAMPMainWidget::Mapline::append(QPointF mkt_point)
{
this->mkt_points.append(mkt_point);
}
QPointF &LAMPMainWidget::Mapline::lastMktpoint()
{
return this->mkt_points.last();
}

30
LAMPMainWidget/mapline.h Normal file
View File

@ -0,0 +1,30 @@
#ifndef MAPLINE_H
#define MAPLINE_H
#include <QAbstractGraphicsShapeItem>
#include <QPolygonF>
#include <QPen>
namespace LAMPMainWidget {
class MapLayer;
class Mapline:public QAbstractGraphicsShapeItem
{
public:
explicit Mapline(const MapLayer *layer, QGraphicsItem *parent = nullptr)
: mLayer(layer), QAbstractGraphicsShapeItem(parent) {
QPen pen(Qt::red);
pen.setWidth(2);
this->setPen(pen);
this->setBrush(QBrush(Qt::black));
}
~Mapline() override = default;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
QRectF boundingRect() const override;
void append(QPointF mkt_point);
QPointF& lastMktpoint();
private:
const MapLayer *mLayer;
QPolygonF mkt_points;
};
}
#endif // MAPLINE_H

View File

@ -0,0 +1,11 @@
#include <include/maptool.h>
#include <include/mapcanvas.h>
#pragma execution_character_set("utf-8")
namespace LAMPMainWidget {
MapTool::~MapTool() {
delete mMapCanvas;
}
}

View File

@ -0,0 +1,57 @@
#include <QtCore/QtMath>
#include <QtCore/QString>
#include <QtCore/QDebug>
#include <include/pointxy.h>
#include <include/utils/LAMPMainWidget.h>
#pragma execution_character_set("utf-8")
namespace LAMPMainWidget {
double
PointXY::distance(double x, double y) const {
return qSqrt(qPow(mX - x, 2) + qPow(mY - y, 2));
}
bool
PointXY::operator==(const LAMPMainWidget::PointXY &other) {
return isDoubleNearby(mX, other.mX) && isDoubleNearby(mY, other.mY);
}
PointXY &
PointXY::operator=(const LAMPMainWidget::PointXY &other) {
if (this != &other) {
mX = other.mX;
mY = other.mY;
}
return *this;
}
PointXY &
PointXY::operator=(const QPointF &other) {
mX = other.x();
mY = other.y();
return *this;
}
PointXY &
PointXY::operator=(const QPoint &other) {
mX = double(other.x());
mY = double(other.y());
return *this;
}
QString
PointXY::toWKT() const {
return QString("POINT(%1 %2)").arg(mX, 0, 'g', 8).arg(mY, 0, 'g', 8);
}
}
QDebug operator<<(QDebug debug, const LAMPMainWidget::PointXY &point) {
debug << QString("PointXY(%1, %2)").arg(point.x()).arg(point.y());
return debug;
}

BIN
LAMPMainWidget/proj.db Normal file

Binary file not shown.

View File

@ -0,0 +1,21 @@
#include <QtCore/QString>
#include <include/provider/tms/gaodenormalprovider.h>
#pragma execution_character_set("utf-8")
namespace LAMPMainWidget {
GaodeNormalProvider::GaodeNormalProvider(QObject *parent)
: TmsProvider(parent) {
initCache();
}
QString
GaodeNormalProvider::tileUrl(const LAMPMainWidget::PointXY &pos, int zoom) const {
QString urlFmt = {R"(http://wprd01.is.autonavi.com/appmaptile?style=6&x=%1&y=%2&z=%3)"};
return QString(urlFmt).arg(pos.x()).arg(pos.y()).arg(zoom);
}
//http://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=6
}

View File

@ -0,0 +1,19 @@
#include <QtCore/QString>
#include <include/provider/tms/ostnormalprovider.h>
#pragma execution_character_set("utf-8")
namespace LAMPMainWidget {
OSTNormalProvider::OSTNormalProvider(QObject *parent)
: TmsProvider(parent) {
initCache();
}
QString
OSTNormalProvider::tileUrl(const LAMPMainWidget::PointXY &pos, int zoom) const {
QString urlFmt = {"https://tile.openstreetmap.org/%1/%2/%3.png"};
return QString(urlFmt).arg(zoom).arg(pos.y()).arg(pos.x());
}
//https://tile.openstreetmap.org/{z}/{x}/{y}.png
}

View File

@ -0,0 +1,37 @@
#include <include/provider/tms/tmsproviderfactory.h>
#include <include/provider/tms/ostnormalprovider.h>
#include <include/provider/tms/gaodenormalprovider.h>
#pragma execution_character_set("utf-8")
namespace LAMPMainWidget {
QHash<TmsProviders, LayerProvider *> TmsProviderFactory::mProviders{};
LayerProvider *
TmsProviderFactory::create(LAMPMainWidget::TmsProviders provider) {
LayerProvider *result = nullptr;
switch (provider) {
case OSTNormalMap:
if (mProviders.contains(OSTNormalMap)) {
result = mProviders.value(OSTNormalMap);
} else {
result = new OSTNormalProvider();
mProviders.insert(OSTNormalMap, result);
}
break;
case GaodeNormapMap:
if (mProviders.contains(GaodeNormapMap)) {
result = mProviders.value(GaodeNormapMap);
} else {
result = new GaodeNormalProvider();
mProviders.insert(GaodeNormapMap, result);
}
break;
default:break;
}
return result;
}
}

View File

@ -0,0 +1,202 @@
#include <QImage>
#include <QPainter>
#include <QThreadPool>
#include <QDir>
#include <QSqlQuery>
#include <QSqlError>
#include <include/provider/tmsprovider.h>
#include <include/utils/network.h>
#pragma execution_character_set("utf-8")
namespace LAMPMainWidget
{
TileDownloadTask::TileDownloadTask(TileInfo tile, QObject* parent)
: QObject(parent),
mTile(std::move(tile))
{
}
void
TileDownloadTask::run()
{
Network web{};
QByteArray data = web.httpsRequest(mTile.url);
mTile.data = data;
tileReady(mTile);
}
TmsProvider::TmsProvider(QObject* parent)
: LayerProvider(parent),
mImage(nullptr)
{
if (!QFile::exists(mDbName)) {
QFile dbFile{mDbName};
dbFile.open(QIODevice::ReadWrite);
dbFile.close();
}
}
TmsProvider::~TmsProvider()
{
delete mImage;
}
bool
TmsProvider::initCache()
{
mDbConn = QSqlDatabase::addDatabase("QSQLITE", id());
mDbConn.setDatabaseName(mDbName);
if (!mDbConn.open()) {
qCritical() << "缓存数据库打开失败";
return false;
}
QSqlQuery sql{mDbConn};
if (!mDbConn.tables().contains(mTableName)) {
sql.prepare(QString("create table %1 ("
"id integer primary key autoincrement,"
"provider text not null,"
"zoom integer not null,"
"position text not null,"
"data blob not null"
")").arg(mTableName));
if (!sql.exec()) {
qCritical() << "缓存表创建失败" << sql.lastError().text();
return false;
}
}
mDbConn.close();
return true;
}
QByteArray
TmsProvider::getCache(const QPoint& pos, int zoom)
{
QByteArray res{};
mDbConn.open();
QSqlQuery select{mDbConn};
select.prepare(QString("select data from %1 "
"where provider = :provider "
"and zoom = :zoom "
"and position = :position "
"order by id desc limit 1"
).arg(mTableName));
select.bindValue(":provider", id());
select.bindValue(":zoom", zoom);
select.bindValue(":position", QString("%1:%2").arg(pos.x()).arg(pos.y()));
if (!select.exec()) {
qDebug() << pos << "查询失败=>" << select.lastError().text();
mDbConn.close();
return res;
}
if (!select.seek(0)) {
mDbConn.close();
return res;
}
res = select.value(0).toByteArray();
mDbConn.close();
return res;
}
bool
TmsProvider::addCache(const QPoint& pos, int zoom, QByteArray data)
{
if (data.isEmpty()) {
qWarning() << "瓦片数据为空";
return false;
}
mDbConn.open();
QSqlQuery sql{mDbConn};
sql.prepare(QString{
"insert into %1 (provider, zoom, position, data)"
"values( :provider, :zoom, :position, :data)"
}.arg(mTableName));
sql.bindValue(":tbname", mTableName);
sql.bindValue(":provider", id());
sql.bindValue(":zoom", zoom);
sql.bindValue(":position", QString("%1:%2").arg(pos.x()).arg(pos.y()));
sql.bindValue(":data", data);
if (!sql.exec()) {
qCritical() << pos << "=>" << sql.lastError().text();
mDbConn.close();
return false;
}
mDbConn.close();
return true;
}
bool
TmsProvider::cacheContains(const QPoint& pos, int zoom)
{
QByteArray res = getCache(pos, zoom);
return !res.isEmpty();
}
void
TmsProvider::createTask(const QRectF& rect, int zoom)
{
newImage(rect);
/// 创建下载瓦片任务
const QSize sz = tileSize();
int xMin = qFloor(rect.topLeft().x() / sz.width());
double xOffset = rect.topLeft().x() / sz.width() - xMin;
int xMax = qFloor(rect.bottomRight().x() / sz.width());
int yMin = qFloor(rect.topLeft().y() / sz.height());
double yOffset = rect.topLeft().y() / sz.height() - yMin;
int yMax = qFloor(rect.bottomRight().y() / sz.height());
for (int i = xMin; i <= xMax; ++i) {
for (int j = yMin; j <= yMax; ++j) {
TileInfo tile{};
tile.index = QPointF{i - xMin - xOffset, j - yMin - yOffset};
tile.position = QPoint{i, j};
tile.zoom = zoom;
tile.coord = QPoint{i - xMin, j - yMin};
tile.url = tileUrl(PointXY{static_cast<double>(i), static_cast<double>(j)}, zoom);
auto tileData = getCache(tile.position, tile.zoom);
if (!tileData.isEmpty()) {
tile.data = tileData;
tileReady(tile);
continue;
}
auto* task = new TileDownloadTask(tile);
QObject::connect(task, &TileDownloadTask::tileReady, this, &TmsProvider::tileReady);
QThreadPool::globalInstance()->start(task);
}
}
}
void
TmsProvider::tileReady(TileInfo tile)
{
if (!cacheContains(tile.position, tile.zoom)) {
addCache(tile.position, tile.zoom, tile.data);
}
QPainter painter{mImage};
QImage img = QImage::fromData(tile.data);
if (img.isNull()) {
return;
}
double xPos = tile.index.x() * tileSize().width();
double yPos = tile.index.y() * tileSize().height();
painter.drawImage(QPointF(xPos, yPos), img);
}
void
TmsProvider::newImage(const QRectF& rect)
{
QSize imgSize{int(rect.width()), int(rect.height())};
if (!mImage || imgSize != mImage->size()) {
mImage = new QImage(imgSize, QImage::Format_RGB32);
}
mImage->fill(Qt::white);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 496 B

View File

@ -0,0 +1,14 @@
<RCC>
<qresource prefix="/themes">
<file alias="mActionPan">theme/mActionPan.svg</file>
<file alias="mActionRefresh">theme/mActionRefresh.svg</file>
<file alias="mActionZoomIn">theme/mActionZoomIn.svg</file>
<file alias="mActionZoomOut">theme/mActionZoomOut.svg</file>
<file alias="mActionSelect">theme/mActionSelect.svg</file>
<file alias="mActionDownload">theme/mActionDownload.svg</file>
</qresource>
<qresource prefix="/">
<file>plane-red.png</file>
<file>plane-black.png</file>
</qresource>
</RCC>

View File

@ -0,0 +1 @@
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 800 800" version="1.1" viewBox="0 0 800 800" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g id="Layer_1"><path d="M771.9,400c0,205.3-166.6,371.9-371.9,371.9S28.1,605.3,28.1,400S194.7,28.1,400,28.1 S771.9,194.7,771.9,400z" fill="#F06292"/></g><g id="Layer_2"><path d=" M468.2,497.4c0,0,81,0,88.6,0c42.5,0,77-34.5,77-77s-34.5-77-77-77c-0.2,0-0.4,0-0.6,0c0.6-4.8,1-9.7,1-14.7 c0-65.4-53-118.4-118.4-118.4c-50.9,0-94.2,32.2-110.9,77.4c-10.6-10.6-25.2-17.2-41.4-17.2c-32.3,0-58.5,26.2-58.5,58.5 c0,0.8,0.1,1.6,0.1,2.4c-35.7,9.9-62,42.5-62,81.3c0,46.7,37.8,84.5,84.5,84.5c8.1,0,81.2,0,81.2,0" fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="16"/><g><polyline fill="none" points="448.7,557.7 400,606.4 351.3,557.7 " stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" stroke-width="16"/><line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" stroke-width="16" x1="400" x2="400" y1="411.5" y2="603.1"/></g></g></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,6 @@
<svg height="24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="m9.3797641.75499793c-.982122 0-1.8925021.62609527-1.8925021 1.49615247-.0000027.00101-.0000027.00202 0 .00303l.0582614 8.1966126-.9338533-2.0915926c-.0251985-.0571285-.0597716-.11122-.1023871-.16019-.3676306-.417893-.8495781-.7054664-1.3558261-.7768027-.5063017-.0713838-.9215368.0295376-1.3222488.1148398-.6076399.1293725-.9562193.5700338-1.0945572.9853708-.1314355.394696-.114703.820638.061796 1.2331811h-.00177l2.0284108 6.0814056c.01635.04943.039516.09723.068864.14206l3.4071564 5.182189.8226844 2.369697c.094212.270356.4118979.471091.7414497.468494l7.8153118-.05439c.346661-.0029.672884-.232329.743219-.522935l2.127319-8.753353c.0027-.01052.0051-.02109.0071-.03171.105254-.57349.06782-1.537511.04235-2.531403-.01276-.496946-.029-.978127-.04059-1.351097-.01166-.372921-.0087-.72369-.01414-.654387.0012-.01508.0018-.03019.0018-.0453v-2.933438c.000163-.047717-.0058-.095447-.01768-.1420631-.092603-.3569701-.222213-.6929683-.519046-.9868387-.275902-.2731347-.762435-.4452061-1.219864-.4231944v-.00601c-.02104 0-.04092.00535-.0618.00601-.01403.00129-.02844-.00161-.04235 0v .00455c-.319316.017561-.619681.1108161-.866813.256946v-.1934672c0-.8705782-.911708-1.4961849-1.894267-1.4961849h-.0053c-.560586 0-1.091519.2088514-1.449377.5456083v-.8810871c0-.8691577-.911321-1.4946719-1.892446-1.4946719-.487525 0-.957875.1537523-1.308166.4156202v-.4754938c0-.8686375-.908617-1.49615727-1.8907353-1.49615727z" fill="#ccc" stroke-width="1.14897895"/>
<path d="m9.7362401.34032241c-.9821192 0-1.8925026.62609028-1.8925026 1.49614789-.0000027.00101-.0000027.00202 0 .00303l.0582638 8.091862-.9339086-2.0915934c-.0251988-.0571275-.0597719-.111218-.1023871-.1601873-.3675777-.4178937-.8495256-.7054681-1.355827-.7768045-.5062455-.0713838-.9215377.0295385-1.3222488.1148407-.6075849.1293714-.9562192.5700329-1.0945027.9853708-.1314906.3946961-.1147024.8206367.0617414 1.2331791h-.00171l2.02841 6.0814083c.016334.04944.039481.09723.068811.142057l3.4072099 5.182189.8226855 2.369699c.094211.270357.4118967.471092.7414491.468497l7.815316-.05439c.346662-.0029.672882-.232329.743217-.522935l2.127266-8.753304c.0027-.01054.005-.02112.0071-.03177.105314-.57344.06787-1.537511.04242-2.531401-.01276-.496944-.029-.978127-.04064-1.351096-.01159-.3729232-.0086-.7236913-.01414-.6543431.0012-.015094.0018-.03023.0018-.045354v-2.9333886c.000175-.047714-.0058-.095444-.01765-.1420597-.09261-.3570071-.222215-.693006-.519106-.9868753-.275904-.273137-.762436-.4452072-1.219864-.423147v-.00607c-.02099 0-.04087.00534-.0618.00607-.01403.00124-.02839-.00166-.04236 0v .00449c-.319254.017566-.61962.1108193-.866807.2569483v-.1934654c0-.8705792-.911656-1.4961397-1.894215-1.4961397h-.0053c-.56059 0-1.091575.2088052-1.449377.545561v-.8810851c0-.8691588-.911377-1.4946719-1.892503-1.4946719-.487472 0-.957874.1537505-1.308111.4156202v-.3707439c0-.86863692-.90867-1.49615338-1.8907349-1.49615338z" fill="#999" stroke-width="1.14897895"/>
<path d="m10.291029.06303052c-.960084 0-1.8500346.61286024-1.8500346 1.46449338-.0000027.0009965-.0000027.00199 0 .00299l.0569371 7.9963521-.9129231-2.0473325c-.0246403-.0559304-.0584487-.1088866-.1001219-.1568272-.3593471-.4090401-.830471-.6905081-1.3253975-.7603303-.4949252-.0698686-.9008822.0289246-1.2925935.1124254-.5939995.126628-.9347919.5579643-1.0699824.9644949-.1285082.3863195-.1121064.8032633.0604158 1.2070975h-.00176l1.9829592 5.9526482c.015968.04838.038596.09516.067265.139031l3.3307772 5.07251.8041867 2.319522c.09211.264626.40267.461099.724825.458552l7.640031-.05326c.338866-.0028.657758-.227376.726541-.511808l2.079606-8.568028c.0026-.01032.0049-.02069.0069-.0311.102885-.561323.06632-1.504945.04142-2.47777-.01248-.486435-.02833-.957442-.03971-1.3225051-.01138-.3650653-.0083-.7084011-.0138-.6405203.0011-.014778.0018-.029589.0018-.044401v-2.8712826c.000159-.046695-.0057-.093404-.01728-.1390223-.090559-.3494454-.217244-.6783447-.507454-.966011-.26972-.2673614-.745316-.4357397-1.192525-.4142017v-.00591c-.02049 0-.03998.00525-.06037.00591-.01375.00124-.02782-.00161-.04142 0v .00445c-.312129.017184-.60576.1084513-.847371.2514559v-.1893483c0-.8521168-.891217-1.4644708-1.851746-1.4644708h-.0052c-.548052 0-1.067054.2044019-1.41685.5340109v-.8624354c0-.850744-.890942-1.4630026-1.850033-1.4630026-.476591 0-.936393.1505313-1.278842.4068156v-.438697c0-.85024612-.888238-1.46449341-1.848268-1.46449341l0 0z" stroke="#000" stroke-width=".03530137"/>
<path d="m10.290257.80959703c-.6092983 0-1.1004663.36643757-1.1004663.82210417l.06555 9.3816458c-.0171747.388827-.6921882.457749-.8194258.173302l-1.5494454-3.4774835c-.5773206-.6572292-1.070203-.5749111-1.8378279-.4112659-.5216001.1112418-.7375848.8098446-.4726154 1.372541l1.9816346 5.9526974 3.3723074 5.13613.8292568 2.387969 7.639094-.0533 2.080598-8.56883c.137012-.747173-.04247-4.0967016-.01938-4.3864068v-2.8705721c-.152148-.5875495-.437495-.9467901-.969091-.8838806-.6104 0-.923911.4282129-.923911.8838795v2.8411758c.106528.3851373-.813685.4854894-.774364-.00194v-4.2914437c0-.4556679-.491777-.8227677-1.102179-.8227677h-.0052c-.610401 0-1.101295.3670998-1.101295.8227677v3.4464279c.111221.4166163-1.09003.53846-1.063467-.00194v-5.2372416c0-.4556676-.491779-.8221511-1.102179-.8221511-.610456 0-1.102232.3664835-1.102232.8221511v5.5051713c.04827.3819148-.901381.4781515-.925792-.00129v-6.8953548c0-.4556666-.490286-.82210383-1.09958-.82210383l0 0 0 0 0 0 0 0z" fill="#fff" stroke="#000" stroke-width=".01642426"/>
</svg>

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -0,0 +1 @@
<svg height="24" width="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="b"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient><linearGradient id="a"><stop offset="0" stop-color="#3465a4"/><stop offset="1" stop-color="#3465a4"/></linearGradient><linearGradient id="g" gradientUnits="userSpaceOnUse" x1="16.431" x2="18.865" y1="17.169" y2="13.958"><stop offset="0" stop-color="#c4d7eb"/><stop offset="1" stop-color="#c4d7eb" stop-opacity="0"/></linearGradient><linearGradient id="h" gradientUnits="userSpaceOnUse" x1="18.642" x2="18.865" y1="17.554" y2="13.958"><stop offset="0" stop-color="#2b5b95"/><stop offset="1" stop-color="#5c8fce" stop-opacity="0"/></linearGradient><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="6.262" x2="7.318" y1="5.295" y2="9.918"><stop offset="0" stop-color="#264976"/><stop offset=".333" stop-color="#3f689d"/><stop offset="1" stop-color="#5689ca" stop-opacity="0"/></linearGradient><linearGradient id="d" gradientTransform="matrix(-.54367 0 0 -.54367 24.52 24.602)" gradientUnits="userSpaceOnUse" x1="37.128" x2="37.065" y1="29.73" y2="26.194"><stop offset="0" stop-color="#3465a4"/><stop offset="1" stop-color="#3465a4" stop-opacity="0"/></linearGradient><linearGradient id="e" gradientTransform="matrix(-.31481 -.26598 -.26598 .31481 29.625 6.946)" gradientUnits="userSpaceOnUse" x1="62.514" x2="15.985" y1="36.061" y2="20.609"><stop offset="0" stop-color="#8cb0d8"/><stop offset="1" stop-color="#4580bf"/></linearGradient><linearGradient id="f" gradientTransform="matrix(-.31481 -.26598 -.26598 .31481 29.625 6.946)" gradientUnits="userSpaceOnUse" x1="46.835" x2="45.38" xlink:href="#a" y1="45.264" y2="50.94"/><linearGradient id="l" gradientTransform="matrix(-.27647 -.23359 -.23359 .27647 27.523 6.943)" gradientUnits="userSpaceOnUse" x1="5.965" x2="52.854" xlink:href="#b" y1="26.048" y2="26.048"/><linearGradient id="i" gradientTransform="matrix(.31481 .26598 .26598 -.31481 -5.625 17.054)" gradientUnits="userSpaceOnUse" x1="18.936" x2="53.589" y1="23.668" y2="26.649"><stop offset="0" stop-color="#4580bf"/><stop offset="1" stop-color="#376da5"/></linearGradient><linearGradient id="j" gradientTransform="matrix(.31481 .26598 .26598 -.31481 -5.625 17.054)" gradientUnits="userSpaceOnUse" x1="46.835" x2="45.38" xlink:href="#a" y1="45.264" y2="50.94"/><linearGradient id="k" gradientUnits="userSpaceOnUse" x1="5.965" x2="52.854" xlink:href="#b" y1="26.048" y2="26.048"/><path d="M9.638 5.336s-4.859-.34-3.364 5.369h-4.18s.273-6.456 7.544-5.369z" display="block" fill="url(#c)" overflow="visible" stroke="url(#d)" stroke-width=".544"/><path d="M2.317 10.975C.32 1.513 10.423-2.041 19.229 4.906l2.596-2.85-.052 9.315-8.134-.008 2.707-3.044C10.153 3.625 2.22 3.977 2.316 10.975z" display="block" fill="url(#e)" overflow="visible" stroke="url(#f)" stroke-width=".544"/><path d="M14.108 18.631s4.86.34 3.364-5.369H21.7c0 .817-.32 6.456-7.592 5.37z" display="block" fill="url(#g)" overflow="visible" stroke="url(#h)" stroke-width=".544"/><path d="M21.683 13.025c1.996 9.462-8.106 13.016-16.912 6.069l-2.528 2.951.018-9.348 7.965-.06-2.572 3.044c6.193 4.694 14.126 4.342 14.03-2.656z" display="block" fill="url(#i)" overflow="visible" stroke="url(#j)" stroke-width=".544"/><path d="M2.521 21.214l.034-8.088 7.034-.203-2.386 2.815 2.102 1.29c-1.63 1.224-2.473 1.317-3.017 2.71l-1.531-1.147-2.236 2.623z" fill="#e6e6e6" opacity=".272" overflow="visible"/><path d="M51.09 45.944c9.12-15.22-4.458-33.743-31.605-33.995l.028-8.246L6.534 19.297l12.834 10.972.055-9.007c17.528-.224 35.195 10.103 31.667 24.682z" transform="matrix(.27647 .23359 .23359 -.27647 -3.478 17.056)" fill="none" stroke-width="1.502" display="block" overflow="visible" stroke="url(#k)" opacity=".5"/><path d="M2.451 7.797c1.034-6.338 9.16-8.407 16.825-2.102l1.953-2.15.014 7.275-6.383.002 2.258-2.571C11.985 4.094 4.95 3.146 2.451 7.797z" opacity=".5" fill="none" stroke-width=".544" display="block" overflow="visible" stroke="url(#l)"/><path d="M2.385 8.647c1.954-5.676 8.94-3.34 10.976-2.446 2.27.115 3.085-1.541 4.893-1.631C10.615-.753 2.589 1.036 2.385 8.647z" fill="#fff" opacity=".272" overflow="visible"/></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24"><path d="M2.5 2.5h17v17h-17z" fill="none" stroke="#727272" stroke-dasharray="1, 2"/><path d="M2.5 2.5h3v3h-3zm14 0h3v3h-3zm0 14h3v3h-3zm-14 0h3v3h-3z" fill="#e5e5e5" stroke="#727272"/><path d="M19.5 14.636L5.5 2.5l2.357 17.59 4.022-3.44 3.92 6.85 2.648-1.346-4.06-6.83z" fill="#fff" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round"/></svg>

After

Width:  |  Height:  |  Size: 435 B

View File

@ -0,0 +1,16 @@
<svg height="24" width="24" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(0 -8)">
<path d="m17.96122 7c0 3.354712-2.668929 6.074244-5.96122 6.074244-3.292291 0-5.9612203-2.719532-5.9612203-6.074244 0-3.3547121 2.6689293-6.07424355 5.9612203-6.07424355 3.292291 0 5.96122 2.71953145 5.96122 6.07424355z" style="opacity:.8;fill:#e6e6e6;stroke:#505050;stroke-width:.75218332;stroke-linecap:round;stroke-linejoin:round;stroke-dashoffset:7" transform="matrix(1.3420071 0 0 1.3170365 -1.6040853 8.2791092)"/>
<path d="m10 13c2-3 4.442248-3.398055 6-2 1.557752 1.398055-2 1-4 3-2 2 0 6-2 6-1.9999999 0-1.9999999-4 0-7z" fill="#fcffff" fill-rule="evenodd" opacity=".7"/>
<path d="m14.5 13.2l0 8.6" style="fill:none;stroke:#000;stroke-width:2.9000001;stroke-linecap:round;stroke-linejoin:round;overflow:visible"/>
<path d="m2.0000001 29l4-4" opacity=".5" overflow="visible" stroke="#fcffff" stroke-linecap="round" stroke-linejoin="round"/>
<path d="m10.2 17.5l8.6 0" style="fill:none;stroke:#000;stroke-width:2.9000001;stroke-linecap:round;stroke-linejoin:round;overflow:visible"/>
<path d="m10.2 17.5l8.6 0" style="fill:none;stroke:#6d97c4;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;overflow:visible"/>
<g stroke-linejoin="round" transform="translate(8.7360334 4.906424)">
<path d="m-1.2360334 17.593576c0 2 2.00000001 2 2.00000001 2 0 0-7.00000001 7-7.00000001 7l-2-2z" fill="#ffcc30" fill-rule="evenodd" stroke="#505050"/>
<path d="m-2.7360334 19.093576l2.00000001-2 1.99999989 2-1.99999989 2z" fill-rule="evenodd" stroke="#505050"/>
<path d="m-6.7360334 24.093576l4-4" opacity=".5" overflow="visible" stroke="#fcffff" stroke-linecap="round"/>
</g>
<path d="m14.5 13.2l0 8.6" style="fill:none;stroke:#6d97c4;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;overflow:visible"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

Some files were not shown because too many files have changed in this diff Show More