修复了高德地图不显示的问题
parent
fa8395cdf2
commit
25c5a65f4b
Binary file not shown.
|
@ -40,29 +40,17 @@ namespace LAMPMainWidget {
|
||||||
mUi->setupUi(dynamic_cast<QMainWindow*>(this));
|
mUi->setupUi(dynamic_cast<QMainWindow*>(this));
|
||||||
setupWindow();
|
setupWindow();
|
||||||
setupTaskWindow();
|
setupTaskWindow();
|
||||||
|
setupShowMessage();
|
||||||
|
|
||||||
|
this->show();// 强制显示窗口
|
||||||
setupLayers();
|
setupLayers();
|
||||||
setupStatusBar();
|
setupStatusBar();
|
||||||
setupActions();
|
setupActions();
|
||||||
setRightToolbox();
|
setRightToolbox();
|
||||||
|
|
||||||
mUi->panAction->trigger();
|
mUi->panAction->trigger();
|
||||||
mUi->layerList->setCurrentItem(mLayerList.first());
|
mUi->layerList->setCurrentItem(mLayerList.first());
|
||||||
|
|
||||||
|
|
||||||
this->show();// 强制显示窗口
|
|
||||||
// 绑定消息显示
|
|
||||||
RasterMessageShow::RasterWidgetMessageShow* messageshow = RasterMessageShow::RasterWidgetMessageShow::getInstance(this);
|
|
||||||
messageshow->bandingTextBrowserMessage(this->mUi->textBrowserMessage);
|
|
||||||
|
|
||||||
connect(mUi->actioncloseAllRasterFile, SIGNAL(triggered()), this, SLOT(onactioncloseAllRasterFile_triggered()));
|
|
||||||
|
|
||||||
this->mUi->toolBar->hide();
|
|
||||||
this->mUi->dockWidget_Map->hide();
|
|
||||||
this->mUi->dockWidget->hide();
|
|
||||||
this->mUi->statusbar->hide();
|
|
||||||
this->mUi->dockWidget_2->hide();
|
|
||||||
this->mUi->dockWidget_3->hide();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterMainWidget::~RasterMainWidget() {
|
RasterMainWidget::~RasterMainWidget() {
|
||||||
|
@ -74,8 +62,7 @@ namespace LAMPMainWidget {
|
||||||
delete mCenterLabel;
|
delete mCenterLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void RasterMainWidget::setupTaskWindow() {
|
||||||
RasterMainWidget::setupTaskWindow() {
|
|
||||||
mUi->taskTable->setColumnCount(5);
|
mUi->taskTable->setColumnCount(5);
|
||||||
mUi->taskTable->setHorizontalHeaderLabels(QStringList{
|
mUi->taskTable->setHorizontalHeaderLabels(QStringList{
|
||||||
"名称", "范围", "zoom值", "数据源", "进度"
|
"名称", "范围", "zoom值", "数据源", "进度"
|
||||||
|
@ -83,8 +70,7 @@ namespace LAMPMainWidget {
|
||||||
mUi->taskTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
|
mUi->taskTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void RasterMainWidget::setupActions() {
|
||||||
RasterMainWidget::setupActions() {
|
|
||||||
mMapActionGroup->addAction(mUi->panAction);
|
mMapActionGroup->addAction(mUi->panAction);
|
||||||
mMapActionGroup->addAction(mUi->zoomInAction);
|
mMapActionGroup->addAction(mUi->zoomInAction);
|
||||||
mMapActionGroup->addAction(mUi->zoomOutAction);
|
mMapActionGroup->addAction(mUi->zoomOutAction);
|
||||||
|
@ -157,11 +143,10 @@ namespace LAMPMainWidget {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void RasterMainWidget::initMaps() {
|
||||||
RasterMainWidget::initMaps() {
|
if (mMaps.isEmpty()) {
|
||||||
if (false&&mMaps.isEmpty()) {
|
|
||||||
mMaps = QHash<QString, MapLayer*>{
|
mMaps = QHash<QString, MapLayer*>{
|
||||||
{"Openstreet地图", new TmsLayer(OSTNormalMap, "ostnormalmap", mMapConvas)},
|
//{"Openstreet地图", new TmsLayer(OSTNormalMap, "ostnormalmap", mMapConvas)},
|
||||||
{"高德地图", new TmsLayer(GaodeNormapMap, "gaodenormalmap", mMapConvas)}
|
{"高德地图", new TmsLayer(GaodeNormapMap, "gaodenormalmap", mMapConvas)}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -188,6 +173,16 @@ namespace LAMPMainWidget {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RasterMainWidget::setupShowMessage()
|
||||||
|
{
|
||||||
|
// 绑定消息显示
|
||||||
|
RasterMessageShow::RasterWidgetMessageShow* messageshow = RasterMessageShow::RasterWidgetMessageShow::getInstance(this);
|
||||||
|
messageshow->bandingTextBrowserMessage(this->mUi->textBrowserMessage);
|
||||||
|
|
||||||
|
connect(mUi->actioncloseAllRasterFile, SIGNAL(triggered()), this, SLOT(onactioncloseAllRasterFile_triggered()));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
QWidget* RasterMainWidget::spacerWiget(int width) const {
|
QWidget* RasterMainWidget::spacerWiget(int width) const {
|
||||||
auto spacer = new QWidget{};
|
auto spacer = new QWidget{};
|
||||||
spacer->setHidden(true);
|
spacer->setHidden(true);
|
||||||
|
@ -197,18 +192,15 @@ namespace LAMPMainWidget {
|
||||||
return spacer;
|
return spacer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void RasterMainWidget::panHandle(bool checked) {
|
||||||
RasterMainWidget::panHandle(bool checked) {
|
|
||||||
mMapConvas->selectTool(QString{ "pan_tool" });
|
mMapConvas->selectTool(QString{ "pan_tool" });
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void RasterMainWidget::zoomInHandle(bool checked) {
|
||||||
RasterMainWidget::zoomInHandle(bool checked) {
|
|
||||||
mMapConvas->selectTool(QString{ "zoomin_tool" });
|
mMapConvas->selectTool(QString{ "zoomin_tool" });
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void RasterMainWidget::zoomOutHandle(bool checked) {
|
||||||
RasterMainWidget::zoomOutHandle(bool checked) {
|
|
||||||
mMapConvas->selectTool(QString{ "zoomout_tool" });
|
mMapConvas->selectTool(QString{ "zoomout_tool" });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,36 +211,30 @@ namespace LAMPMainWidget {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void RasterMainWidget::sponsorHandle(bool checked) {
|
||||||
RasterMainWidget::sponsorHandle(bool checked) {
|
|
||||||
auto* window = new SponsorWindow(dynamic_cast<QWidget*>(this));
|
auto* window = new SponsorWindow(dynamic_cast<QWidget*>(this));
|
||||||
window->exec();
|
window->exec();
|
||||||
window->deleteLater();
|
window->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void RasterMainWidget::refreshHandle(bool checked) {
|
||||||
RasterMainWidget::refreshHandle(bool checked) {
|
|
||||||
mMapConvas->refreshMap();
|
mMapConvas->refreshMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void RasterMainWidget::selectHandle(bool checked) {
|
||||||
RasterMainWidget::selectHandle(bool checked) {
|
|
||||||
mMapConvas->selectTool(QString{ "select_tool" });
|
mMapConvas->selectTool(QString{ "select_tool" });
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void RasterMainWidget::centerChangedHandle(LAMPMainWidget::PointXY pos) {
|
||||||
RasterMainWidget::centerChangedHandle(LAMPMainWidget::PointXY pos) {
|
|
||||||
mCenterText->setText(QString("lon:%1, lat:%2").arg(pos.x()).arg(pos.y()));
|
mCenterText->setText(QString("lon:%1, lat:%2").arg(pos.x()).arg(pos.y()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void RasterMainWidget::zoomChangedHandle(int zoom) {
|
||||||
RasterMainWidget::zoomChangedHandle(int zoom) {
|
|
||||||
mZoomText->setText(QString("%1").arg(zoom));
|
mZoomText->setText(QString("%1").arg(zoom));
|
||||||
mScaleText->setText(QString("1cm:%1m").arg(this->mMapConvas->scale()));
|
mScaleText->setText(QString("1cm:%1m").arg(this->mMapConvas->scale()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void RasterMainWidget::clickedHandle(LAMPMainWidget::PointXY pos) {
|
||||||
RasterMainWidget::clickedHandle(LAMPMainWidget::PointXY pos) {
|
|
||||||
QString posText = QString("%1, %2").arg(pos.x()).arg(pos.y());
|
QString posText = QString("%1, %2").arg(pos.x()).arg(pos.y());
|
||||||
if (mSetLeftTop) {
|
if (mSetLeftTop) {
|
||||||
mUi->leftTopText->setText(posText);
|
mUi->leftTopText->setText(posText);
|
||||||
|
@ -260,23 +246,20 @@ namespace LAMPMainWidget {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void RasterMainWidget::leftTopClickedHandle() {
|
||||||
RasterMainWidget::leftTopClickedHandle() {
|
|
||||||
mSetLeftTop = true;
|
mSetLeftTop = true;
|
||||||
mUi->selectAction->trigger();
|
mUi->selectAction->trigger();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void RasterMainWidget::rightBottomClickedHandle() {
|
||||||
RasterMainWidget::rightBottomClickedHandle() {
|
|
||||||
mSetLeftTop = false;
|
mSetLeftTop = false;
|
||||||
mUi->selectAction->trigger();
|
mUi->selectAction->trigger();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void RasterMainWidget::layerChanged(QListWidgetItem* current, QListWidgetItem* previous) {
|
||||||
RasterMainWidget::layerChanged(QListWidgetItem* current, QListWidgetItem* previous) {
|
|
||||||
auto mapName = current->text();
|
auto mapName = current->text();
|
||||||
if (!mMaps.contains(mapName)) {
|
if (!mMaps.contains(mapName)) {
|
||||||
qDebug() << mapName << "不支持";
|
qDebug() << mapName << u8"不支持";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,7 +267,7 @@ namespace LAMPMainWidget {
|
||||||
auto i = mMaps.begin();
|
auto i = mMaps.begin();
|
||||||
for (; i != mMaps.end(); ++i) {
|
for (; i != mMaps.end(); ++i) {
|
||||||
if (i.key() == mapName) {
|
if (i.key() == mapName) {
|
||||||
i.value()->setVisiblity(true);
|
i.value()->setVisiblity(true); // 切换图层为显示模式
|
||||||
qDebug() << i.key() << i.value()->isVisible();
|
qDebug() << i.key() << i.value()->isVisible();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -292,23 +275,21 @@ namespace LAMPMainWidget {
|
||||||
i.value()->setVisiblity(false);
|
i.value()->setVisiblity(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
mMapConvas->addLayer(layer);
|
mMapConvas->addLayer(layer);//图层开始显示
|
||||||
mMapConvas->setCurrentLayer(layer->id());
|
mMapConvas->setCurrentLayer(layer->id());
|
||||||
mMapConvas->refreshMap();
|
mMapConvas->refreshMap();//刷新地图
|
||||||
|
|
||||||
zoomChangedHandle(mMapConvas->zoomValue());
|
zoomChangedHandle(mMapConvas->zoomValue());// 更新zoom值
|
||||||
centerChangedHandle(mMapConvas->mapCenter());
|
centerChangedHandle(mMapConvas->mapCenter());// 更新中心坐标
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void RasterMainWidget::createDownloadTask() {
|
||||||
RasterMainWidget::createDownloadTask() {
|
|
||||||
auto taskWindow = new TaskWindow(dynamic_cast<QWidget*>(this));
|
auto taskWindow = new TaskWindow(dynamic_cast<QWidget*>(this));
|
||||||
taskWindow->exec();
|
taskWindow->exec();
|
||||||
taskWindow->deleteLater();
|
taskWindow->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void RasterMainWidget::changeTaskTable(int row, int col, QString text) {
|
||||||
RasterMainWidget::changeTaskTable(int row, int col, QString text) {
|
|
||||||
mUi->taskTable->takeItem(row, col);
|
mUi->taskTable->takeItem(row, col);
|
||||||
mUi->taskTable->setItem(row, col, new QTableWidgetItem(text));
|
mUi->taskTable->setItem(row, col, new QTableWidgetItem(text));
|
||||||
}
|
}
|
||||||
|
@ -325,14 +306,14 @@ namespace LAMPMainWidget {
|
||||||
mMapConvas->selectTool("addplane_tool");
|
mMapConvas->selectTool("addplane_tool");
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterMainWidget::onactioncloseAllRasterFile_triggered()
|
void RasterMainWidget::onactioncloseAllRasterFile_triggered()
|
||||||
{
|
{
|
||||||
CloseAllGDALRaster();
|
CloseAllGDALRaster();
|
||||||
}
|
}
|
||||||
|
|
||||||
QTableWidget* RasterMainWidget::getTaskTable()
|
QTableWidget* RasterMainWidget::getTaskTable()
|
||||||
{
|
{
|
||||||
return this->mUi->taskTable;
|
return this->mUi->taskTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ namespace LAMPMainWidget {
|
||||||
void initMaps();
|
void initMaps();
|
||||||
void setRightToolbox();
|
void setRightToolbox();
|
||||||
void initToolbox();
|
void initToolbox();
|
||||||
|
void setupShowMessage();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// 各处处理函数
|
/// 各处处理函数
|
||||||
|
@ -75,7 +75,7 @@ namespace LAMPMainWidget {
|
||||||
void onactioncloseAllRasterFile_triggered();
|
void onactioncloseAllRasterFile_triggered();
|
||||||
private:
|
private:
|
||||||
Ui::RasterMainWidget* mUi;
|
Ui::RasterMainWidget* mUi;
|
||||||
MapCanvas* mMapConvas;
|
MapCanvas* mMapConvas;//地图容器
|
||||||
QLineEdit* mScaleText;
|
QLineEdit* mScaleText;
|
||||||
QLabel* mScaleLabel;
|
QLabel* mScaleLabel;
|
||||||
QLineEdit* mCenterText;
|
QLineEdit* mCenterText;
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>898</width>
|
<width>906</width>
|
||||||
<height>580</height>
|
<height>609</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
@ -84,8 +84,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>898</width>
|
<width>906</width>
|
||||||
<height>22</height>
|
<height>23</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QMenu" name="projectMenu">
|
<widget class="QMenu" name="projectMenu">
|
||||||
|
@ -117,11 +117,15 @@
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>工具</string>
|
<string>工具</string>
|
||||||
</property>
|
</property>
|
||||||
|
<addaction name="actioncloseAllRasterFile"/>
|
||||||
|
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenu" name="helpMenu">
|
<widget class="QMenu" name="helpMenu">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>帮助</string>
|
<string>帮助</string>
|
||||||
</property>
|
</property>
|
||||||
|
<addaction name="tutorialAction"/>
|
||||||
|
<addaction name="srcAction"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
</widget>
|
</widget>
|
||||||
<addaction name="projectMenu"/>
|
<addaction name="projectMenu"/>
|
||||||
|
@ -134,9 +138,6 @@
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QStatusBar" name="statusbar"/>
|
<widget class="QStatusBar" name="statusbar"/>
|
||||||
<widget class="QToolBar" name="toolBar">
|
<widget class="QToolBar" name="toolBar">
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>toolBar</string>
|
<string>toolBar</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -378,85 +379,11 @@ p, li { white-space: pre-wrap; }
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QDockWidget" name="dockWidget_Map">
|
<action name="actioncloseAllRasterFile">
|
||||||
<property name="layoutDirection">
|
<property name="text">
|
||||||
<enum>Qt::LeftToRight</enum>
|
<string>释放影像文件</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
</action>
|
||||||
<string>地图窗口</string>
|
|
||||||
</property>
|
|
||||||
<attribute name="dockWidgetArea">
|
|
||||||
<number>1</number>
|
|
||||||
</attribute>
|
|
||||||
<widget class="QWidget" name="dockWidgetContents_5">
|
|
||||||
<widget class="QTabWidget" name="tabWidget">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>10</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>502</width>
|
|
||||||
<height>274</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="currentIndex">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<widget class="QWidget" name="mapTab">
|
|
||||||
<attribute name="title">
|
|
||||||
<string>地图</string>
|
|
||||||
</attribute>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
|
||||||
<item>
|
|
||||||
<layout class="QGridLayout" name="mapCanvasLayout"/>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</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>
|
|
||||||
</widget>
|
|
||||||
</widget>
|
|
||||||
<widget class="QMenuBar" name="menubar">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>906</width>
|
|
||||||
<height>23</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<widget class="QMenu" name="toolsMenu">
|
|
||||||
<property name="title">
|
|
||||||
<string>工具</string>
|
|
||||||
</property>
|
|
||||||
<addaction name="actioncloseAllRasterFile"/>
|
|
||||||
</widget>
|
|
||||||
<addaction name="toolsMenu"/>
|
|
||||||
</widget>
|
|
||||||
<action name="tutorialAction">
|
<action name="tutorialAction">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>使用教程</string>
|
<string>使用教程</string>
|
||||||
|
@ -593,11 +520,6 @@ p, li { white-space: pre-wrap; }
|
||||||
<string>飞机</string>
|
<string>飞机</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actioncloseAllRasterFile">
|
|
||||||
<property name="text">
|
|
||||||
<string>释放影像文件</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
</widget>
|
</widget>
|
||||||
<resources>
|
<resources>
|
||||||
<include location="../RasterMainWidgetGUI.qrc"/>
|
<include location="../RasterMainWidgetGUI.qrc"/>
|
||||||
|
|
|
@ -9,8 +9,7 @@ namespace LAMPMainWidget {
|
||||||
initCache();
|
initCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString
|
QString GaodeNormalProvider::tileUrl(const LAMPMainWidget::PointXY& pos, int zoom) const {
|
||||||
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)" };
|
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);
|
return QString(urlFmt).arg(pos.x()).arg(pos.y()).arg(zoom);
|
||||||
|
|
|
@ -84,8 +84,7 @@ namespace LAMPMainWidget {
|
||||||
setZoomValue(zoom);
|
setZoomValue(zoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void MapCanvas::resizeEvent(QResizeEvent* event) {
|
||||||
MapCanvas::resizeEvent(QResizeEvent* event) {
|
|
||||||
updateViewExtent(true);
|
updateViewExtent(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,19 +96,17 @@ namespace LAMPMainWidget {
|
||||||
QGraphicsView::mouseMoveEvent(event);
|
QGraphicsView::mouseMoveEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void MapCanvas::refreshMap() {
|
||||||
MapCanvas::refreshMap() {
|
|
||||||
QMapIterator<QString, MapLayer*> iterator(mLayers);
|
QMapIterator<QString, MapLayer*> iterator(mLayers);
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
iterator.next();
|
iterator.next();
|
||||||
iterator.value()->map()->setViewExtent(mViewExtent);
|
iterator.value()->map()->setViewExtent(mViewExtent);//设置当前图层的可视范围
|
||||||
iterator.value()->update();
|
iterator.value()->update();//更新当前图层的显示内容
|
||||||
}
|
}
|
||||||
mScene->update();
|
mScene->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void MapCanvas::addLayer(MapLayer* const layer) {
|
||||||
MapCanvas::addLayer(MapLayer* const layer) {
|
|
||||||
if (!layer)
|
if (!layer)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -119,15 +116,14 @@ namespace LAMPMainWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
mLayers.insert(layer->id(), layer);
|
mLayers.insert(layer->id(), layer);
|
||||||
if (mLayers.count() == 1) {
|
if (mLayers.count() == 1) {//判断是否是第唯一个图层
|
||||||
setCurrentLayer(layer->id());
|
setCurrentLayer(layer->id());
|
||||||
}
|
}
|
||||||
mScene->addItem(layer->map());
|
mScene->addItem(layer->map());//将当前图层添加到场景中
|
||||||
refreshMap();
|
refreshMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void MapCanvas::setZoomValue(const int zoom) {
|
||||||
MapCanvas::setZoomValue(const int zoom) {
|
|
||||||
mZoomValue = normalizeZoom(zoom);
|
mZoomValue = normalizeZoom(zoom);
|
||||||
zoomChanged(mZoomValue);
|
zoomChanged(mZoomValue);
|
||||||
|
|
||||||
|
@ -142,8 +138,7 @@ namespace LAMPMainWidget {
|
||||||
updateViewExtent(true);
|
updateViewExtent(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void MapCanvas::updateViewExtent(bool reset) {
|
||||||
MapCanvas::updateViewExtent(bool reset) {
|
|
||||||
if (!mCurrentLayer) {
|
if (!mCurrentLayer) {
|
||||||
qDebug() << "未设置当前图层,视图区域无法更新";
|
qDebug() << "未设置当前图层,视图区域无法更新";
|
||||||
return;
|
return;
|
||||||
|
@ -161,7 +156,7 @@ namespace LAMPMainWidget {
|
||||||
mViewExtent.translate(offset.x(), offset.y());
|
mViewExtent.translate(offset.x(), offset.y());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
qDebug() << "视图区域更新 平移范围 x ,y "<<-mDragRect.width()<<" , "<<-mDragRect.height() ;
|
qDebug() << "视图区域更新 平移范围 x ,y " << -mDragRect.width() << " , " << -mDragRect.height();
|
||||||
/// 视图偏移并重置偏移属性
|
/// 视图偏移并重置偏移属性
|
||||||
mViewExtent.translate(-mDragRect.width(), -mDragRect.height());
|
mViewExtent.translate(-mDragRect.width(), -mDragRect.height());
|
||||||
mDragRect.setRect(0, 0, 0, 0);
|
mDragRect.setRect(0, 0, 0, 0);
|
||||||
|
@ -178,33 +173,29 @@ namespace LAMPMainWidget {
|
||||||
refreshMap();
|
refreshMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void MapCanvas::setCrs(const CRS* const crs) {
|
||||||
MapCanvas::setCrs(const CRS* const crs) {
|
|
||||||
mCrs = crs;
|
mCrs = crs;
|
||||||
crsChanged();
|
crsChanged();
|
||||||
updateViewExtent(true);
|
updateViewExtent(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void MapCanvas::setCurrentLayer(const QString& id) {
|
||||||
MapCanvas::setCurrentLayer(const QString& id) {
|
|
||||||
if (!mLayers.contains(id)) {
|
if (!mLayers.contains(id)) {
|
||||||
qWarning() << "未添加图层=>" << id;
|
qWarning() << "未添加图层=>" << id;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mCurrentLayer = mLayers[id];
|
mCurrentLayer = mLayers[id];
|
||||||
if (!mCrs) {
|
if (!mCrs) {
|
||||||
setCrs(&mCurrentLayer->crs());
|
setCrs(&mCurrentLayer->crs());//设置当前图层的坐标系,后期考虑继续拆分
|
||||||
}
|
}
|
||||||
updateViewExtent(true);
|
updateViewExtent(true);// 更新视图区域
|
||||||
}
|
}
|
||||||
|
|
||||||
double
|
double MapCanvas::scale() const {
|
||||||
MapCanvas::scale() const {
|
|
||||||
return logicalDpiX() * resolution() * 39.37 / 100;;
|
return logicalDpiX() * resolution() * 39.37 / 100;;
|
||||||
}
|
}
|
||||||
|
|
||||||
double
|
double MapCanvas::resolution() const {
|
||||||
MapCanvas::resolution() const {
|
|
||||||
if (!mCurrentLayer) {
|
if (!mCurrentLayer) {
|
||||||
qWarning() << "未设置当前图层,无法获取分辨率";
|
qWarning() << "未设置当前图层,无法获取分辨率";
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -213,8 +204,7 @@ namespace LAMPMainWidget {
|
||||||
return mCurrentLayer->resolution();
|
return mCurrentLayer->resolution();
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int MapCanvas::zoomValue() const {
|
||||||
MapCanvas::zoomValue() const {
|
|
||||||
if (!mCurrentLayer) {
|
if (!mCurrentLayer) {
|
||||||
qWarning() << "未设置当前图层,默认返回zoom值为0";
|
qWarning() << "未设置当前图层,默认返回zoom值为0";
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -223,8 +213,7 @@ namespace LAMPMainWidget {
|
||||||
return mCurrentLayer->zoomValue();
|
return mCurrentLayer->zoomValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int MapCanvas::normalizeZoom(const int zoom) const {
|
||||||
MapCanvas::normalizeZoom(const int zoom) const {
|
|
||||||
int z{};
|
int z{};
|
||||||
if (zoom <= kMinZoomValue) {
|
if (zoom <= kMinZoomValue) {
|
||||||
z = kMinZoomValue;
|
z = kMinZoomValue;
|
||||||
|
@ -239,8 +228,7 @@ namespace LAMPMainWidget {
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
|
|
||||||
PointXY
|
PointXY MapCanvas::pixel2Lonlat(const QPointF& point) const {
|
||||||
MapCanvas::pixel2Lonlat(const QPointF& point) const {
|
|
||||||
QPointF scenePoint = mapToScene(QPoint{ static_cast<int>(point.x()), static_cast<int>(point.y()) });
|
QPointF scenePoint = mapToScene(QPoint{ static_cast<int>(point.x()), static_cast<int>(point.y()) });
|
||||||
QPointF mapPoint{ scenePoint.x() * resolution(), scenePoint.y() * resolution() };
|
QPointF mapPoint{ scenePoint.x() * resolution(), scenePoint.y() * resolution() };
|
||||||
PointXY crsPoint = mCrs->inverse(PointXY{ mapPoint });
|
PointXY crsPoint = mCrs->inverse(PointXY{ mapPoint });
|
||||||
|
@ -248,8 +236,7 @@ namespace LAMPMainWidget {
|
||||||
return crsPoint;
|
return crsPoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool MapCanvas::selectTool(const QString& tool) {
|
||||||
MapCanvas::selectTool(const QString& tool) {
|
|
||||||
if (!mMapTools.contains(tool)) {
|
if (!mMapTools.contains(tool)) {
|
||||||
qWarning() << QString("%1工具不存在").arg(tool);
|
qWarning() << QString("%1工具不存在").arg(tool);
|
||||||
return false;
|
return false;
|
||||||
|
@ -274,8 +261,7 @@ namespace LAMPMainWidget {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void MapCanvas::setupTools() {
|
||||||
MapCanvas::setupTools() {
|
|
||||||
auto panTool = new MapToolPan(this);
|
auto panTool = new MapToolPan(this);
|
||||||
mMapTools.insert(panTool->id(), panTool);
|
mMapTools.insert(panTool->id(), panTool);
|
||||||
|
|
||||||
|
|
|
@ -162,7 +162,7 @@ namespace LAMPMainWidget {
|
||||||
void mouseMoveEvent(QMouseEvent* event) override;
|
void mouseMoveEvent(QMouseEvent* event) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QGraphicsScene* mScene;
|
QGraphicsScene* mScene; // 场景对象
|
||||||
QRectF mMapExtent;
|
QRectF mMapExtent;
|
||||||
QRectF mViewExtent;
|
QRectF mViewExtent;
|
||||||
QRectF mDragRect;
|
QRectF mDragRect;
|
||||||
|
|
|
@ -10,16 +10,20 @@
|
||||||
|
|
||||||
namespace LAMPMainWidget {
|
namespace LAMPMainWidget {
|
||||||
|
|
||||||
void
|
/// <summary>
|
||||||
MapCanvasMap::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) {
|
/// 重写paint函数,绘制图层的内容
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="painter"></param>
|
||||||
|
/// <param name="option"></param>
|
||||||
|
/// <param name="widget"></param>
|
||||||
|
void MapCanvasMap::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) {
|
||||||
if (!mLayer->provider().hasContent()) {
|
if (!mLayer->provider().hasContent()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
painter->drawImage(mViewExtent.topLeft(), mLayer->provider().preparedImage());
|
painter->drawImage(mViewExtent.topLeft(), mLayer->provider().preparedImage());
|
||||||
}
|
}
|
||||||
|
|
||||||
QRectF
|
QRectF MapCanvasMap::boundingRect() const {
|
||||||
MapCanvasMap::boundingRect() const {
|
|
||||||
auto width = mViewExtent.size().width();
|
auto width = mViewExtent.size().width();
|
||||||
auto height = mViewExtent.size().height();
|
auto height = mViewExtent.size().height();
|
||||||
return mViewExtent + QMarginsF(1024, 1024, 1024, 1024);
|
return mViewExtent + QMarginsF(1024, 1024, 1024, 1024);
|
||||||
|
|
|
@ -16,7 +16,7 @@ class MapCanvasMap : public QGraphicsItem {
|
||||||
~MapCanvasMap() override = default;
|
~MapCanvasMap() override = default;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
|
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; //图层绘制函数
|
||||||
|
|
||||||
QRectF boundingRect() const override;
|
QRectF boundingRect() const override;
|
||||||
|
|
||||||
|
|
|
@ -5,30 +5,28 @@
|
||||||
|
|
||||||
namespace LAMPMainWidget {
|
namespace LAMPMainWidget {
|
||||||
|
|
||||||
size_t
|
size_t writeData(void* content, size_t size, size_t nmemb, void* userp) {
|
||||||
writeData(void *content, size_t size, size_t nmemb, void *userp) {
|
size_t realSize{ size * nmemb };
|
||||||
size_t realSize{size * nmemb};
|
auto userRes = static_cast<QByteArray*>(userp);
|
||||||
auto userRes = static_cast<QByteArray *>(userp);
|
|
||||||
if (!userRes) {
|
if (!userRes) {
|
||||||
qDebug() << "无效的数据存储对象";
|
qDebug() << "无效的数据存储对象";
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
userRes->append(static_cast<char *>(content), int(realSize));
|
userRes->append(static_cast<char*>(content), int(realSize));
|
||||||
|
|
||||||
return realSize;
|
return realSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString Network::kUserAgent{"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"};
|
const QString Network::kUserAgent{ "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0" };
|
||||||
|
|
||||||
QByteArray
|
QByteArray Network::httpRequest(const QString& url) {
|
||||||
Network::httpRequest(const QString &url) {
|
|
||||||
QByteArray result{};
|
QByteArray result{};
|
||||||
if (url.isEmpty()) {
|
if (url.isEmpty()) {
|
||||||
qDebug() << QString("url为空");
|
qDebug() << QString("url为空");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CURL *curl = curl_easy_init();
|
CURL* curl = curl_easy_init();
|
||||||
if (!curl) {
|
if (!curl) {
|
||||||
qDebug() << "无法初始化curl句柄";
|
qDebug() << "无法初始化curl句柄";
|
||||||
return result;
|
return result;
|
||||||
|
@ -48,19 +46,18 @@ Network::httpRequest(const QString &url) {
|
||||||
curl_easy_cleanup(curl);
|
curl_easy_cleanup(curl);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray
|
QByteArray Network::httpsRequest(const QString& url) {
|
||||||
Network::httpsRequest(const QString &url) {
|
|
||||||
QByteArray result{};
|
QByteArray result{};
|
||||||
if (url.isEmpty()) {
|
if (url.isEmpty()) {
|
||||||
qDebug() << QString("url为空");
|
qDebug() << QString(u8"url为空");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CURL *curl = curl_easy_init();
|
CURL* curl = curl_easy_init();
|
||||||
if (!curl) {
|
if (!curl) {
|
||||||
qDebug() << "无法初始化curl句柄";
|
qDebug() << u8"无法初始化curl句柄";
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,13 +70,13 @@ Network::httpsRequest(const QString &url) {
|
||||||
|
|
||||||
CURLcode res = curl_easy_perform(curl);
|
CURLcode res = curl_easy_perform(curl);
|
||||||
if (CURLE_OK != res) {
|
if (CURLE_OK != res) {
|
||||||
qDebug() << QString("%1 =>请求异常, %2").arg(url).arg(curl_easy_strerror(res));
|
qDebug() << QString(u8"%1 =>请求异常, %2").arg(url).arg(curl_easy_strerror(res));
|
||||||
result.clear(); // 请求失败时,清空接受到的数据
|
result.clear(); // 请求失败时,清空接受到的数据
|
||||||
}
|
}
|
||||||
|
|
||||||
curl_easy_cleanup(curl);
|
curl_easy_cleanup(curl);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,8 +17,7 @@
|
||||||
|
|
||||||
namespace LAMPMainWidget
|
namespace LAMPMainWidget
|
||||||
{
|
{
|
||||||
void
|
void DownloadTask::run()
|
||||||
DownloadTask::run()
|
|
||||||
{
|
{
|
||||||
auto currentLayer = dynamic_cast<const TmsLayer*>(mTaskInfo.layer);
|
auto currentLayer = dynamic_cast<const TmsLayer*>(mTaskInfo.layer);
|
||||||
auto provider = dynamic_cast<const TmsProvider*>(¤tLayer->provider());
|
auto provider = dynamic_cast<const TmsProvider*>(¤tLayer->provider());
|
||||||
|
@ -53,14 +52,13 @@ namespace LAMPMainWidget
|
||||||
double progress = static_cast<double>(completed) / count;
|
double progress = static_cast<double>(completed) / count;
|
||||||
auto progessStr = QString("%1").arg(progress * 100);
|
auto progessStr = QString("%1").arg(progress * 100);
|
||||||
mTaskInfo.display->takeItem(mRowId, 4);
|
mTaskInfo.display->takeItem(mRowId, 4);
|
||||||
mTaskInfo.display->setItem(mRowId, 4,new QTableWidgetItem(QString("%1").arg(progress * 100)));
|
mTaskInfo.display->setItem(mRowId, 4, new QTableWidgetItem(QString("%1").arg(progress * 100)));
|
||||||
// mTaskInfo.display->resizeColumnsToContents();
|
// mTaskInfo.display->resizeColumnsToContents();
|
||||||
// mTaskInfo.display->horizontalHeader()->setStretchLastSection(true);
|
// mTaskInfo.display->horizontalHeader()->setStretchLastSection(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void DownloadTask::generateCommonRow()
|
||||||
DownloadTask::generateCommonRow()
|
|
||||||
{
|
{
|
||||||
auto provider = dynamic_cast<const TmsProvider*>(&mTaskInfo.layer->provider());
|
auto provider = dynamic_cast<const TmsProvider*>(&mTaskInfo.layer->provider());
|
||||||
mRowId = mTaskInfo.display->rowCount();
|
mRowId = mTaskInfo.display->rowCount();
|
||||||
|
@ -71,24 +69,21 @@ namespace LAMPMainWidget
|
||||||
mTaskInfo.display->setItem(mRowId, 3, new QTableWidgetItem(provider->id()));
|
mTaskInfo.display->setItem(mRowId, 3, new QTableWidgetItem(provider->id()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void DownloadTask::generateErrorRow()
|
||||||
DownloadTask::generateErrorRow()
|
|
||||||
{
|
{
|
||||||
generateCommonRow();
|
generateCommonRow();
|
||||||
mTaskInfo.display->setItem(mRowId, 4, new QTableWidgetItem("任务新建失败"));
|
mTaskInfo.display->setItem(mRowId, 4, new QTableWidgetItem("任务新建失败"));
|
||||||
mTaskInfo.display->resizeColumnsToContents();
|
mTaskInfo.display->resizeColumnsToContents();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void DownloadTask::generateSuccessRow()
|
||||||
DownloadTask::generateSuccessRow()
|
|
||||||
{
|
{
|
||||||
generateCommonRow();
|
generateCommonRow();
|
||||||
mTaskInfo.display->setItem(mRowId, 4, new QTableWidgetItem("0.0%"));
|
mTaskInfo.display->setItem(mRowId, 4, new QTableWidgetItem("0.0%"));
|
||||||
mTaskInfo.display->resizeColumnsToContents();
|
mTaskInfo.display->resizeColumnsToContents();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString
|
QString DownloadTask::getExtentStr()
|
||||||
DownloadTask::getExtentStr()
|
|
||||||
{
|
{
|
||||||
auto leftTop = mTaskInfo.extent.topLeft();
|
auto leftTop = mTaskInfo.extent.topLeft();
|
||||||
auto rightBottom = mTaskInfo.extent.bottomRight();
|
auto rightBottom = mTaskInfo.extent.bottomRight();
|
||||||
|
@ -112,8 +107,7 @@ namespace LAMPMainWidget
|
||||||
delete mUi;
|
delete mUi;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void TaskWindow::setupWindow()
|
||||||
TaskWindow::setupWindow()
|
|
||||||
{
|
{
|
||||||
setFixedSize(size());
|
setFixedSize(size());
|
||||||
auto currentLayer = dynamic_cast<const TmsLayer*>(mParent->mMapConvas->currentLayer());
|
auto currentLayer = dynamic_cast<const TmsLayer*>(mParent->mMapConvas->currentLayer());
|
||||||
|
@ -129,8 +123,7 @@ namespace LAMPMainWidget
|
||||||
QString("%1, %2").arg(mParent->mRightBottom.x()).arg(mParent->mRightBottom.y()));
|
QString("%1, %2").arg(mParent->mRightBottom.x()).arg(mParent->mRightBottom.y()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void TaskWindow::setupAction()
|
||||||
TaskWindow::setupAction()
|
|
||||||
{
|
{
|
||||||
QObject::connect(mUi->exitBtn, &QPushButton::clicked, this, &TaskWindow::close);
|
QObject::connect(mUi->exitBtn, &QPushButton::clicked, this, &TaskWindow::close);
|
||||||
QObject::connect(mUi->createBtn, &QPushButton::clicked, this, &TaskWindow::createTask);
|
QObject::connect(mUi->createBtn, &QPushButton::clicked, this, &TaskWindow::createTask);
|
||||||
|
@ -140,8 +133,7 @@ namespace LAMPMainWidget
|
||||||
this, &TaskWindow::setupZoomValue);
|
this, &TaskWindow::setupZoomValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void TaskWindow::createTask()
|
||||||
TaskWindow::createTask()
|
|
||||||
{
|
{
|
||||||
if (!taskInfoCheck()) {
|
if (!taskInfoCheck()) {
|
||||||
return;
|
return;
|
||||||
|
@ -162,12 +154,11 @@ namespace LAMPMainWidget
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void TaskWindow::setupSaveDir()
|
||||||
TaskWindow::setupSaveDir()
|
|
||||||
{
|
{
|
||||||
auto saveDir = QFileDialog::getExistingDirectory(dynamic_cast<QWidget*>(this), "存储路径选择");
|
auto saveDir = QFileDialog::getExistingDirectory(dynamic_cast<QWidget*>(this), "存储路径选择");
|
||||||
if (saveDir.isEmpty()) {
|
if (saveDir.isEmpty()) {
|
||||||
qWarning() << "未选择存储路径";
|
qWarning() << u8"未选择存储路径";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,15 +166,13 @@ namespace LAMPMainWidget
|
||||||
mUi->saveDirText->setText(mSavePath);
|
mUi->saveDirText->setText(mSavePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void TaskWindow::setupTaskName(const QString& text)
|
||||||
TaskWindow::setupTaskName(const QString& text)
|
|
||||||
{
|
{
|
||||||
qDebug() << "任务名=>" << text;
|
qWarning() << u8"任务名=>" << text;
|
||||||
mTaskName = text;
|
mTaskName = text;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool TaskWindow::taskInfoCheck()
|
||||||
TaskWindow::taskInfoCheck()
|
|
||||||
{
|
{
|
||||||
if (mTaskName.isEmpty()) {
|
if (mTaskName.isEmpty()) {
|
||||||
QMessageBox::critical(dynamic_cast<QWidget*>(this), "错误", "任务名称为空");
|
QMessageBox::critical(dynamic_cast<QWidget*>(this), "错误", "任务名称为空");
|
||||||
|
@ -198,11 +187,10 @@ namespace LAMPMainWidget
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void TaskWindow::setupZoomValue(int index)
|
||||||
TaskWindow::setupZoomValue(int index)
|
|
||||||
{
|
{
|
||||||
auto zoom = mUi->zoomValueCbx->itemData(index).toInt();
|
auto zoom = mUi->zoomValueCbx->itemData(index).toInt();
|
||||||
qDebug() << "设置下载任务zoom值=>" << zoom;
|
qWarning() << u8"设置下载任务zoom值=>" << zoom;
|
||||||
mZoomValue = zoom;
|
mZoomValue = zoom;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,8 +18,7 @@ namespace LAMPMainWidget {
|
||||||
setProvider(TmsProviderFactory::create(provider));
|
setProvider(TmsProviderFactory::create(provider));
|
||||||
}
|
}
|
||||||
|
|
||||||
double
|
double TmsLayer::resolution() const {
|
||||||
TmsLayer::resolution() const {
|
|
||||||
auto pd = dynamic_cast<const TmsProvider*>(&provider());
|
auto pd = dynamic_cast<const TmsProvider*>(&provider());
|
||||||
auto sz = pd->tileSize();
|
auto sz = pd->tileSize();
|
||||||
double length = crs().extent().width();
|
double length = crs().extent().width();
|
||||||
|
@ -32,8 +31,7 @@ namespace LAMPMainWidget {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
QRectF
|
QRectF TmsLayer::extent() const {
|
||||||
TmsLayer::extent() const {
|
|
||||||
auto pd = dynamic_cast<const TmsProvider*>(&provider());
|
auto pd = dynamic_cast<const TmsProvider*>(&provider());
|
||||||
QSize sz = pd->tileSize();
|
QSize sz = pd->tileSize();
|
||||||
|
|
||||||
|
@ -41,14 +39,13 @@ namespace LAMPMainWidget {
|
||||||
int height = power2(zoomValue()) * sz.height();
|
int height = power2(zoomValue()) * sz.height();
|
||||||
|
|
||||||
//#ifdef DEBUG
|
//#ifdef DEBUG
|
||||||
// qDebug() << "layer extent=>{width:" << width << ", height:" << height << "}";
|
qDebug() << "layer extent=>{width:" << width << ", height:" << height << "}";
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
return { 0, 0, static_cast<qreal>(width), static_cast<qreal>(height) };
|
return { 0, 0, static_cast<qreal>(width), static_cast<qreal>(height) };
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void TmsLayer::setZoomValue(int zoom) {
|
||||||
TmsLayer::setZoomValue(int zoom) {
|
|
||||||
int zoomValue{};
|
int zoomValue{};
|
||||||
if (zoom <= minZoom()) {
|
if (zoom <= minZoom()) {
|
||||||
zoomValue = minZoom();
|
zoomValue = minZoom();
|
||||||
|
@ -63,8 +60,7 @@ namespace LAMPMainWidget {
|
||||||
mZoomValue = zoomValue;
|
mZoomValue = zoomValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool TmsLayer::parseTiles(const QRectF& rect, int zoom, QHash<QPoint, QString>& tiles, QSize& size) const {
|
||||||
TmsLayer::parseTiles(const QRectF& rect, int zoom, QHash<QPoint, QString>& tiles, QSize& size) const {
|
|
||||||
|
|
||||||
auto pd = dynamic_cast<const TmsProvider*>(&provider());
|
auto pd = dynamic_cast<const TmsProvider*>(&provider());
|
||||||
auto tileSize = pd->tileSize();
|
auto tileSize = pd->tileSize();
|
||||||
|
@ -80,7 +76,7 @@ namespace LAMPMainWidget {
|
||||||
auto yMin = qFloor(mapLeftTop.y() / tileSize.height());
|
auto yMin = qFloor(mapLeftTop.y() / tileSize.height());
|
||||||
auto yMax = qFloor(mapRightBottom.y() / tileSize.height());
|
auto yMax = qFloor(mapRightBottom.y() / tileSize.height());
|
||||||
if ((xMin > xMax) || (yMin > yMax)) {
|
if ((xMin > xMax) || (yMin > yMax)) {
|
||||||
qDebug() << "下载区边界错误";
|
qDebug() << u8"下载区边界错误";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,26 +4,32 @@
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QSqlQuery>
|
#include <QSqlQuery>
|
||||||
#include <QSqlError>
|
#include <QSqlError>
|
||||||
|
#include <QPointer>
|
||||||
#include <tmsprovider.h>
|
#include <tmsprovider.h>
|
||||||
#include <network.h>
|
#include <network.h>
|
||||||
|
#include <iostream>
|
||||||
#pragma execution_character_set("utf-8")
|
#pragma execution_character_set("utf-8")
|
||||||
|
|
||||||
namespace LAMPMainWidget
|
namespace LAMPMainWidget
|
||||||
{
|
{
|
||||||
TileDownloadTask::TileDownloadTask(TileInfo tile, QObject* parent)
|
TileDownloadTask::TileDownloadTask(TileInfo tile, tileReadyCallback cb, QObject* parent)
|
||||||
: QObject(parent),
|
: QObject(parent),
|
||||||
mTile(std::move(tile))
|
mTile(std::move(tile)),
|
||||||
|
mCallback(cb)
|
||||||
{
|
{
|
||||||
|
// 程序初始化时注册(如main函数或类构造函数)
|
||||||
|
qRegisterMetaType<TileInfo>("TileInfo");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void TileDownloadTask::run()
|
||||||
TileDownloadTask::run()
|
|
||||||
{
|
{
|
||||||
Network web{};
|
Network web{};
|
||||||
QByteArray data = web.httpsRequest(mTile.url);
|
QByteArray data = web.httpsRequest(mTile.url);
|
||||||
mTile.data = data;
|
mTile.data = data;
|
||||||
tileReady(mTile);
|
if (mCallback) {
|
||||||
|
mCallback(mTile);
|
||||||
|
}
|
||||||
|
else {}
|
||||||
}
|
}
|
||||||
|
|
||||||
TmsProvider::TmsProvider(QObject* parent)
|
TmsProvider::TmsProvider(QObject* parent)
|
||||||
|
@ -42,13 +48,12 @@ namespace LAMPMainWidget
|
||||||
delete mImage;
|
delete mImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool TmsProvider::initCache()
|
||||||
TmsProvider::initCache()
|
|
||||||
{
|
{
|
||||||
mDbConn = QSqlDatabase::addDatabase("QSQLITE", id());
|
mDbConn = QSqlDatabase::addDatabase("QSQLITE", id());
|
||||||
mDbConn.setDatabaseName(mDbName);
|
mDbConn.setDatabaseName(mDbName);
|
||||||
if (!mDbConn.open()) {
|
if (!mDbConn.open()) {
|
||||||
qCritical() << "缓存数据库打开失败";
|
std::cout << u8"缓存数据库打开失败";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,8 +76,7 @@ namespace LAMPMainWidget
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray
|
QByteArray TmsProvider::getCache(const QPoint& pos, int zoom)
|
||||||
TmsProvider::getCache(const QPoint& pos, int zoom)
|
|
||||||
{
|
{
|
||||||
QByteArray res{};
|
QByteArray res{};
|
||||||
mDbConn.open();
|
mDbConn.open();
|
||||||
|
@ -87,7 +91,7 @@ namespace LAMPMainWidget
|
||||||
select.bindValue(":zoom", zoom);
|
select.bindValue(":zoom", zoom);
|
||||||
select.bindValue(":position", QString("%1:%2").arg(pos.x()).arg(pos.y()));
|
select.bindValue(":position", QString("%1:%2").arg(pos.x()).arg(pos.y()));
|
||||||
if (!select.exec()) {
|
if (!select.exec()) {
|
||||||
qDebug() << pos << "查询失败=>" << select.lastError().text();
|
std::cout << pos.x()<<","<<pos.y() << "查询失败=>" << select.lastError().text().toUtf8().constData() << std::endl;
|
||||||
mDbConn.close();
|
mDbConn.close();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -101,11 +105,10 @@ namespace LAMPMainWidget
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool TmsProvider::addCache(const QPoint& pos, int zoom, QByteArray data)
|
||||||
TmsProvider::addCache(const QPoint& pos, int zoom, QByteArray data)
|
|
||||||
{
|
{
|
||||||
if (data.isEmpty()) {
|
if (data.isEmpty()) {
|
||||||
qWarning() << "瓦片数据为空";
|
std::cout << "瓦片数据为空";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
mDbConn.open();
|
mDbConn.open();
|
||||||
|
@ -121,7 +124,7 @@ namespace LAMPMainWidget
|
||||||
sql.bindValue(":data", data);
|
sql.bindValue(":data", data);
|
||||||
|
|
||||||
if (!sql.exec()) {
|
if (!sql.exec()) {
|
||||||
qCritical() << pos << "=>" << sql.lastError().text();
|
std::cout << pos.x() << "," << pos.y() << "=>" << sql.lastError().text().toUtf8().constData() << std::endl;
|
||||||
mDbConn.close();
|
mDbConn.close();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -130,15 +133,13 @@ namespace LAMPMainWidget
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool TmsProvider::cacheContains(const QPoint& pos, int zoom)
|
||||||
TmsProvider::cacheContains(const QPoint& pos, int zoom)
|
|
||||||
{
|
{
|
||||||
QByteArray res = getCache(pos, zoom);
|
QByteArray res = getCache(pos, zoom);
|
||||||
return !res.isEmpty();
|
return !res.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void TmsProvider::createTask(const QRectF& rect, int zoom)
|
||||||
TmsProvider::createTask(const QRectF& rect, int zoom)
|
|
||||||
{
|
{
|
||||||
newImage(rect);
|
newImage(rect);
|
||||||
|
|
||||||
|
@ -164,16 +165,30 @@ namespace LAMPMainWidget
|
||||||
tileReady(tile);
|
tileReady(tile);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
/* 原始写法遇到了跨线程信号槽失效问题,这里修改为回调函数方式
|
||||||
auto* task = new TileDownloadTask(tile);
|
auto* task = new TileDownloadTask(tile);
|
||||||
QObject::connect(task, &TileDownloadTask::tileReady, this, &TmsProvider::tileReady);
|
if (!QObject::connect(task, SIGNAL(tileReady(TileInfo)), this, SLOT(tileReady(TileInfo)))) {
|
||||||
|
qDebug() << "连接失败:" << QObject::tr(qPrintable(Q_FUNC_INFO));
|
||||||
|
}
|
||||||
|
|
||||||
QThreadPool::globalInstance()->start(task);
|
QThreadPool::globalInstance()->start(task);
|
||||||
|
*/
|
||||||
|
// 回调函数版本
|
||||||
|
QPointer<TmsProvider> safeThis(this);
|
||||||
|
auto* task = new TileDownloadTask(tile, [safeThis]( TileInfo info) {
|
||||||
|
if (safeThis) { // 自动检测对象是否存活
|
||||||
|
QMetaObject::invokeMethod(safeThis.data(), [safeThis, info] {
|
||||||
|
safeThis->tileReady(info);
|
||||||
|
}, Qt::QueuedConnection); // 强制主线程执行[6](@ref)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
QThreadPool::globalInstance()->start(task);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void TmsProvider::tileReady(TileInfo tile)
|
||||||
TmsProvider::tileReady(TileInfo tile)
|
|
||||||
{
|
{
|
||||||
if (!cacheContains(tile.position, tile.zoom)) {
|
if (!cacheContains(tile.position, tile.zoom)) {
|
||||||
addCache(tile.position, tile.zoom, tile.data);
|
addCache(tile.position, tile.zoom, tile.data);
|
||||||
|
@ -190,8 +205,7 @@ namespace LAMPMainWidget
|
||||||
painter.drawImage(QPointF(xPos, yPos), img);
|
painter.drawImage(QPointF(xPos, yPos), img);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void TmsProvider::newImage(const QRectF& rect)
|
||||||
TmsProvider::newImage(const QRectF& rect)
|
|
||||||
{
|
{
|
||||||
QSize imgSize{ int(rect.width()), int(rect.height()) };
|
QSize imgSize{ int(rect.width()), int(rect.height()) };
|
||||||
if (!mImage || imgSize != mImage->size()) {
|
if (!mImage || imgSize != mImage->size()) {
|
||||||
|
|
|
@ -27,7 +27,8 @@ namespace LAMPMainWidget
|
||||||
QString url;
|
QString url;
|
||||||
QByteArray data;
|
QByteArray data;
|
||||||
};
|
};
|
||||||
|
// 在结构体定义后声明
|
||||||
|
Q_DECLARE_METATYPE(TileInfo);
|
||||||
/*
|
/*
|
||||||
* 异步执行的瓦片下载任务
|
* 异步执行的瓦片下载任务
|
||||||
*/
|
*/
|
||||||
|
@ -39,7 +40,9 @@ namespace LAMPMainWidget
|
||||||
void tileReady(TileInfo tile);
|
void tileReady(TileInfo tile);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit TileDownloadTask(TileInfo tile, QObject* parent = nullptr);
|
using tileReadyCallback = std::function<void( TileInfo )>;
|
||||||
|
|
||||||
|
explicit TileDownloadTask(TileInfo tile, tileReadyCallback=nullptr, QObject* parent = nullptr);
|
||||||
TileDownloadTask(const TileDownloadTask& other) = delete;
|
TileDownloadTask(const TileDownloadTask& other) = delete;
|
||||||
TileDownloadTask(TileDownloadTask&& other) = delete;
|
TileDownloadTask(TileDownloadTask&& other) = delete;
|
||||||
TileDownloadTask& operator=(const TileDownloadTask& other) = delete;
|
TileDownloadTask& operator=(const TileDownloadTask& other) = delete;
|
||||||
|
@ -47,11 +50,15 @@ namespace LAMPMainWidget
|
||||||
|
|
||||||
~TileDownloadTask() override = default;
|
~TileDownloadTask() override = default;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void run() override;
|
void run() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
TileInfo mTile;
|
TileInfo mTile;
|
||||||
|
private:
|
||||||
|
tileReadyCallback mCallback;
|
||||||
};
|
};
|
||||||
|
|
||||||
class TmsProvider : public LayerProvider
|
class TmsProvider : public LayerProvider
|
||||||
|
|
|
@ -4,8 +4,7 @@
|
||||||
|
|
||||||
namespace LAMPMainWidget
|
namespace LAMPMainWidget
|
||||||
{
|
{
|
||||||
PointXY
|
PointXY WebMercator::forward(const LAMPMainWidget::PointXY& point) const
|
||||||
WebMercator::forward(const LAMPMainWidget::PointXY& point) const
|
|
||||||
{
|
{
|
||||||
PointXY result{};
|
PointXY result{};
|
||||||
PointXY originXy = CRS::forward(point);
|
PointXY originXy = CRS::forward(point);
|
||||||
|
@ -17,8 +16,7 @@ namespace LAMPMainWidget
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
PointXY
|
PointXY WebMercator::inverse(const LAMPMainWidget::PointXY& point) const
|
||||||
WebMercator::inverse(const LAMPMainWidget::PointXY& point) const
|
|
||||||
{
|
{
|
||||||
PointXY originXy{};
|
PointXY originXy{};
|
||||||
QSizeF sz = extent().size();
|
QSizeF sz = extent().size();
|
||||||
|
@ -29,14 +27,12 @@ namespace LAMPMainWidget
|
||||||
return CRS::inverse(originXy);
|
return CRS::inverse(originXy);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString
|
QString WebMercator::proj4Cvt() const
|
||||||
WebMercator::proj4Cvt() const
|
|
||||||
{
|
{
|
||||||
return QString{"+proj=webmerc +datum=WGS84"};
|
return QString{"+proj=webmerc +datum=WGS84"};
|
||||||
}
|
}
|
||||||
|
|
||||||
QString
|
QString WebMercator::wktDef() const
|
||||||
WebMercator::wktDef() const
|
|
||||||
{
|
{
|
||||||
return QString{
|
return QString{
|
||||||
R"(
|
R"(
|
||||||
|
|
|
@ -24,6 +24,12 @@
|
||||||
<Filter Include="RasterLayer">
|
<Filter Include="RasterLayer">
|
||||||
<UniqueIdentifier>{1a65f538-c16c-4824-895f-105eb2fc502e}</UniqueIdentifier>
|
<UniqueIdentifier>{1a65f538-c16c-4824-895f-105eb2fc502e}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
<Filter Include="gaodelayer">
|
||||||
|
<UniqueIdentifier>{7c9ae80d-da53-409c-805d-a3cc2c821574}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="OpenstreetLayer">
|
||||||
|
<UniqueIdentifier>{bce9c1c4-57d0-42e5-bd9e-681fe17e9f00}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<QtRcc Include="RasterMainWidgetGUI.qrc">
|
<QtRcc Include="RasterMainWidgetGUI.qrc">
|
||||||
|
@ -37,9 +43,6 @@
|
||||||
<ClCompile Include="RasterMainWidget\crs.cpp">
|
<ClCompile Include="RasterMainWidget\crs.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="RasterMainWidget\gaodenormalprovider.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="RasterMainWidget\imgwriter.cpp">
|
<ClCompile Include="RasterMainWidget\imgwriter.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -91,9 +94,6 @@
|
||||||
<ClCompile Include="RasterMainWidget\network.cpp">
|
<ClCompile Include="RasterMainWidget\network.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="RasterMainWidget\ostnormalprovider.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="RasterMainWidget\pointxy.cpp">
|
<ClCompile Include="RasterMainWidget\pointxy.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -124,20 +124,17 @@
|
||||||
<ClCompile Include="PrintMessage_C.cpp">
|
<ClCompile Include="PrintMessage_C.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="RasterMainWidget\gaodenormalprovider.cpp">
|
||||||
|
<Filter>gaodelayer</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="RasterMainWidget\ostnormalprovider.cpp">
|
||||||
|
<Filter>OpenstreetLayer</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="RasterMainWidget\crs.h">
|
<ClInclude Include="RasterMainWidget\crs.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="RasterMainWidget\gaodesatelliteprovider.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="RasterMainWidget\googlechinanormalprovider.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="RasterMainWidget\googlechinasatelliteprovider.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="RasterMainWidget\imgwriter.h">
|
<ClInclude Include="RasterMainWidget\imgwriter.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
@ -213,20 +210,23 @@
|
||||||
<ClInclude Include="RasterMainWidgetGUICFunAPI.h">
|
<ClInclude Include="RasterMainWidgetGUICFunAPI.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="RasterMainWidget\gaodesatelliteprovider.h">
|
||||||
|
<Filter>gaodelayer</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="RasterMainWidget\googlechinanormalprovider.h">
|
||||||
|
<Filter>gaodelayer</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="RasterMainWidget\googlechinasatelliteprovider.h">
|
||||||
|
<Filter>gaodelayer</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<QtMoc Include="RasterMainWidget\gaodenormalprovider.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</QtMoc>
|
|
||||||
<QtMoc Include="RasterMainWidget\layerprovider.h">
|
<QtMoc Include="RasterMainWidget\layerprovider.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</QtMoc>
|
</QtMoc>
|
||||||
<QtMoc Include="RasterMainWidget\mapcanvas.h">
|
<QtMoc Include="RasterMainWidget\mapcanvas.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</QtMoc>
|
</QtMoc>
|
||||||
<QtMoc Include="RasterMainWidget\ostnormalprovider.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</QtMoc>
|
|
||||||
<QtMoc Include="RasterMainWidget\RasterMainWidget.h">
|
<QtMoc Include="RasterMainWidget\RasterMainWidget.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</QtMoc>
|
</QtMoc>
|
||||||
|
@ -242,6 +242,12 @@
|
||||||
<QtMoc Include="RasterWidgetMessageShow.h">
|
<QtMoc Include="RasterWidgetMessageShow.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</QtMoc>
|
</QtMoc>
|
||||||
|
<QtMoc Include="RasterMainWidget\gaodenormalprovider.h">
|
||||||
|
<Filter>gaodelayer</Filter>
|
||||||
|
</QtMoc>
|
||||||
|
<QtMoc Include="RasterMainWidget\ostnormalprovider.h">
|
||||||
|
<Filter>OpenstreetLayer</Filter>
|
||||||
|
</QtMoc>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="RasterMainWidget\proj.db" />
|
<None Include="RasterMainWidget\proj.db" />
|
||||||
|
|
Loading…
Reference in New Issue