Marble/MarblePythonMarbleWidget
Tutorial Series | Marble Python Tutorial |
Previous | Tutorial 1 - Hello World |
What's Next | Tutorial 3 - Basic Interaction with MarbleWidget |
Further Reading | n/a |
Creating a weather map
We'd like to display a small weather map. So we need to modify the map. And we need to turn on the satellite view, enable the clouds and enable the country border lines.
The MarbleWidget class provides a convenient way to make these changes to the overall look and feel of the map. The documentation for this class can be found in the marble source at src/bindings/python/html/marble/Marble.html.
By default Marble shows a few info boxes: Overview Map, Compass and ScaleBar. But the size for the widget is very limited. Therefore we want to get rid of all the clutter, so we turn off the Overview Map and the ScaleBar.
from PyQt4.QtCore import *
from PyKDE4.kdeui import *
from PyKDE4.kdecore import *
from PyKDE4.marble import *
import sys
class MainWin (KMainWindow):
def __init__ (self, *args):
KMainWindow.__init__ (self)
self.resize(600, 400)
# create the marble widget
self.marble = Marble.MarbleWidget(self)
# Load the OpenStreetMap map
self.marble.setMapThemeId("earth/bluemarble/bluemarble.dgml")
# make the map flat, not spherical
self.marble.setProjection(Marble.Mercator)
# Enable the cloud cover and enable the country borders
self.marble.setShowClouds(True)
self.marble.setShowBorders(True)
# Hide the FloatItems: Compass and StatusBar
self.marble.setShowOverviewMap(False)
self.marble.setShowScaleBar(False)
# add the widget to the KMainWindow
self.setCentralWidget(self.marble)
def main():
# defaults needed for the KApplication to be initialized
appName = "marble_weather_map"
catalog = ""
programName = ki18n ("Marble Weather Map")
version = "1.0"
description = ki18n ("Using Marble to display a Weather Map")
license = KAboutData.License_GPL
copyright = ki18n ("(c) 2008 Your Name")
text = ki18n ("none")
homePage = "www.example.com"
bugEmail = "[email protected]"
aboutData = KAboutData (appName, catalog, programName, version, description,
license, copyright, text, homePage, bugEmail)
KCmdLineArgs.init(sys.argv, aboutData)
app = KApplication()
# initialize our window, which will call the MainWindow.__init__ function above
mainWindow = MainWin(None, "main window")
mainWindow.show()
# quit the application when the last window closes
app.connect(app, SIGNAL ("lastWindowClosed ()"), app.quit)
# run the app
app.exec_()
main()
Save the code above as marble_weather.py and run it:
python marble_weather.py
If things go fine, you end up with a map application that displays clouds on top of a flat map with clouds over it (you may need to zoom out):