Feature request #15536

Support for osgEarth 2.8 in Globe plugin

Added by Bas Couwenberg over 3 years ago. Updated over 1 year ago.

Status:Closed
Priority:Normal
Assignee:Pirmin Kalberer
Category:C++ plugins/Globe
Pull Request or Patch supplied:No Resolution:wontfix
Easy fix?:No Copied to github as #:23459

Description

osgEarth 2.8rc1 has been released, and disabled the libosgEarthQt library, see:

https://github.com/gwaldron/osgearth/blob/osgearth-2.8rc1/src/CMakeLists.txt#L30

I've opened an issue in the osgEarth tracker (osgEarthQt no longer built for 2.8rc1) to inquire about why it was disabled and whether it will return in the final 2.8 release.

If won't be re-enabled, consider removing the Globe plugin from QGIS.

History

#1 Updated by Bas Couwenberg over 3 years ago

The osgEarthQt library wasn't entirely disabled in the build system, it does need an explicit CMake option to enable now.

The osgearth Debian package has been updated to 2.8-rc1, and is available in experimental.

Please test the Globe plugin using those packages.

#2 Updated by Bas Couwenberg over 3 years ago

QGIS 2.16.2 fails to build with osgEarth 2.8-rc2 as unfortunately expected.

First of all due to QGIS still using Qt4 whereas OpenSceneGraph 3.4 and osgEarth 2.8 have been built with Qt5:

[ 80%] Building CXX object src/plugins/globe/CMakeFiles/globeplugin.dir/globe_plugin.cpp.o
cd /build/qgis-2.16.2/debian/build/src/plugins/globe && /usr/bin/c++   -DENABLE_TESTS -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_SQL_LIB -DQT_SVG_LIB -DQT_XML_LIB -Dglobeplugin_EX
PORTS -isystem /usr/include/qt4 -isystem /usr/include/qt4/QtOpenGL -isystem /usr/include/qt4/QtSvg -isystem /usr/include/qt4/QtGui -isystem /usr/include/qt4/QtXml -isystem /usr/include/qt4/QtSql -isystem /usr/include/qt4/QtNetwork -isyst
em /usr/include/qt4/QtCore -I/build/qgis-2.16.2/debian/build -I/build/qgis-2.16.2/debian/build/src/plugins/globe -I/usr/include/python2.7 -I/build/qgis-2.16.2/src/plugins/globe/../../core -I/build/qgis-2.16.2/src/plugins/globe/../../core
/geometry -I/build/qgis-2.16.2/src/plugins/globe/../../core/raster -I/build/qgis-2.16.2/src/plugins/globe/../../core/symbology-ng -I/build/qgis-2.16.2/src/plugins/globe/../../gui -I/build/qgis-2.16.2/src/plugins/globe/..  -g -O2 -fdebug-
prefix-map=/build/qgis-2.16.2=. -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -O2 -Wdate-time -D_FORTIFY_SOURCE=2  -DSPATIALITE_VERSION_GE_4_0_0 -DSPATIALITE_VERSION_G_4_1_1 -DSPATIALITE_
HAS_INIT_EX -std=c++11 -Wall -Wextra -Wno-long-long -Wformat-security -Wno-strict-aliasing -fvisibility=hidden -fvisibility-inlines-hidden -fPIC -fvisibility=hidden   -DCORE_EXPORT= -DGUI_EXPORT= -DPYTHON_EXPORT= -DANALYSIS_EXPORT= -DAPP
_EXPORT= -DCUSTOMWIDGETS_EXPORT= -DSERVER_EXPORT= -DGLOBE_EXPORT= -o CMakeFiles/globeplugin.dir/globe_plugin.cpp.o -c /build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp
In file included from /usr/include/osgQt/GraphicsWindowQt:21:0,
                 from /usr/include/osgEarthQt/ViewerWidget:26,
                 from /build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:61:
/usr/include/osgQt/Version:8:2: error: #error "Qt version mismatch detected! Make sure to compile applications using osgQt with the same major Qt version that osgQt has been compiled against." 
 #error "Qt version mismatch detected! Make sure to compile applications using osgQt with the same major Qt version that osgQt has been compiled against." 
  ^~~~~

And there are additional errors:
In file included from /build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:25:0:
/build/qgis-2.16.2/src/plugins/globe/qgsglobetilesource.h:113:5: error: 'Status' does not name a type
     Status initialize( const osgDB::Options *dbOptions ) override;
     ^~~~~~
[...]
/build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp: In member function 'void GlobePlugin::run()':
/build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:366:73: error: invalid new-expression of abstract class type 'QgsGlobeTileSource'
     mTileSource = new QgsGlobeTileSource( mQGisIface->mapCanvas(), opts );
                                                                         ^
