7 #include "DgmlStorageLayoutTagHandler.h"
9 #include "MarbleDebug.h"
11 #include "DgmlAttributeDictionary.h"
12 #include "DgmlElementDictionary.h"
13 #include "GeoParser.h"
14 #include "GeoSceneTileDataset.h"
15 #include "ServerLayout.h"
21 DGML_DEFINE_TAG_HANDLER(StorageLayout)
23 GeoNode* DgmlStorageLayoutTagHandler::parse(GeoParser& parser)
const
26 Q_ASSERT(parser.isStartElement() && parser.isValidElement(
QLatin1String(dgmlTag_StorageLayout)));
29 int levelZeroColumns = 2;
30 const QString levelZeroColumnsStr = parser.attribute(dgmlAttr_levelZeroColumns).
trimmed();
31 if ( !levelZeroColumnsStr.
isEmpty() ) {
32 levelZeroColumns = levelZeroColumnsStr.
toInt();
36 int levelZeroRows = 1;
37 const QString levelZeroRowsStr = parser.attribute(dgmlAttr_levelZeroRows).
trimmed();
38 if ( !levelZeroRowsStr.
isEmpty() ) {
39 levelZeroRows = levelZeroRowsStr.
toInt();
43 int minimumTileLevel = 0;
44 const QString minimumTileLevelStr = parser.attribute( dgmlAttr_minimumTileLevel ).
trimmed();
45 if ( !minimumTileLevelStr.
isEmpty() ) {
46 minimumTileLevel = minimumTileLevelStr.
toInt();
50 int maximumTileLevel = -1;
51 const QString maximumTileLevelStr = parser.attribute( dgmlAttr_maximumTileLevel ).
trimmed();
52 if ( !maximumTileLevelStr.
isEmpty() ) {
53 maximumTileLevel = maximumTileLevelStr.
toInt();
57 const QString tileLevels = parser.attribute( dgmlAttr_tileLevels ).
trimmed();
60 GeoStackItem parentItem = parser.parentElement();
61 if (parentItem.represents(dgmlTag_Texture) || parentItem.represents(dgmlTag_Vectortile)) {
62 GeoSceneTileDataset *texture = parentItem.nodeAs<GeoSceneTileDataset>();
65 GeoSceneTileDataset::StorageLayout storageLayout = GeoSceneTileDataset::OpenStreetMap;
66 ServerLayout *serverLayout =
nullptr;
69 serverLayout =
new OsmServerLayout( texture );
71 serverLayout =
new CustomServerLayout( texture );
73 serverLayout =
new WmsServerLayout( texture );
75 serverLayout =
new WmtsServerLayout( texture );
77 serverLayout =
new QuadTreeServerLayout( texture );
80 storageLayout = GeoSceneTileDataset::TileMapService;
81 serverLayout =
new TmsServerLayout( texture );
83 storageLayout = GeoSceneTileDataset::Marble;
84 serverLayout =
new MarbleServerLayout( texture );
87 mDebug() <<
"Unknown storage layout mode " << modeStr <<
", falling back to default.";
91 texture->setLevelZeroColumns( levelZeroColumns );
92 texture->setLevelZeroRows( levelZeroRows );
93 texture->setMinimumTileLevel( minimumTileLevel );
94 texture->setMaximumTileLevel( maximumTileLevel );
95 texture->setTileLevels( tileLevels );
96 texture->setStorageLayout( storageLayout );
97 texture->setServerLayout( serverLayout );