Quantum GIS(qgis)是一种开源GIS软件。 qgis的功能可以通过用python或c ++编写的插件来扩展。这个问题与基于c ++的DTClassifier有关。 DTClassifier可以自动进行栅格地图的分类,例如自动对遥感数据上的森林进行分类。
我想在qgis 1.8.0(Ubuntu 12.04 64位)上安装插件,这是通过将已编译的linux DTClassifier plugin file放入
来完成的。/usr/lib/qgis/plugins
然而,这是使用OpenCV 2.3.1在32位Slackware 13.1下编译的32位二进制文件,而我的操作系统是Ubuntu 12.04 64位。将文件输入
/usr/lib/qgis/plugins
qgis无法识别。也许是因为我有64位操作系统和OpenCV 2.4.1。所以我尝试编译提供的源代码但未能这样做。 有谁可以帮我提供如何编译插件或提供已编译的文件?
这是我迄今为止所取得的成就:
我安装了OpenCV 2.4.1和Qt4,并下载了DTClassifier的源代码
svn co http://svn.gis-lab.info/dtclassifier/trunk dtclassifier
此源已放入qgis-1.8.0源。然后使用CMakeLists.txt运行cmake:
我发现这个(forum message)指向Ubuntu 11.04的64位版本,但我无法使其正常工作。
到目前为止我所尝试的细节可以在下面找到:
~/qgis-1.8.0/src/plugins/dtclassifier cmake .
CMakeLists.txt
# set path to additional CMake modules
cmake_minimum_required (VERSION 2.6)
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules ${CMAKE_MODULE_PATH})
FIND_PACKAGE(OpenCV REQUIRED)
FIND_PACKAGE(Qt4)
INCLUDE(${QT_USE_FILE})
########################################################
# Files
SET (CLASSIFIER_SRCS
classifier.cpp
classifierdialog.cpp
classifierutils.cpp
rasterfileinfo.cpp
layerselectordialog.cpp
)
SET (CLASSIFIER_UIS
classifierdialogbase.ui
layerselectordialogbase.ui
)
SET (CLASSIFIER_MOC_HDRS
classifier.h
classifierdialog.h
layerselectordialog.h
)
SET (CLASSIFIER_RCCS classifier.qrc)
########################################################
# Build
QT4_WRAP_UI (CLASSIFIER_UIS_H ${CLASSIFIER_UIS})
QT4_WRAP_CPP (CLASSIFIER_MOC_SRCS ${CLASSIFIER_MOC_HDRS})
QT4_ADD_RESOURCES(CLASSIFIER_RCC_SRCS ${CLASSIFIER_RCCS})
ADD_LIBRARY (classifierplugin MODULE
${CLASSIFIER_SRCS}
${CLASSIFIER_MOC_SRCS}
${CLASSIFIER_RCC_SRCS}
${CLASSIFIER_UIS_H}
)
INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_BINARY_DIR}
${GDAL_INCLUDE_DIR}
${OpenCV_INCLUDE_DIR}
../../core/raster
../../core/renderer
../../core/symbology
../../core
../../gui
..
.
#/usr/include/opencv2
)
TARGET_LINK_LIBRARIES(classifierplugin
qgis_core
qgis_gui
${OpenCV_LIBS}
#/usr/lib/libopencv_core.so
#/usr/lib/libopencv_ml.so
#/usr/lib/libopencv_highgui.so
#/usr/lib/libopencv_imgproc.so
)
########################################################
# Install
INSTALL(TARGETS classifierplugin
RUNTIME DESTINATION /usr/lib/qgis/plugins
LIBRARY DESTINATION /usr/lib/qgis/plugins
)
它没有给出任何错误
-- Configuring done
-- Generating done
-- Build files have been written to: qgis-1.8.0/src/plugins/dtclassifier
。但是后来make失败了很多抱怨:
make
[ 6%] Building CXX object CMakeFiles/classifierplugin.dir/classifier.cpp.o
In file included from /qgis-1.8.0/src/plugins/dtclassifier/../../gui/qgisinterface.h:40:0,
from /qgis-1.8.0/src/plugins/dtclassifier/classifier.cpp:23:
/qgis-1.8.0/src/plugins/dtclassifier/../../core/qgis.h:30:19: error: variable ‘CORE_EXPORT QGis’ has initializer but incomplete type
/qgis-1.8.0/src/plugins/dtclassifier/../../core/qgis.h:30:19: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
/qgis-1.8.0/src/plugins/dtclassifier/../../core/qgis.h:32:3: error: expected primary-expression before ‘public’
/qgis-1.8.0/src/plugins/dtclassifier/../../core/qgis.h:32:3: error: expected ‘}’ before ‘public’
/qgis-1.8.0/src/plugins/dtclassifier/../../core/qgis.h:32:3: error: expected ‘,’ or ‘;’ before ‘public’
/qgis-1.8.0/src/plugins/dtclassifier/../../core/qgis.h:38:22: error: uninitialized const ‘QGIS_VERSION_INT’ [-fpermissive]
/qgis-1.8.0/src/plugins/dtclassifier/../../core/qgis.h:77:47: error: storage size of ‘qgisVectorGeometryType’ isn’t known
/qgis-1.8.0/src/plugins/dtclassifier/../../core/qgis.h:80:41: error: storage size of ‘qgisFeatureTypes’ isn’t known
/qgis-1.8.0/src/plugins/dtclassifier/../../core/qgis.h:108:25: error: uninitialized const ‘DEFAULT_IDENTIFY_RADIUS’ [-fpermissive]
/qgis-1.8.0/src/plugins/dtclassifier/../../core/qgis.h:109:1: error: expected declaration before ‘}’ token
make[2]: *** [CMakeFiles/classifierplugin.dir/classifier.cpp.o] Error 1
make[1]: *** [CMakeFiles/classifierplugin.dir/all] Error 2
make: *** [all] Error 2
答案 0 :(得分:1)
在Quantum GIS(qgis)版本1.8.0 Ubuntu 64位上编译DTClassifier c ++插件。
这是我如何在64位Ubuntu 12.04上编译DTClassifier插件的简短说明。这可能不是最好的做法,但它有效!
获取源代码
找出哪个版本的qgis与插件兼容。在DTClassifier的文档中,它已经使用OpenCV 2.3.1在32位Slackware 13.1上的qgis 1.8上进行了编译和测试。我的出发点是首先在我的系统上编译qgis。所以我在编译qgis时发现excellent guide我在指南中按照步骤1 - 3.7进行了操作,除了我没有使用步骤3.6中建议的来源
git://github.com/qgis/Quantum-GIS.git
这是qgis 1.9但是我们需要 qgis 1.8 。所以请下载我从"7 Sources and Sample Datase" 1.8 Final Release下载的qgis 1.8版的源代码。(源代码存档中也提供了如何编译的说明文件“INSTALL”。)
关于我编译qgis的经验的注释。
我在使用proj和/或gdal库时遇到了一些麻烦。起初我有更高版本的gdal库,但有gdal 1.7.3和proj 4.8(由synaptic报告,但是proj命令报告版本4.7)在解决了proj / gdal问题后,编译成功并且可以尝试qgis。 / p>
如果您在尝试执行已编译的qgis文件时出错,这可能对您有所帮助: 加载共享库时出错:libqgis_core.so.1.8.0: cannot open shared object file: No such file or directory
开始编译DTClassifier
DTClassifier依赖于OpenCV库。我按照这个出色的指南installing-opencv-2-4-1-ubuntu-12-04-lts安装并测试了OpenCv 2.4.1。
DTClassifier的来源放在
中qgis-1.8.0/src/plugins/dtclassifier
然后,插件目录中的cmakelist文件需要还应该构建DTClassifier的信息:
qgis-1.8.0/src/plugins/CMakeLists.txt
此行已添加
ADD_SUBDIRECTORY(dtclassifier)
然后重复qgis的编译过程。请记住从INSTALL指南中的步骤3.7运行“ccmake ..”,以便更新配置信息。现在配置应该包含包含OpenCV库配置的行。这次“make”由于之前的编译而运行得更快。
在qgis中,DTclassifier插件现在应该在qgis插件管理器中显示为DTclassifier。但是我在qgis 1.8.0的ubuntu apt-get版本中运行插件。所以编译后的DTClassifier文件
qgis-1.8.0/build-master/output/lib/qgis/plugins/libclassifierplugin.so
需要放在qgis plugins目录中(通常是“/ usr / lib / qgis / plugins”)。
它对我有用,希望它也适合你!
注意:如果您尝试针对qgis 1.9编译DTClassifier,那么您很可能会得到与此类似的错误列表:
classifierdialog.cpp:328:13: error: ‘class QgsVectorDataProvider’ has no member named ‘select’
那是因为版本1.9的qgis类的API已经改变了吗?