Quantum GIS (qgis) является программным обеспечением ГИС с открытым исходным кодом. Функциональность qgis может быть расширена с помощью плагинов, написанных на python или c ++. Этот вопрос связан с DTClassifier который основан на C ++. DTClassifier позволяет автоматизировать классификацию растровых карт, например автоматизировать классификацию лесов по данным дистанционного зондирования.
Я хочу установить плагин на qgis 1.8.0 (Ubuntu 12.04 64-bit), это делается путем размещения скомпилированного linux Файл плагина DTClassifier в
/usr/lib/qgis/plugins
Тем не менее, это 32-битный двоичный файл, скомпилированный в 32-битной Slackware 13.1 с использованием OpenCV 2.3.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:
я нашел это (сообщение на форуме) которая указывает на 64-битную версию для Ubuntu 11.04, но я не мог заставить ее работать.
Подробности того, что я пробовал до сих пор, можно найти ниже:
~/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
Компиляция плагина DTClassifier c ++ для Quantum GIS (qgis) версии 1.8.0 Ubuntu 64 bit.
Это краткое объяснение того, как я скомпилировал плагин DTClassifier в Ubuntu 12.04 64-bit. Возможно, это не лучшая практика, но это сработало!
Получение исходного кода
Узнайте, какая версия qgis совместима с плагином. В документации по DTClassifier он был скомпилирован и протестирован на qgis 1.8 на 32-битном Slackware 13.1 с использованием OpenCV 2.3.1. Моей отправной точкой было сделать компиляцию qgis в моей системе. Итак, я нашел это отличный гид при компиляции qgis я следовал шагу 1 — 3.7 в руководстве, за исключением того, что я не использовал источник, предложенный в шаге 3.6 из
git://github.com/qgis/Quantum-GIS.git
что QGIS 1,9, но здесь нам нужно QGIS 1,8. Поэтому вместо этого скачайте исходный код qgis версии 1.8, который я скачал с «7 источников и образец данных» 1.8 Окончательный выпуск. (Инструкции по компиляции также приведены в архиве исходного кода в виде файла «INSTALL».)
Заметки о моем опыте компиляции qgis.
У меня были некоторые проблемы с библиотеками proj и / или gdal. Сначала у меня была более поздняя версия библиотек gdal, но с gdal 1.7.3 и proj 4.8 (сообщается синаптической, но команда proj сообщает о версии 4.7). После устранения проблемы proj / gdal компиляция прошла успешно, и можно было попробовать qgis.
Если вы получите ошибку при попытке выполнить скомпилированный файл qgis, это может помочь вам:
ошибка при загрузке общих библиотек: libqgis_core.so.1.8.0: невозможно открыть общий объектный файл: нет такого файла или каталога
На компиляции DTClassifier
DTClassifier зависит от библиотек OpenCV. Я установил и протестировал OpenCv 2.4.1, следуя этому прекрасному руководству установка-OpenCV-2-4-1-убунту-12-04-LTS.
Источник DTClassifier размещен в
qgis-1.8.0/src/plugins/dtclassifier
Затем для файла cmakelist в каталоге плагинов нужна информация, что также должен быть собран DTClassifier:
qgis-1.8.0/src/plugins/CMakeLists.txt
эта строка была добавлена
ADD_SUBDIRECTORY(dtclassifier)
Затем процесс компиляции qgis был повторен. Не забудьте запустить «ccmake ..» из шага 3.7 в руководстве по установке, чтобы обновить информацию о конфигурации. Теперь в конфигурации должны быть строки, содержащие конфигурацию библиотек OpenCV. На этот раз «make» работает быстрее из-за предыдущей компиляции.
В qgis плагин DTclassifier теперь должен отображаться как DTclassifier в менеджере плагинов qgis. Тем не менее, я запускаю плагин в версии ugntu apt-get qgis 1.8.0. поэтому результирующий скомпилированный файл DTClassifier
qgis-1.8.0/build-master/output/lib/qgis/plugins/libclassifierplugin.so
должен быть помещен в каталог плагинов qgis (обычно «/ usr / lib / qgis / plugins»).
Это работает для меня, надеюсь, это работает и для вас!
Примечание: если вы попытаетесь скомпилировать DTClassifier для qgis 1.9, вы, скорее всего, получите список ошибок, подобных этому:
classifierdialog.cpp:328:13: error: ‘class QgsVectorDataProvider’ has no member named ‘select’
Это потому что API классов qgis изменился для версии 1.9?
Других решений пока нет …