gpt4 book ai didi

c++ - 编译 quantum gis dtclassifier c++ 插件

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:49 24 4
gpt4 key购买 nike

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

我想在 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

最佳答案

在 Quantum GIS (qgis) 版本 1.8.0 Ubuntu 64 位上编译 DTClassifier c++ 插件。

这是我如何在 Ubuntu 12.04 64 位上编译 DTClassifier 插件的简短说明。这可能不是最佳做法,但它确实有效!

获取源代码

找出与该插件兼容的 qgis 版本。在 DTClassifier 的文档中,它已使用 OpenCV 2.3.1 在 32 位 Slackware 13.1 上的 qgis 1.8 上进行了编译和测试。我的出发点是首先让 qgis 在我的系统上编译。所以我找到了这个 excellent guide在编译 qgis 时,我遵循了指南中的步骤 1 - 3.7,只是我没有使用步骤 3.6 中建议的来源

git://github.com/qgis/Quantum-GIS.git

这是 qgis 1.9 但这里我们需要 qgis 1.8。因此,请下载我从 "7 Sources and Sample Datase" 下载的 qgis 1.8 版的源代码1.8 Final Release。(如何编译的说明也在源代码存档中作为文件“INSTALL”提供。)

我编译qgis的经验笔记

我在使用 proj 和/或 gdal 库时遇到了一些问题。起初我有一个更高版本的 gdal 库但是有 gdal 1.7.3 和 proj 4.8(由 synaptic 报告但 proj 命令报告版本 4.7)在解决 proj/gdal 问题后编译成功并且可以尝试 qgis。

如果您在尝试执行已编译的 qgis 文件时遇到错误,这可能会对您有所帮助:加载共享库时出错:libqgis_core.so.1.8.0: cannot open shared object file: No such file or directory

关于编译 DTClassifier

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

DTClassifier的源码放入

qgis-1.8.0/src/plugins/dtclassifier

然后到plugins目录下的cmakelist文件需要的信息还需要构建DTClassifier:

qgis-1.8.0/src/plugins/CMakeLists.txt

添加了这一行

ADD_SUBDIRECTORY(dtclassifier)

然后又重复了qgis的编译过程。请记住从安装指南中的步骤 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’

那是因为 qgis 类的 API 在 1.9 版本发生了变化?

关于c++ - 编译 quantum gis dtclassifier c++ 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15007317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com