In file included from /build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:25:0:
/build/qgis-2.16.2/src/plugins/globe/qgsglobetilesource.h:109:7: note:   because the following virtual functions are pure within 'QgsGlobeTileSource':
 class QgsGlobeTileSource : public osgEarth::TileSource
       ^~~~~~~~~~~~~~~~~~
In file included from /usr/include/osgEarth/ImageLayer:26:0,
                 from /usr/include/osgEarth/Map:28,
                 from /usr/include/osgEarth/MapNode:27,
                 from /usr/include/osgEarthUtil/FeatureQueryTool:24,
                 from /build/qgis-2.16.2/src/plugins/globe/qgsglobefeatureidentify.h:20,
                 from /build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:23:
/usr/include/osgEarth/TileSource:461:24: note:  virtual osgEarth::Status osgEarth::TileSource::initialize(const osgDB::Options*)
         virtual Status initialize(const osgDB::Options* readOptions) =0;
                        ^~~~~~~~~~
/build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp: In member function 'void GlobePlugin::applyProjectSettings()':
/build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:563:35: error: invalid use of incomplete type 'class osgEarth::TerrainEngineNode'
       mMapNode->getTerrainEngine()->removeEffect( mVerticalScale );
                                   ^~
In file included from /usr/include/osgEarthUtil/FeatureQueryTool:24:0,
                 from /build/qgis-2.16.2/src/plugins/globe/qgsglobefeatureidentify.h:20,
                 from /build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:23:
/usr/include/osgEarth/MapNode:35:11: note: forward declaration of 'class osgEarth::TerrainEngineNode'
     class TerrainEngineNode;
           ^~~~~~~~~~~~~~~~~
/build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:566:35: error: invalid use of incomplete type 'class osgEarth::TerrainEngineNode'
       mMapNode->getTerrainEngine()->addEffect( mVerticalScale );
                                   ^~
In file included from /usr/include/osgEarthUtil/FeatureQueryTool:24:0,
                 from /build/qgis-2.16.2/src/plugins/globe/qgsglobefeatureidentify.h:20,
                 from /build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:23:
/usr/include/osgEarth/MapNode:35:11: note: forward declaration of 'class osgEarth::TerrainEngineNode'
     class TerrainEngineNode;
           ^~~~~~~~~~~~~~~~~
/build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp: In member function 'void GlobePlugin::addModelLayer(QgsVectorLayer*, QgsGlobeVectorLayerConfig*)':
/build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:780:39: warning: 'virtual QgsSymbolV2List QgsFeatureRendererV2::symbols()' is deprecated [-Wdeprecated-declarations]
   if ( !vLayer->rendererV2()->symbols().isEmpty() )
                                       ^
In file included from /build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:43:0:
/build/qgis-2.16.2/src/plugins/globe/../../core/symbology-ng/qgsrendererv2.h:217:47: note: declared here
     Q_DECL_DEPRECATED virtual QgsSymbolV2List symbols();
                                               ^~~~~~~
In file included from /usr/include/qt4/QtCore/qchar.h:45:0,
                 from /usr/include/qt4/QtCore/qstring.h:45,
                 from /usr/include/qt4/QtCore/QString:1,
                 from /build/qgis-2.16.2/src/plugins/globe/../qgisplugin.h:38,
                 from /build/qgis-2.16.2/src/plugins/globe/globe_plugin.h:22,
                 from /build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:21:
/build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:782:65: warning: 'virtual QgsSymbolV2List QgsFeatureRendererV2::symbols()' is deprecated [-Wdeprecated-declarations]
     Q_FOREACH ( QgsSymbolV2* sym, vLayer->rendererV2()->symbols() )
                                                                 ^
In file included from /build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:43:0:
/build/qgis-2.16.2/src/plugins/globe/../../core/symbology-ng/qgsrendererv2.h:217:47: note: declared here
     Q_DECL_DEPRECATED virtual QgsSymbolV2List symbols();
                                               ^~~~~~~
In file included from /usr/include/qt4/QtCore/qchar.h:45:0,
                 from /usr/include/qt4/QtCore/qstring.h:45,
                 from /usr/include/qt4/QtCore/QString:1,
                 from /build/qgis-2.16.2/src/plugins/globe/../qgisplugin.h:38,
                 from /build/qgis-2.16.2/src/plugins/globe/globe_plugin.h:22,
                 from /build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:21:
/build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:782:65: warning: 'virtual QgsSymbolV2List QgsFeatureRendererV2::symbols()' is deprecated [-Wdeprecated-declarations]
     Q_FOREACH ( QgsSymbolV2* sym, vLayer->rendererV2()->symbols() )
                                                                 ^
