首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译量子gis c++分类器c++插件

编译量子gis c++分类器c++插件
EN

Stack Overflow用户
提问于 2013-02-21 16:26:42
回答 1查看 1.1K关注 0票数 1

量子GIS (qgis)是一个开源的GIS软件。qgis的功能可以通过用python或c++编写的插件来扩展。这个问题与基于DTClassifier的c++相关。DTClassifier使栅格地图的分类自动化成为可能,例如自动对遥感数据进行森林分类。

我想在QGIS1.8.0(Ubuntu12.04 64位)上安装这个插件,这是通过将编译好的linux DTClassifier插件文件放到

代码语言:javascript
复制
/usr/lib/qgis/plugins 

然而,这是一个使用OpenCV 2.3.1的32位二进制с,在32位Slackware 13.1下面,而我的操作系统是Ubuntu12.04 64位。将文件放入

代码语言:javascript
复制
/usr/lib/qgis/plugins

不被qgis所识别。也许是因为我有64位操作系统和OpenCV 2.4.1。因此,我试图编译提供的源代码,但失败了。任何人,谁能为我提供帮助,如何编译插件或提供已编译文件?

这就是我到目前为止所取得的成就:

我安装了OpenCV 2.4.1和Qt4,并下载了DTClassifier的源代码

代码语言:javascript
复制
svn co http://svn.gis-lab.info/dtclassifier/trunk dtclassifier

该源被放入qgis-1.8.0源中。然后用CMakeLists.txt运行cmake:

我找到了这个(论坛电文),它指向Ubuntu11.04的64位版本,但我无法使它工作。

以下是我所尝试过的详情:

代码语言:javascript
复制
~/qgis-1.8.0/src/plugins/dtclassifier cmake .

The CMakeLists.txt

代码语言:javascript
复制
# 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
)

它没有给出任何错误

代码语言:javascript
复制
-- Configuring done
-- Generating done
-- Build files have been written to: qgis-1.8.0/src/plugins/dtclassifier

。但现在抱怨太多了:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2013-02-24 09:14:08

在量子地理信息系统上编译DTClassifier c++插件1.8.0Ubuntu64位.

这是对我如何在Ubuntu12.04 64位上编译DTClassifier插件的一个简短解释。这可能不是最好的实践,但它奏效了!

获取源代码

找出哪个版本的qgis与插件兼容。在DTClassifier文档中,使用OpenCV 2.3.1在32位Slackware 13.1上编译和测试了QGIS1.8。我的出发点是首先让qgis在我的系统上编译。因此,我在编译qgis时发现了这个优秀向导,我遵循了指南中的步骤1- 3.7,只是我没有使用步骤3.6中建议的源代码。

代码语言:javascript
复制
git://github.com/qgis/Quantum-GIS.git

这是QGIS1.9,但这里我们需要QGIS1.8。因此,请下载我从“7个来源和样本数据” 1.8最后版本下载的QGISVersion1.8的源代码。(如何编译的说明也作为文件“安装”在源代码存档中提供。)

--关于我编写qgis.经验的注记

我在proj和/或gdal库上遇到了一些麻烦。最初我有一个更高版本的gdal库,但使用gdal 1.7.3和proj4.8(由synaptic报告,proj命令报告4.7版),在整理proj/gdal故障后,编译成功,可以尝试qgis。

如果您在执行编译后的qgis文件时出错,这可能有助于您:在加载共享库:core.so.1.8.0:无法打开共享对象文件:没有这样的文件或目录时出错。

继续编译DTClassifier

DTClassifier依赖于OpenCV库。我按照这个优秀的指南OpenCv 2.4.1安装和测试了安装-opencv-2-4-1-ubuntu-12-04-lts

DTClassifier的源被放置在

代码语言:javascript
复制
qgis-1.8.0/src/plugins/dtclassifier

然后,对于插件目录中的cmakelist文件,需要同样构建DTClassifier的信息:

代码语言:javascript
复制
qgis-1.8.0/src/plugins/CMakeLists.txt

这一行是添加的

代码语言:javascript
复制
ADD_SUBDIRECTORY(dtclassifier)

在此基础上,对qgis的编制过程进行了重复。记得运行"ccmake .“从安装指南的步骤3.7开始,以便更新配置信息。现在,配置应该有包含OpenCV库配置的行。这一次,由于以前的编译,"make“运行得更快。

在qgis中,DTclassifier插件现在应该以DTclassifier的形式出现在中。不过,我在QGIS1.8.0的版本中运行了这个插件。因此生成的编译后的DTClassifier文件

代码语言:javascript
复制
qgis-1.8.0/build-master/output/lib/qgis/plugins/libclassifierplugin.so

需要放在qgis插件目录中(通常是"/usr/lib/qgis/ plugins ")。

,它对我起了作用,希望它也对你有用!

注意:如果您尝试使用QGIS1.9编译DTClassifier,那么您很可能会得到一个类似于以下内容的错误列表:

代码语言:javascript
复制
 classifierdialog.cpp:328:13: error: ‘class QgsVectorDataProvider’ has no member named ‘select’

这是因为qgis类的API在1.9版中发生了变化吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15007317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档