2013-02-21 411 views
1

量子GIS(qgis)是一個開源的GIS軟件。 qgis的功能可以通過用python或C++編寫的插件來擴展。這個問題與基於C++的DTClassifier有關。 DTClassifier使自動化柵格地圖分類成爲可能,例如自動化遠程感測數據上的森林分類。編譯量子gis dtclassifier C++插件

我要安裝QGIS 1.8.0(Ubuntu的12.04 64位)的插件,其是通過將已編譯的Linux DTClassifier plugin file做成

/usr/lib/qgis/plugins 

然而,這是一個32位的二進制сompiled在使用OpenCV 2.3.1的32位Slackware 13.1下,而我的操作系統是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來源。然後cmake運行CMakeLists.txt:

我發現這(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 
[ 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 

回答

1

編譯量子GIS DTClassifier C++插件(QGIS)版本1.8.0的Ubuntu 64位。

這是我如何在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。因此,而不是下載QGIS 1.8版本是我從"7 Sources and Sample Datase" 1.8最終版本下載的來源。(如何編譯在源代碼包還提供了爲文件「安裝」的說明。)

說明我的經驗編譯qgis。

我有一些proj和/或gdal庫的麻煩。起初,我有一個更高版本的gdal庫,但gdal 1.7.3和proj 4.8(由突觸報告,但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的庫。我按照這本優秀指南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中,DTlassifier插件現在應該顯示爲qgis插件管理器中的DTclassifier。不過,我在qgis 1.8.0的ubuntu apt-get版本中運行插件。因此所得到的編譯DTClassifier文件

qgis-1.8.0/build-master/output/lib/qgis/plugins/libclassifierplugin.so 

需要被放置在QGIS插件目錄(通常是 「/ usr/lib中/ QGIS /插件」)。

它爲我工作,希望它也適合你!

注意:如果你試圖編譯DTClassifier對QGIS 1.9,那麼你很可能會得到錯誤的列表與此類似:

classifierdialog.cpp:328:13: error: ‘class QgsVectorDataProvider’ has no member named ‘select’ 

這是因爲QGIS類的API已經改變了1.9版本?