In file included from /build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:43:0:
/build/qgis-2.16.2/src/plugins/globe/../../core/symbology-ng/qgsrendererv2.h:217:47: note: declared here
     Q_DECL_DEPRECATED virtual QgsSymbolV2List symbols();
                                               ^~~~~~~
/build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp: In member function 'void GlobePlugin::rebuildQGISLayer()':
/build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:1027:73: error: invalid new-expression of abstract class type 'QgsGlobeTileSource'
     mTileSource = new QgsGlobeTileSource( mQGisIface->mapCanvas(), opts );
                                                                         ^
/build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp: In member function 'void GlobePlugin::enableFrustumHighlight(bool)':
/build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:1106:33: error: invalid use of incomplete type 'class osgEarth::TerrainEngineNode'
     mMapNode->getTerrainEngine()->addUpdateCallback( mFrustumHighlightCallback );
                                 ^~
In file included from /usr/include/osgEarthUtil/FeatureQueryTool:24:0,
                 from /build/qgis-2.16.2/src/plugins/globe/qgsglobefeatureidentify.h:20,
                 from /build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:23:
/usr/include/osgEarth/MapNode:35:11: note: forward declaration of 'class osgEarth::TerrainEngineNode'
     class TerrainEngineNode;
           ^~~~~~~~~~~~~~~~~
/build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:1108:33: error: invalid use of incomplete type 'class osgEarth::TerrainEngineNode'
     mMapNode->getTerrainEngine()->removeUpdateCallback( mFrustumHighlightCallback );
                                 ^~
In file included from /usr/include/osgEarthUtil/FeatureQueryTool:24:0,
                 from /build/qgis-2.16.2/src/plugins/globe/qgsglobefeatureidentify.h:20,
                 from /build/qgis-2.16.2/src/plugins/globe/globe_plugin.cpp:23:
/usr/include/osgEarth/MapNode:35:11: note: forward declaration of 'class osgEarth::TerrainEngineNode'
     class TerrainEngineNode;
           ^~~~~~~~~~~~~~~~~

With the above in mind, we're likely to keep osgEarth 2.7 in the upcoming Debian stretch release, and will likely use OpenSceneGraph 3.4/3.6 and osgEarth 2.8 backports for the eventual QGIS 3.x LTR in stretch-backports. There has been some discussion about that with the OpenSceneGraph maintainers in Debian, see:

https://lists.debian.org/debian-gis/2016/09/msg00021.html

#3 Updated by Bas Couwenberg over 3 years ago

The osgEarth 2.8 final release has been published today, and the Debian package for it has been uploaded to experimental.

For QGIS 3.x which will use Qt5, the OpenSceneGraph 3.4/3.6 and osgEarth 2.8 packages will be the best to target for the globe plugin as these all use Qt5 too.

I'm in doubt whether or not to keep osgEarth 2.7 in the upcoming Debian stretch release. Since QGIS 2.14 LTR doesn't support osgEarth >= 2.6, there is no use to stick to 2.7 since it's not supported anyway.

Upgrading osgEarth to 2.8 for stretch will mean no globe plugin for users of the upstream 2.16/18/20/etc packages until the switch to Qt5 in QGIS 3.0 (assuming this issue will be addressed for QGIS 3.0).

Pirmin, please share your plans for the Globe plugin in QGIS 3.0.

#4 Updated by Pirmin Kalberer over 3 years ago

Hi Bas,
Thanks for your work with packaging the QGIS globe plugin!
The problem with OsgEarth versions is, that they are numbered as minor versions, but are in fact major versions. They break APIs or behave different. That's why we gave up trying to support multiple OsgEarth versions with QGIS and are currently supporting 2.7 only, which is also packaged for osgeo4w. Maybe someone else will adapt the code for QGIS 2.18, but in the meantime there is no globe plugin for 2.8.
Pirmin

#5 Updated by Bas Couwenberg over 3 years ago

Pirmin Kalberer wrote:

Maybe someone else will adapt the code for QGIS 2.18, but in the meantime there is no globe plugin for 2.8.

What about QGIS 3.0 which will switch to Qt5 like OpenSceneGraph 3.4 and osgEarth 2.8 have done as well?

#6 Updated by Giovanni Manghi about 3 years ago

  • Easy fix? set to No

#7 Updated by Nyall Dawson over 1 year ago

  • Description updated (diff)

I think we should close this as "wontfix". The globe plugin is effectively deprecated and all future work is being directed to QGIS 3D instead.

#8 Updated by Jürgen Fischer over 1 year ago

  • Resolution set to wontfix
  • Status changed from Open to Closed

Also available in: Atom PDF