[Marble] simple example of displaying just the map, using MarbleMap?
Torsten Rahn
tackat at t-online.de
Thu Apr 22 17:04:46 CEST 2010
On Thursday 22 April 2010 16:12:51 D. R. Evans wrote:
> > Have you read the (admittedly small) tutorial?
> Yes.
Cool, if you feel like extending it with the experience you've made don't
hesitate to do so :-)
> Right, so isn't that telling me that since I *don't* want any interaction,
> then I want a MarbleMap?? That's why I used a MarbleMap instead of a
> MarbleWidget.
Ok, then using MarbleMap might be your best choice indeed!
> > mapWidget->setShowCompass( false );
> > mapWidget->setShowOverviewMap( false );
> > mapWidget->setShowScaleBar( false );
>
> OK, that gets rid of those item (thanks very much), but I still end up with
> the big grey area where they were. I think there's something I'm not
> understanding about the way sizing works.
What are you using as a "surface" / paintdevice for rendering the map? Are you
rendering the MarbleMap on top of another widget? Or onto a pixmap?
> Here's what I have:
> map->setSize(1200, 600);
> map->setMapThemeId("earth/srtm/srtm.dgml"); // the atlas view
> map->setProjection(Equirectangular);
>
> the resulting image has two problems I can't seem to resolve:
>
> 1. The big grey area above the map, which I want to remove
Without the screenshot I can only guess that the grey area above the map is
either the background of a widget that you are using as a parent or an
uninitialized pixmap.
> 2. I see more than 360° of longitude
Right now you need to manually prevent that you see more than 360 degs:
It basically works like this:
- Assuming that the height of your map is supposed to be height=160 pixels: You
need to set the "radius" of the map to
int height = 160;
map->setRadius(height/2);
- For the flat projection the aspect ratio is always 2:1, so you need to set the
width of your map to
map->setWidth( 2 * height )
(for mercator it's just 1:1, so you wouldn't need the factor 2 for mercator)
If you want to allow for dynamic resizing of the map then you need to do this in
a resizeEvent.
Hm, it would be nice if we had a method in MarbleMap and MarbleWidget which
would do this for you.
So far this is only done manually in the world clock plasmoid code:
marble/src/plasmoid/worldclock.cpp
in void WorldClock::resizeMap(bool changeAspect)
which is using MarbleMap as well.
> I am impressed at how easy it was to get this far.
Great to hear :-)
Torsten
> Doc
More information about the Marble
mailing list