• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

marble

  • sources
  • kde-4.12
  • kdeedu
  • marble
  • tools
  • mapreproject
NasaWorldWindToOpenStreetMapConverter.cpp
Go to the documentation of this file.
1 #include "NasaWorldWindToOpenStreetMapConverter.h"
2 
3 #include "OsmTileClusterRenderer.h"
4 #include "Thread.h"
5 
6 #include <QDebug>
7 #include <QMetaObject>
8 #include <QString>
9 #include <QThread>
10 
11 #include <cmath>
12 
13 NasaWorldWindToOpenStreetMapConverter::NasaWorldWindToOpenStreetMapConverter( QObject * const parent )
14  : QObject( parent ),
15  m_threadCount(),
16  m_osmTileLevel(),
17  m_osmTileClusterEdgeLengthTiles(),
18  m_osmMapEdgeLengthClusters(),
19  m_nextClusterX(),
20  m_nextClusterY()
21 {
22 }
23 
24 void NasaWorldWindToOpenStreetMapConverter::setMapSources( QVector<ReadOnlyMapDefinition> const & mapSources )
25 {
26  m_mapSources = mapSources;
27 }
28 
29 void NasaWorldWindToOpenStreetMapConverter::setOsmBaseDirectory( QDir const & osmBaseDirectory )
30 {
31  if ( !osmBaseDirectory.exists() ) {
32  qDebug() << "Destination path " << osmBaseDirectory << "does not exist, creating.";
33  osmBaseDirectory.mkpath( osmBaseDirectory.path() );
34  }
35  m_osmBaseDirectory = osmBaseDirectory;
36 }
37 
38 void NasaWorldWindToOpenStreetMapConverter::setOsmTileClusterEdgeLengthTiles( int const clusterEdgeLengthTiles )
39 {
40  m_osmTileClusterEdgeLengthTiles = clusterEdgeLengthTiles;
41 }
42 
43 void NasaWorldWindToOpenStreetMapConverter::setOsmTileLevel( int const level )
44 {
45  m_osmTileLevel = level;
46 }
47 
48 void NasaWorldWindToOpenStreetMapConverter::setThreadCount(const int threadCount)
49 {
50  m_threadCount = threadCount;
51 }
52 
53 QVector<QPair<Thread*, OsmTileClusterRenderer*> > NasaWorldWindToOpenStreetMapConverter::start()
54 {
55  // create directory for osm tile level if necessary
56 
57  // render Osm tiles using quadratic clusters of tiles instead of stripes
58  // to increase Nww tile cache usage
59  int const osmMapEdgeLengthTiles = pow( 2, m_osmTileLevel );
60  m_osmMapEdgeLengthClusters = osmMapEdgeLengthTiles / m_osmTileClusterEdgeLengthTiles;
61  if ( osmMapEdgeLengthTiles % m_osmTileClusterEdgeLengthTiles != 0 )
62  qFatal("Bad tile cluster size");
63 
64  QVector<QPair<Thread*, OsmTileClusterRenderer*> > renderThreads;
65 
66  for ( int i = 0; i < m_threadCount; ++i ) {
67  OsmTileClusterRenderer * const renderer = new OsmTileClusterRenderer;
68  renderer->setObjectName( QString("Renderer %1").arg( i ));
69  renderer->setClusterEdgeLengthTiles( m_osmTileClusterEdgeLengthTiles );
70  renderer->setMapSources( m_mapSources );
71  renderer->setOsmBaseDirectory( m_osmBaseDirectory );
72  renderer->setOsmTileLevel( m_osmTileLevel );
73  QObject::connect( renderer, SIGNAL(clusterRendered(OsmTileClusterRenderer*)),
74  this, SLOT(assignNextCluster(OsmTileClusterRenderer*)) );
75 
76  Thread * const thread = new Thread;
77  thread->launchWorker( renderer );
78  QMetaObject::invokeMethod( renderer, "initMapSources", Qt::QueuedConnection );
79  QMetaObject::invokeMethod( renderer, "renderOsmTileCluster", Qt::QueuedConnection,
80  Q_ARG( int, m_nextClusterX ), Q_ARG( int, m_nextClusterY ));
81  incNextCluster();
82  renderThreads.push_back( qMakePair( thread, renderer ));
83  }
84  return renderThreads;
85 }
86 
87 void NasaWorldWindToOpenStreetMapConverter::testReprojection()
88 {
89 // qDebug() << "\nTesting osm pixel x -> lon[rad]";
90 // qDebug() << 0 << "->" << osmPixelXtoLonRad( 0 );
91 // qDebug() << m_osmMapEdgeLengthPixel / 4 << "->" << osmPixelXtoLonRad( m_osmMapEdgeLengthPixel / 4 );
92 // qDebug() << m_osmMapEdgeLengthPixel / 2 << "->" << osmPixelXtoLonRad( m_osmMapEdgeLengthPixel / 2 );
93 // qDebug() << m_osmMapEdgeLengthPixel / 4 * 3 << "->" << osmPixelXtoLonRad( m_osmMapEdgeLengthPixel / 4 * 3 );
94 // qDebug() << m_osmMapEdgeLengthPixel << "->" << osmPixelXtoLonRad( m_osmMapEdgeLengthPixel );
95 
96 // qDebug() << "\nTesting osm pixel y -> lat[rad]";
97 // qDebug() << 0 << "->" << osmPixelYtoLatRad( 0 );
98 // qDebug() << m_osmMapEdgeLengthPixel / 4 << "->" << osmPixelYtoLatRad( m_osmMapEdgeLengthPixel / 4 );
99 // qDebug() << m_osmMapEdgeLengthPixel / 2 << "->" << osmPixelYtoLatRad( m_osmMapEdgeLengthPixel / 2 );
100 // qDebug() << m_osmMapEdgeLengthPixel / 4 * 3 << "->" << osmPixelYtoLatRad( m_osmMapEdgeLengthPixel / 4 * 3 );
101 // qDebug() << m_osmMapEdgeLengthPixel << "->" << osmPixelYtoLatRad( m_osmMapEdgeLengthPixel );
102 
103 // qDebug() << "\nTesting lon[rad] -> nww pixel x";
104 // qDebug() << -M_PI << "->" << lonRadToNwwPixelX( -M_PI );
105 // qDebug() << -M_PI / 2.0 << "->" << lonRadToNwwPixelX( -M_PI / 2.0 );
106 // qDebug() << 0 << "->" << lonRadToNwwPixelX( 0 );
107 // qDebug() << M_PI / 2.0 << "->" << lonRadToNwwPixelX( M_PI / 2.0 );
108 // qDebug() << M_PI << "->" << lonRadToNwwPixelX( M_PI );
109 
110 // qDebug() << "\nTesting lat[rad] -> nww pixel y";
111 // qDebug() << M_PI / 2.0 << "->" << latRadToNwwPixelY( M_PI / 2.0 );
112 // qDebug() << 0 << "->" << latRadToNwwPixelY( 0 );
113 // qDebug() << -M_PI / 2.0 << "->" << latRadToNwwPixelY( -M_PI / 2.0 );
114 }
115 
116 void NasaWorldWindToOpenStreetMapConverter::assignNextCluster( OsmTileClusterRenderer * renderer )
117 {
118  if ( m_nextClusterX == m_osmMapEdgeLengthClusters || m_nextClusterY == m_osmMapEdgeLengthClusters )
119  return;
120 
121  QMetaObject::invokeMethod( renderer, "renderOsmTileCluster", Qt::QueuedConnection,
122  Q_ARG( int, m_nextClusterX ), Q_ARG( int, m_nextClusterY ));
123  incNextCluster();
124 }
125 
126 void NasaWorldWindToOpenStreetMapConverter::checkAndCreateLevelDirectory() const
127 {
128  QDir const levelDirectory( m_osmBaseDirectory.path() + QString("/%1").arg( m_osmTileLevel ));
129  if ( !levelDirectory.exists() ) {
130  bool const created = levelDirectory.mkpath( levelDirectory.path() );
131  if ( !created ) {
132  // maybe it was created in the meantime by something else
133  if ( !levelDirectory.exists() )
134  qFatal("Unable to create directory '%s'.", levelDirectory.path().toStdString().c_str());
135  }
136  }
137 }
138 
139 void NasaWorldWindToOpenStreetMapConverter::incNextCluster()
140 {
141  ++m_nextClusterY;
142  if ( m_nextClusterY == m_osmMapEdgeLengthClusters ) {
143  m_nextClusterY = 0;
144  ++m_nextClusterX;
145  if ( m_nextClusterX == m_osmMapEdgeLengthClusters )
146  emit finished();
147  }
148 }
149 
150 #include "NasaWorldWindToOpenStreetMapConverter.moc"
NasaWorldWindToOpenStreetMapConverter::testReprojection
void testReprojection()
Definition: NasaWorldWindToOpenStreetMapConverter.cpp:87
Thread::launchWorker
void launchWorker(QObject *const worker)
Definition: Thread.cpp:61
OsmTileClusterRenderer::setOsmTileLevel
void setOsmTileLevel(int const level)
Definition: OsmTileClusterRenderer.cpp:39
OsmTileClusterRenderer.h
NasaWorldWindToOpenStreetMapConverter::setThreadCount
void setThreadCount(int const threadCount)
Definition: NasaWorldWindToOpenStreetMapConverter.cpp:48
OsmTileClusterRenderer::setOsmBaseDirectory
void setOsmBaseDirectory(QDir const &osmBaseDirectory)
Definition: OsmTileClusterRenderer.cpp:34
NasaWorldWindToOpenStreetMapConverter::setOsmTileLevel
void setOsmTileLevel(int const level)
Definition: NasaWorldWindToOpenStreetMapConverter.cpp:43
QObject
NasaWorldWindToOpenStreetMapConverter::start
QVector< QPair< Thread *, OsmTileClusterRenderer * > > start()
Definition: NasaWorldWindToOpenStreetMapConverter.cpp:53
Thread.h
OsmTileClusterRenderer::setMapSources
void setMapSources(QVector< ReadOnlyMapDefinition > const &mapSources)
Definition: OsmTileClusterRenderer.cpp:29
NasaWorldWindToOpenStreetMapConverter.h
NasaWorldWindToOpenStreetMapConverter::assignNextCluster
void assignNextCluster(OsmTileClusterRenderer *)
Definition: NasaWorldWindToOpenStreetMapConverter.cpp:116
NasaWorldWindToOpenStreetMapConverter::NasaWorldWindToOpenStreetMapConverter
NasaWorldWindToOpenStreetMapConverter(QObject *const parent=NULL)
Definition: NasaWorldWindToOpenStreetMapConverter.cpp:13
NasaWorldWindToOpenStreetMapConverter::setOsmBaseDirectory
void setOsmBaseDirectory(QDir const &nwwBaseDirectory)
Definition: NasaWorldWindToOpenStreetMapConverter.cpp:29
OsmTileClusterRenderer
Definition: OsmTileClusterRenderer.h:14
OsmTileClusterRenderer::setClusterEdgeLengthTiles
void setClusterEdgeLengthTiles(int const clusterEdgeLengthTiles)
Definition: OsmTileClusterRenderer.cpp:24
Thread
Definition: Thread.h:50
NasaWorldWindToOpenStreetMapConverter::finished
void finished()
NasaWorldWindToOpenStreetMapConverter::setMapSources
void setMapSources(QVector< ReadOnlyMapDefinition > const &mapSources)
Definition: NasaWorldWindToOpenStreetMapConverter.cpp:24
NasaWorldWindToOpenStreetMapConverter::setOsmTileClusterEdgeLengthTiles
void setOsmTileClusterEdgeLengthTiles(int const clusterEdgeLengthTiles)
Definition: NasaWorldWindToOpenStreetMapConverter.cpp:38
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:51 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

marble

Skip menu "marble"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal