1
/***************************************************************************
2
qgsrasterterrainanalysisplugin.cpp - description
4
begin : August 6th, 2009
5
copyright : (C) 2009 by Marco Hugentobler
6
email : marco dot hugentobler at karto dot baug dot ethz dot ch
7
***************************************************************************/
9
/***************************************************************************
11
* This program is free software; you can redistribute it and/or modify *
12
* it under the terms of the GNU General Public License as published by *
13
* the Free Software Foundation; either version 2 of the License, or *
14
* (at your option) any later version. *
16
***************************************************************************/
18
#include "qgsrasterterrainanalysisplugin.h"
20
#include "qgisinterface.h"
21
#include "qgsmaplayer.h"
22
#include "qgsmaplayerregistry.h"
23
#include "qgsaspectfilter.h"
24
#include "qgsslopefilter.h"
25
#include "qgsruggednessfilter.h"
26
#include "qgstotalcurvaturefilter.h"
27
#include "qgsrasterterrainanalysisdialog.h"
29
#include <QProgressDialog>
31
static const QString name_ = QObject::tr( "Raster Terrain Analysis plugin" );
32
static const QString description_ = QObject::tr( "A plugin for raster based terrain analysis" );
33
static const QString version_ = QObject::tr( "Version 0.1" );
35
QgsRasterTerrainAnalysisPlugin::QgsRasterTerrainAnalysisPlugin( QgisInterface* iface ): mIface( iface ), mAction( 0 )
40
QgsRasterTerrainAnalysisPlugin::~QgsRasterTerrainAnalysisPlugin()
45
void QgsRasterTerrainAnalysisPlugin::initGui()
50
mAction = new QAction( QIcon( ":/raster/raster_terrain_icon.png" ), tr( "&Raster based terrain analysis..." ), 0 );
51
QObject::connect( mAction, SIGNAL( triggered() ), this, SLOT( run() ) );
52
mIface->addToolBarIcon( mAction );
53
mIface->addPluginToMenu( tr( "&Raster based terrain analysis..." ), mAction );
57
void QgsRasterTerrainAnalysisPlugin::unload()
61
mIface->removePluginMenu( tr( "&Raster based terrain analysis..." ), mAction );
62
mIface ->removeToolBarIcon( mAction );
67
void QgsRasterTerrainAnalysisPlugin::run()
69
//testcode, remove it after debugging and show a dialog
70
//QgsRuggednessFilter r("/home/marco/geodaten/raster/albis/mmal25.agr", "/home/marco/tmp/ruggedtest.tif", "GTiff");
71
//QgsSlopeFilter slopeFilter("/home/marco/geodaten/raster/albis/mmal25.agr", "/home/marco/tmp/ruggedtest.tif", "GTiff");
72
//QgsAspectFilter aspectFilter("/home/marco/geodaten/raster/albis/mmal25.agr", "/home/marco/tmp/ruggedtest.tif", "GTiff");
73
//slopeFilter.processRaster(0);
75
QgsRasterTerrainAnalysisDialog d( mIface );
76
if ( d.exec() == QDialog::Accepted )
78
//get input layer from id
79
QString inputLayerId = d.selectedInputLayerId();
80
QgsMapLayer* inputLayer = QgsMapLayerRegistry::instance()->mapLayer( inputLayerId );
85
QString inputFilePath = inputLayer->source();
87
QString analysisMethod = d.selectedAnalysisMethod();
88
QString selectedFormat = d.selectedDriverKey();
89
QString outputFile = d.selectedOuputFilePath();
92
QgsNineCellFilter* filter = 0;
93
if ( d.selectedAnalysisMethod() == tr( "Slope" ) )
95
filter = new QgsSlopeFilter( inputFilePath, outputFile, selectedFormat );
97
else if ( d.selectedAnalysisMethod() == tr( "Aspect" ) )
99
filter = new QgsAspectFilter( inputFilePath, outputFile, selectedFormat );
101
else if ( d.selectedAnalysisMethod() == tr( "Ruggedness index" ) )
103
filter = new QgsRuggednessFilter( inputFilePath, outputFile, selectedFormat );
105
else if ( d.selectedAnalysisMethod() == tr( "Total curvature" ) )
107
filter = new QgsTotalCurvatureFilter( inputFilePath, outputFile, selectedFormat );
112
QProgressDialog p( tr( "Calculating " ) + d.selectedAnalysisMethod() + "...", tr( "Abort..." ), 0, 0 );
113
p.setWindowModality( Qt::WindowModal );
114
returnValue = filter->processRaster( &p );
116
if ( d.addLayerToProject() )
118
mIface->addRasterLayer( outputFile, d.selectedAnalysisMethod() );
124
//global methods for the plugin manager
125
QGISEXTERN QgisPlugin* classFactory( QgisInterface * ifacePointer )
127
return new QgsRasterTerrainAnalysisPlugin( ifacePointer );
130
QGISEXTERN QString name()
135
QGISEXTERN QString description()
140
QGISEXTERN QString version()
145
QGISEXTERN int type()
147
return QgisPlugin::UI;
150
QGISEXTERN void unload( QgisPlugin* pluginPointer )
152
delete pluginPointer;