void QgsOsgEarthTileSource::initialize( const std::string& referenceURI, const Profile* overrideProfile )
{
  Q_UNUSED( referenceURI );
  Q_UNUSED( overrideProfile );

  setProfile( osgEarth::Registry::instance()->getGlobalGeodeticProfile() );
  QgsMapRenderer* mainRenderer = mQGisIface->mapCanvas()->mapRenderer();
  mMapRenderer = new QgsMapRenderer();

  long epsgGlobe = 4326;
  if ( mainRenderer->destinationCrs().authid().compare( QString( "EPSG:%1" ).arg( epsgGlobe ), Qt::CaseInsensitive ) != 0 )
  {
    QgsCoordinateReferenceSystem srcCRS( mainRenderer->destinationCrs() ); //FIXME: crs from canvas or first layer?
    QgsCoordinateReferenceSystem destCRS;
    destCRS.createFromOgcWmsCrs( QString( "EPSG:%1" ).arg( epsgGlobe ) );
    //QgsProject::instance()->writeEntry("SpatialRefSys","/ProjectionsEnabled",1);
    mMapRenderer->setDestinationCrs( destCRS );
    mMapRenderer->setProjectionsEnabled( true );
    mCoordTranform = new QgsCoordinateTransform( srcCRS, destCRS );
  }
  mMapRenderer->setOutputUnits( mainRenderer->outputUnits() );
  mMapRenderer->setMapUnits( QGis::Degrees );

  mMapRenderer->setLabelingEngine( new QgsPalLabeling() );
}
bool QgsMapCanvasItem::setRenderContextVariables( QPainter* p, QgsRenderContext& context ) const
{
  if ( !mMapCanvas || !p )
  {
    return false;
  }
  QgsMapRenderer* mapRenderer = mMapCanvas->mapRenderer();
  if ( !mapRenderer )
  {
    return false;
  }

  context.setPainter( p );
  context.setRendererScale( mMapCanvas->scale() );

  int dpi = mapRenderer->outputDpi();
  int painterDpi = p->device()->logicalDpiX();
  double scaleFactor = 1.0;
  double rasterScaleFactor = 1.0;

  //little trick to find out if painting origines from composer or main map canvas
  if ( data( 1 ).toString() == "composer" )
  {
    rasterScaleFactor = painterDpi / 25.4;
    scaleFactor = dpi / 25.4;
  }
  else
  {
    if ( mapRenderer->outputUnits() == QgsMapRenderer::Millimeters )
    {
      scaleFactor = dpi / 25.4;
    }
  }
  context.setScaleFactor( scaleFactor );
  context.setRasterScaleFactor( rasterScaleFactor );
  return true;
}