Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <multires_image/tile_set.h>
00031
00032
00033 #include <cmath>
00034 #include <cstdlib>
00035 #include <algorithm>
00036
00037
00038 #include <QFile>
00039 #include <QFileInfo>
00040 #include <QDir>
00041 #include <QString>
00042
00043 namespace multires_image
00044 {
00045 TileSet::TileSet(const std::string& geofile) :
00046 m_geo(geofile),
00047 m_extension("jpg")
00048 {
00049 }
00050
00051 TileSet::TileSet(const std::string& geofile, const std::string extension) :
00052 m_geo(geofile),
00053 m_extension(extension)
00054 {
00055 }
00056
00057 TileSet::TileSet(const swri_transform_util::GeoReference& georeference) :
00058 m_geo(georeference),
00059 m_extension("jpg")
00060 {
00061 }
00062
00063 TileSet::TileSet(const swri_transform_util::GeoReference& georeference,
00064 const std::string extension) :
00065 m_geo(georeference),
00066 m_extension(extension)
00067 {
00068 }
00069
00070 TileSet::~TileSet(void)
00071 {
00072
00073 for (unsigned int i = 0; i < m_layers.size(); i++)
00074 {
00075 delete m_layers[i];
00076 }
00077 }
00078
00079 bool TileSet::Load()
00080 {
00081 if (!m_geo.Load())
00082 {
00083 return false;
00084 }
00085
00086 m_cacheDir = m_geo.Path();
00087 m_width = m_geo.Width();
00088 m_height = m_geo.Height();
00089 m_tileSize = m_geo.TileSize();
00090 m_extension = m_geo.Extension();
00091
00092 float max_dim = std::max(m_width, m_height);
00093 m_layerCount = std::ceil(std::log(max_dim / m_tileSize) / std::log(2.0f)) + 1;
00094 m_layers.reserve(m_layerCount);
00095
00096
00097 QDir directory(m_cacheDir.c_str());
00098 if (!directory.exists())
00099 {
00100 return false;
00101 }
00102
00103
00104 for (int i = 0; i < m_layerCount; i++)
00105 {
00106 QString layerNum = QString::number(i);
00107
00108
00109 QDir layerDir(directory.absolutePath() + "/layer" + layerNum);
00110 if (!layerDir.exists(layerDir.absolutePath()))
00111 {
00112 return false;
00113 }
00114
00115
00116 m_layers.push_back(new TileSetLayer(m_geo, layerDir.absolutePath().toStdString(), m_tileSize, i));
00117
00118 if (!m_layers[i]->Load(m_extension))
00119 return false;
00120 }
00121
00122 return true;
00123 }
00124 }