[Marble-commits] KDE/kdeedu/marble/src
Bernhard Beschow
bbeschow at cs.tu-berlin.de
Sat May 1 13:17:56 CEST 2010
SVN commit 1121481 by beschow:
Introduce a ServerLayout class to produce download URLs from a TileId.
GeoSceneTexture uses ServerLayout to produces complete download URLs based on a TileId.
The relativeTileFileName() and themeStr() methods are moved from TileLoaderHelper to GeoSceneTexture for convenience.
REVIEW: 3588
(http://reviewboard.kde.org/r/3588/)
M +1 -0 lib/CMakeLists.txt
A lib/ServerLayout.cpp [License: LGPL]
A lib/ServerLayout.h [License: LGPL]
M +3 -3 lib/StackedTileLoader.cpp
M +3 -6 lib/TileLoader.cpp
M +0 -80 lib/TileLoaderHelper.cpp
M +0 -23 lib/TileLoaderHelper.h
M +18 -17 lib/geodata/handlers/dgml/DgmlStorageLayoutTagHandler.cpp
M +48 -18 lib/geodata/scene/GeoSceneTexture.cpp
M +13 -8 lib/geodata/scene/GeoSceneTexture.h
M +1 -0 tilecreator/CMakeLists.txt
--- trunk/KDE/kdeedu/marble/src/lib/CMakeLists.txt #1121480:1121481
@@ -126,6 +126,7 @@
EquirectScanlineTextureMapper.cpp
MercatorScanlineTextureMapper.cpp
DiscCache.cpp
+ ServerLayout.cpp
StoragePolicy.cpp
CacheStoragePolicy.cpp
FileStoragePolicy.cpp
--- trunk/KDE/kdeedu/marble/src/lib/StackedTileLoader.cpp #1121480:1121481
@@ -316,7 +316,7 @@
return texture->maximumTileLevel();
int maximumTileLevel = -1;
- QString tilepath = MarbleDirs::path( TileLoaderHelper::themeStr( texture ) );
+ QString tilepath = MarbleDirs::path( texture->themeStr() );
// mDebug() << "StackedTileLoader::maxPartialTileLevel tilepath" << tilepath;
QStringList leveldirs = QDir( tilepath ).entryList( QDir::AllDirs | QDir::NoSymLinks
| QDir::NoDotAndDotDot );
@@ -352,8 +352,8 @@
for ( int column = 0; noerr && column < levelZeroColumns; ++column ) {
for ( int row = 0; noerr && row < levelZeroRows; ++row ) {
- const QString tilepath = MarbleDirs::path( TileLoaderHelper::relativeTileFileName(
- texture, 0, column, row ));
+ const QString tilepath = MarbleDirs::path( texture->relativeTileFileName(
+ TileId( texture->sourceDir(), 0, column, row )));
noerr = QFile::exists( tilepath );
}
}
--- trunk/KDE/kdeedu/marble/src/lib/TileLoader.cpp #1121480:1121481
@@ -179,17 +179,14 @@
QString TileLoader::tileFileName( TileId const & tileId ) const
{
GeoSceneTexture const * const textureLayer = findTextureLayer( tileId );
- return MarbleDirs::path( TileLoaderHelper::relativeTileFileName
- ( textureLayer, tileId.zoomLevel(), tileId.x(), tileId.y() ));
+ return MarbleDirs::path( textureLayer->relativeTileFileName( tileId ));
}
void TileLoader::triggerDownload( TileId const & id, DownloadUsage const usage )
{
GeoSceneTexture * const textureLayer = findTextureLayer( id );
- QUrl const sourceUrl = TileLoaderHelper::downloadUrl( textureLayer, id.zoomLevel(), id.x(),
- id.y() );
- QString const destFileName = TileLoaderHelper::relativeTileFileName( textureLayer, id.zoomLevel(),
- id.x(), id.y() );
+ QUrl const sourceUrl = textureLayer->downloadUrl( id );
+ QString const destFileName = textureLayer->relativeTileFileName( id );
emit downloadTile( sourceUrl, destFileName, id.toString(), usage );
}
--- trunk/KDE/kdeedu/marble/src/lib/TileLoaderHelper.cpp #1121480:1121481
@@ -28,7 +28,6 @@
#include "MarbleDebug.h"
-#include "GeoSceneTexture.h"
#include "global.h"
namespace Marble
@@ -74,83 +73,4 @@
return (int)( std::log( (qreal)(column / levelZeroColumns) ) / std::log( (qreal)2.0 ) );
}
-QUrl TileLoaderHelper::downloadUrl( GeoSceneTexture *textureLayer, int zoomLevel, int x,
- int y )
-{
- QUrl tileUrl;
- if ( textureLayer ) {
- tileUrl = textureLayer->downloadUrl();
- QString path = tileUrl.path();
- const QString suffix = textureLayer->fileFormat().toLower();
-
- switch ( textureLayer->storageLayoutMode() ) {
- case GeoSceneTexture::Marble:
- path += relativeTileFileName( textureLayer, zoomLevel, x, y );
- break;
-
- case GeoSceneTexture::OpenStreetMap:
- path += QString( "%1/%2/%3.%4" ).arg( zoomLevel ).arg( x ).arg( y ).arg( suffix );
- break;
-
- case GeoSceneTexture::Custom:
- path += textureLayer->customStorageLayout();
- path.replace( "{zoomLevel}", QString::number( zoomLevel ) );
- path.replace( "{suffix}", suffix );
- path.replace( "{x}", QString::number( x ) );
- path.replace( "{y}", QString::number( y ) );
- break;
}
- tileUrl.setPath( path );
- }
- return tileUrl;
-}
-
-QString TileLoaderHelper::relativeTileFileName( GeoSceneTexture const * const textureLayer,
- int level, int x, int y )
-{
- QString relFileName;
- if ( textureLayer ) {
- const QString suffix = textureLayer->fileFormat().toLower();
- switch ( textureLayer->storageLayoutMode() ) {
- case GeoSceneTexture::Marble:
- relFileName = QString( "%1/%2/%3/%3_%4.%5" )
- .arg( themeStr( textureLayer ) )
- .arg( level )
- .arg( y, tileDigits, 10, QChar('0') )
- .arg( x, tileDigits, 10, QChar('0') )
- .arg( suffix );
- break;
- case GeoSceneTexture::OpenStreetMap:
- relFileName = QString( "%1/%2/%3/%4.%5" )
- .arg( themeStr( textureLayer ) )
- .arg( level )
- .arg( x )
- .arg( y )
- .arg( suffix );
- break;
-
- case GeoSceneTexture::Custom:
- relFileName = QString( "%1/%2/%3/%4.%5" )
- .arg( themeStr( textureLayer ) )
- .arg( level )
- .arg( x )
- .arg( y )
- .arg( suffix );
- break;
- }
- }
- return relFileName;
-}
-
-QString TileLoaderHelper::themeStr( GeoSceneTexture const * const textureLayer )
-{
- QString oldThemeStr;
-
- if ( textureLayer ) {
- oldThemeStr = "maps/" + textureLayer->sourceDir();
- }
-
- return oldThemeStr;
-}
-
-}
--- trunk/KDE/kdeedu/marble/src/lib/TileLoaderHelper.h #1121480:1121481
@@ -25,14 +25,9 @@
#ifndef MARBLE_TILELOADERHELPER_H
#define MARBLE_TILELOADERHELPER_H
-#include <QtCore/QString>
-#include <QtCore/QUrl>
-
namespace Marble
{
-class GeoSceneTexture;
-
namespace TileLoaderHelper
{
/**
@@ -78,24 +73,6 @@
* by the code which makes use of it.
*/
int columnToLevel( int levelZeroColumns, int column );
-
- /**
- * @brief Get the url for download of a tile.
- */
- QUrl downloadUrl( GeoSceneTexture *textureLayer, int zoomLevel, int x, int y );
-
- /**
- * @brief Get the relative file name of a tile.
- */
- QString relativeTileFileName( GeoSceneTexture const * const textureLayer, int zoomLevel, int x, int y );
-
- /**
- * @brief Get the theme string
- * @param theme points to the GeoSceneDocument which represents a .dgml file.
- * @return the old style theme string which used to be the argument for many methods,
- * for example "maps/earth/srtm".
- */
- QString themeStr( GeoSceneTexture const * const textureLayer );
}
}
--- trunk/KDE/kdeedu/marble/src/lib/geodata/handlers/dgml/DgmlStorageLayoutTagHandler.cpp #1121480:1121481
@@ -27,6 +27,7 @@
#include "DgmlElementDictionary.h"
#include "GeoParser.h"
#include "GeoSceneTexture.h"
+#include "ServerLayout.h"
namespace Marble
{
@@ -60,29 +61,29 @@
maximumTileLevel = maximumTileLevelStr.toInt();
}
+ // Checking for parent item
+ GeoStackItem parentItem = parser.parentElement();
+ if (parentItem.represents(dgmlTag_Texture)) {
+ GeoSceneTexture *texture = parentItem.nodeAs<GeoSceneTexture>();
+
// Attribute mode
- GeoSceneTexture::StorageLayoutMode mode = GeoSceneTexture::Marble;
+ GeoSceneTexture::StorageLayout storageLayout = GeoSceneTexture::Other;
+ ServerLayout *serverLayout = 0;
const QString modeStr = parser.attribute(dgmlAttr_mode).trimmed();
if ( modeStr == "OpenStreetMap" )
- mode = GeoSceneTexture::OpenStreetMap;
+ serverLayout = new OsmServerLayout( texture );
else if ( modeStr == "Custom" )
- mode = GeoSceneTexture::Custom;
-
- // custom Layout?
- QString customLayout;
- if ( mode == GeoSceneTexture::Custom ) {
- customLayout = parser.readElementText().trimmed();
+ serverLayout = new CustomServerLayout();
+ else {
+ storageLayout = GeoSceneTexture::Marble;
+ serverLayout = new MarbleServerLayout( texture );
}
- // Checking for parent item
- GeoStackItem parentItem = parser.parentElement();
- if (parentItem.represents(dgmlTag_Texture)) {
- parentItem.nodeAs<GeoSceneTexture>()->setLevelZeroColumns( levelZeroColumns );
- parentItem.nodeAs<GeoSceneTexture>()->setLevelZeroRows( levelZeroRows );
- parentItem.nodeAs<GeoSceneTexture>()->setMaximumTileLevel( maximumTileLevel );
- parentItem.nodeAs<GeoSceneTexture>()->setStorageLayoutMode( mode );
- if ( mode == GeoSceneTexture::Custom )
- parentItem.nodeAs<GeoSceneTexture>()->setCustomStorageLayout( customLayout );
+ texture->setLevelZeroColumns( levelZeroColumns );
+ texture->setLevelZeroRows( levelZeroRows );
+ texture->setMaximumTileLevel( maximumTileLevel );
+ texture->setStorageLayout( storageLayout );
+ texture->setServerLayout( serverLayout );
}
return 0;
--- trunk/KDE/kdeedu/marble/src/lib/geodata/scene/GeoSceneTexture.cpp #1121480:1121481
@@ -24,6 +24,8 @@
#include "DownloadPolicy.h"
#include "MarbleDebug.h"
+#include "ServerLayout.h"
+#include "TileId.h"
namespace Marble
{
@@ -32,8 +34,7 @@
: GeoSceneAbstractDataset( name ),
m_sourceDir( "" ),
m_installMap( "" ),
- m_storageLayoutMode( Marble ),
- m_customStorageLayout( "" ),
+ m_serverLayout( new MarbleServerLayout( this ) ),
m_levelZeroColumns( defaultLevelZeroColumns ),
m_levelZeroRows( defaultLevelZeroRows ),
m_maximumTileLevel( -1 ),
@@ -47,6 +48,7 @@
GeoSceneTexture::~GeoSceneTexture()
{
qDeleteAll( m_downloadPolicies );
+ delete m_serverLayout;
}
QString GeoSceneTexture::sourceDir() const
@@ -69,26 +71,19 @@
m_installMap = installMap;
}
-GeoSceneTexture::StorageLayoutMode GeoSceneTexture::storageLayoutMode() const
+void GeoSceneTexture::setStorageLayout( const StorageLayout layout )
{
- return m_storageLayoutMode;
+ m_storageLayoutMode = layout;
}
-void GeoSceneTexture::setStorageLayoutMode( const StorageLayoutMode mode )
+void GeoSceneTexture::setServerLayout( const ServerLayout *layout )
{
- m_storageLayoutMode = mode;
-}
+ if (m_serverLayout != 0)
+ delete m_serverLayout;
-QString GeoSceneTexture::customStorageLayout()const
-{
- return m_customStorageLayout;
+ m_serverLayout = layout;
}
-void GeoSceneTexture::setCustomStorageLayout( const QString& layout )
-{
- m_customStorageLayout = layout;
-}
-
int GeoSceneTexture::levelZeroColumns() const
{
return m_levelZeroColumns;
@@ -129,17 +124,19 @@
m_projection = projection;
}
-QUrl GeoSceneTexture::downloadUrl()
+QUrl GeoSceneTexture::downloadUrl( const TileId &id )
{
// default download url
if ( m_downloadUrls.empty() )
- return QUrl( "http://download.kde.org/apps/marble/" );
+ return m_serverLayout->downloadUrl( QUrl( "http://download.kde.org/apps/marble/" ), id );
if ( m_nextUrl == m_downloadUrls.constEnd() )
m_nextUrl = m_downloadUrls.constBegin();
- QUrl url = *m_nextUrl;
+ const QUrl url = m_serverLayout->downloadUrl( *m_nextUrl, id );
+
++m_nextUrl;
+
return url;
}
@@ -150,6 +147,39 @@
m_nextUrl = m_downloadUrls.constBegin();
}
+QString GeoSceneTexture::relativeTileFileName( const TileId &id ) const
+{
+ const QString suffix = fileFormat().toLower();
+
+ QString relFileName;
+
+ switch ( m_storageLayoutMode ) {
+ case GeoSceneTexture::Marble:
+ relFileName = QString( "%1/%2/%3/%3_%4.%5" )
+ .arg( themeStr() )
+ .arg( id.zoomLevel() )
+ .arg( id.y(), tileDigits, 10, QChar('0') )
+ .arg( id.x(), tileDigits, 10, QChar('0') )
+ .arg( suffix );
+ break;
+ case GeoSceneTexture::Other:
+ relFileName = QString( "%1/%2/%3/%4.%5" )
+ .arg( themeStr() )
+ .arg( id.zoomLevel() )
+ .arg( id.x() )
+ .arg( id.y() )
+ .arg( suffix );
+ break;
+ }
+
+ return relFileName;
+}
+
+QString GeoSceneTexture::themeStr() const
+{
+ return "maps/" + sourceDir();
+}
+
QList<DownloadPolicy *> GeoSceneTexture::downloadPolicies() const
{
return m_downloadPolicies;
--- trunk/KDE/kdeedu/marble/src/lib/geodata/scene/GeoSceneTexture.h #1121480:1121481
@@ -35,15 +35,18 @@
* @short Texture dataset stored in a layer.
*/
+class ServerLayout;
+
namespace Marble
{
class Blending;
class DownloadPolicy;
+class TileId;
class GeoSceneTexture : public GeoSceneAbstractDataset
{
public:
- enum StorageLayoutMode { Marble, OpenStreetMap, Custom };
+ enum StorageLayout { Marble, Other };
enum Projection { Equirectangular, Mercator };
explicit GeoSceneTexture( const QString& name );
@@ -55,11 +58,9 @@
QString installMap() const;
void setInstallMap( const QString& installMap );
- StorageLayoutMode storageLayoutMode() const;
- void setStorageLayoutMode( StorageLayoutMode const );
+ void setStorageLayout( StorageLayout );
- QString customStorageLayout()const;
- void setCustomStorageLayout( const QString& );
+ void setServerLayout( const ServerLayout * );
int levelZeroColumns() const;
void setLevelZeroColumns( const int );
@@ -80,9 +81,13 @@
// this method is a little more than just a stupid getter,
// it implements the round robin for the tile servers.
// on each invocation the next url is returned
- QUrl downloadUrl();
+ QUrl downloadUrl( const TileId & );
void addDownloadUrl( const QUrl & );
+ QString relativeTileFileName( const TileId & ) const;
+
+ QString themeStr() const;
+
QList<DownloadPolicy *> downloadPolicies() const;
void addDownloadPolicy( const DownloadUsage usage, const int maximumConnections );
@@ -94,8 +99,8 @@
QString m_sourceDir;
QString m_installMap;
- StorageLayoutMode m_storageLayoutMode;
- QString m_customStorageLayout;
+ StorageLayout m_storageLayoutMode;
+ const ServerLayout *m_serverLayout;
int m_levelZeroColumns;
int m_levelZeroRows;
int m_maximumTileLevel;
--- trunk/KDE/kdeedu/marble/src/tilecreator/CMakeLists.txt #1121480:1121481
@@ -10,6 +10,7 @@
../lib/DownloadPolicy.cpp
../lib/TileCreator.cpp
../lib/TileLoaderHelper.cpp
+ ../lib/ServerLayout.cpp
../lib/geodata/parser/GeoDocument.cpp
../lib/geodata/scene/GeoSceneTexture.cpp
../lib/geodata/scene/GeoSceneLayer.cpp
More information about the Marble-commits
mailing list