1

Quantum GIS (qgis) は、オープン ソースの GIS ソフトウェアです。qgis の機能は、python または c++ で書かれたプラグインによって拡張できます。この質問は、c++ ベースのDTClassifierに関連しています。DTClassifier を使用すると、リモート センシング データで森林の分類を自動化するなど、ラスター マップの分類を自動化できます。

qgis 1.8.0 (Ubuntu 12.04 64 ビット) にプラグインをインストールしたいのですが、これは、コンパイルされた Linux DTClassifier プラグイン ファイル

/usr/lib/qgis/plugins 

ただし、これは 32 ビットの Slackware 13.1 で OpenCV 2.3.1 を使用してコンパイルされた 32 ビットのバイナリですが、私の OS は Ubuntu 12.04 64 ビットです。ファイルを入れる

/usr/lib/qgis/plugins

qgisによって認識されません。たぶん、64ビットOSと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 を実行しました。

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
4

1 に答える 1

1

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 をコンパイルすることでした。それで、qgisのコンパイルに関するこの優れたガイドを見つけました。ステップ3.6で提案されたソースを使用しなかったことを除いて、ガイドのステップ1〜3.7に従いました。

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 のソースをダウンロードします。

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 ライブラリに依存します。この優れたガイドinstallation-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 プラグイン ディレクトリ (通常は "/usr/lib/qgis/plugins") に配置する必要があります。

それは私にとってうまくいったことを願っています。

注: qgis 1.9 に対して DTClassifier をコンパイルしようとすると、おそらく次のようなエラーのリストが表示されます。

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

バージョン 1.9 で qgis クラスの API が変更されたためでしょうか。

于 2013-02-24T09:14:08.940 に答える