提交 2d883e6d 编写于 作者: 丁劲犇's avatar 丁劲犇 😸

enable multi-tiles layer support .

------------------------------------
1.declare multi tile layers in ini file:
[tiles]
name0=OSM
name1=google
name2=bing

2.set tile server addresses, Image Alpha Channel in UI
上级 df2065f0
......@@ -9,6 +9,8 @@
#include <QPluginLoader>
#include <QFileDialog>
#include <QSettings>
#include <QSet>
#include <QList>
#include <QMessageBox>
#include "osmtiles/viewer_interface.h"
#include "interface_utils.h"
......@@ -38,27 +40,46 @@ osm_frame_widget::osm_frame_widget(QWidget *parent) :
connect(ui->dial_QTV_zoom,&QDial::valueChanged,ui->widget_QTV_mainMap,&tilesviewer::setLevel);
//add an osm layer
layer_tiles * pOSMTile = new layer_tiles(ui->widget_QTV_mainMap);
pOSMTile->set_name("OSM");
pOSMTile->set_active(true);
pOSMTile->set_visible(true);
//pOSMTile->connectToTilesServer(true);
AppendLayer(QCoreApplication::applicationFilePath(),pOSMTile);
/*
//add an sat layer
layer_tiles * pSatTile = new layer_tiles(ui->widget_QTV_mainMap);
pSatTile->set_name("SAT");
//pSatTile->connectToTilesServer(true);
AppendLayer(QCoreApplication::applicationFilePath(),pSatTile);
*/
QSettings settings(QCoreApplication::applicationFilePath()+".ini",QSettings::IniFormat);
QSet<QString> set_tilesNames;
QList<QString> list_tilesNames;
for (int i=0;i<8;++i)
{
QString lk = QString("tiles/name%1").arg(i);
QString nk = settings.value(lk).toString().trimmed();
if (nk.size() && set_tilesNames.contains(nk)==false)
{
set_tilesNames.insert(nk);
list_tilesNames.push_back(nk);
}
}
if (set_tilesNames.empty())
{
set_tilesNames.insert("OSM");
list_tilesNames.push_back("OSM");
}
layer_tiles * pLastTileLayer = nullptr;
int tc = 0;
foreach(QString layerNameT, list_tilesNames)
{
//add tile layers
layer_tiles * pTile = new layer_tiles(ui->widget_QTV_mainMap);
pTile->set_name(layerNameT);
pTile->set_active(true);
pTile->set_visible(true);
AppendLayer(QCoreApplication::applicationFilePath(),pTile);
pLastTileLayer = pTile;
QString lk = QString("tiles/name%1").arg(tc++);
settings.setValue(lk,layerNameT);
}
//add single layer to browser
layer_browser * pOSMTileBr = new layer_browser(ui->browserView);
pOSMTileBr->set_name("OSM");
pOSMTileBr->set_name(pLastTileLayer->get_name());
pOSMTileBr->load_initial_plugin(QCoreApplication::applicationFilePath(),ui->browserView);
ui->browserView->addLayer(pOSMTileBr);
//connect center change event
connect (ui->widget_QTV_mainMap,&tilesviewer::evt_center_changed,ui->browserView,&tilesviewer::setBrCenterLLA);
connect (ui->browserView,&tilesviewer::evt_center_changed,ui->widget_QTV_mainMap,&tilesviewer::setCenterLLA);
......@@ -77,7 +98,7 @@ osm_frame_widget::osm_frame_widget(QWidget *parent) :
ui->tab_map->installEventFilter(this);
//adjust layers, make exclusive layrs being de-activated.
ui->widget_QTV_mainMap->adjust_layers(pOSMTile);
ui->widget_QTV_mainMap->adjust_layers(pLastTileLayer);
EnumPlugins();
UpdateLayerTable();
//Dock is closable
......
......@@ -84,6 +84,11 @@ namespace QTVOSM{
int nCurrRightX = ceil((nCenter_X+m_pViewer->windowWidth()/2)/256.0);
int nCurrBottomY = ceil((nCenter_Y+m_pViewer->windowHeight()/2)/256.0);
//Get Aplha paraments
const quint8 alphav = m_propPage->alphaValue();
QImage alphaMask(256,256,QImage::Format_Grayscale8);
if (alphav!=255)
alphaMask.fill(alphav);
//!2.4 a repeat from tileindx left to right.
for (int col = nCurrLeftX;col<=nCurrRightX;col++)
{
......@@ -111,6 +116,8 @@ namespace QTVOSM{
int tar_x = m_pViewer->windowWidth()/2-zero_offX+nTileOffX;
int tar_y = m_pViewer->windowHeight()/2-zero_offY+nTileOffY;
//bitblt
if (alphav!=255)
image_source.setAlphaChannel(alphaMask);
pPainter->drawImage(tar_x,tar_y,image_source);
}
}
......
......@@ -19,10 +19,12 @@ namespace QTVOSM{
QString strLocalCache = settings.value(QString("settings/LocalCache_%1").arg(layer->get_name()), QCoreApplication::applicationDirPath() +"/OSMCache").toString();
int nCacheExpireDays = settings.value(QString("settings/CacheExpireDays_%1").arg(layer->get_name()), 30).toInt();
int nAutoDownload = settings.value(QString("settings/nAutoDownload_%1").arg(layer->get_name()), 0).toInt();
int nAlpha = settings.value(QString("settings/nAlpha_%1").arg(layer->get_name()), 255).toInt();
ui->lineEdit_QTV_cacheFolder->setText(strLocalCache);
ui->lineEdit_QTV_addressUrl->setText(strServerURL);
ui->spinBox_QTV_cacheExpireDays->setValue(nCacheExpireDays);
ui->spinBox_QTV_Alpha->setValue(nAlpha);
this->setWindowTitle(layer->get_name());
//the pending tasks model
m_pPendingTasksModel = new QStandardItemModel(this);
......@@ -61,6 +63,10 @@ namespace QTVOSM{
m_pLayer->setServerUrl(ui->lineEdit_QTV_addressUrl->text());
m_pLayer->setCacheExpireDays(ui->spinBox_QTV_cacheExpireDays->value());
m_pLayer->UpdateLayer();
QSettings settings(QCoreApplication::applicationFilePath()+".ini",QSettings::IniFormat);
settings.setValue(QString("settings/nAlpha_%1").arg(m_pLayer->get_name()), ui->spinBox_QTV_Alpha->value() );
}
void layer_tiles_page::on_checkBox_QTV_connect_clicked(bool ps)
......@@ -74,4 +80,10 @@ namespace QTVOSM{
m_pPendingTasksModel->removeRows(0,m_pPendingTasksModel->rowCount()-128);
ui->listView_QTV_messages->scrollToBottom();
}
quint8 layer_tiles_page::alphaValue() const
{
return ui->spinBox_QTV_Alpha->value() % 256;
}
}
......@@ -23,6 +23,7 @@ namespace QTVOSM{
~layer_tiles_page();
//re-translat
void reTransUI();
quint8 alphaValue() const;
private:
Ui::layer_tiles_page *ui ;
layer_tiles * m_pLayer ;
......
......@@ -84,6 +84,23 @@
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_QTV_6">
<property name="text">
<string>Aplha</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox_QTV_Alpha">
<property name="maximum">
<number>255</number>
</property>
<property name="value">
<number>255</number>
</property>
</widget>
</item>
</layout>
</item>
<item>
......
......@@ -51,8 +51,9 @@ namespace QTVOSM{
QString strDir = tk.str_destinDir;
QString strFile = tk.str_destinFile;
//mkdir
QDir dir(strDir);
dir.mkpath(strDir);
QDir dir;
const QString abpath = dir.absoluteFilePath(tk.str_destinDir);
dir.mkpath(abpath);
//saveFile
QFile file(strDir+"/"+strFile);
if (file.open(QIODevice::WriteOnly)==true)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册