[QGIS Commit] r9195 - in trunk/qgis: python/core src/core
src/plugins/ogr_converter src/plugins/spit src/providers/ogr
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Wed Aug 27 17:56:30 EDT 2008
Author: timlinux
Date: 2008-08-27 17:56:29 -0400 (Wed, 27 Aug 2008)
New Revision: 9195
Modified:
trunk/qgis/python/core/qgsapplication.sip
trunk/qgis/src/core/qgsapplication.cpp
trunk/qgis/src/core/qgsapplication.h
trunk/qgis/src/core/qgsvectorfilewriter.cpp
trunk/qgis/src/plugins/ogr_converter/dialog.cpp
trunk/qgis/src/plugins/ogr_converter/translator.cpp
trunk/qgis/src/plugins/spit/qgsshapefile.cpp
trunk/qgis/src/providers/ogr/qgsogrprovider.cpp
Log:
Added a wrapper for ogr register all so that it cant be called twice (on suggestion of M. Loskot).
Fixes issues where drivers appear to be registered more than once.
Modified: trunk/qgis/python/core/qgsapplication.sip
===================================================================
--- trunk/qgis/python/core/qgsapplication.sip 2008-08-27 21:31:59 UTC (rev 9194)
+++ trunk/qgis/python/core/qgsapplication.sip 2008-08-27 21:56:29 UTC (rev 9195)
@@ -191,5 +191,13 @@
* application instance useful for debugging mainly.*/
static QString showSettings();
+ /** Register OGR drivers ensuring this only happens once.
+ * This is a workaround for an issue with older gdal versions that
+ * caused duplicate driver name entries to appear in the list
+ * of registered drivers when QgsApplication::registerOgrDrivers was called multiple
+ * times.
+ */
+ static void registerOgrDrivers();
+
};
Modified: trunk/qgis/src/core/qgsapplication.cpp
===================================================================
--- trunk/qgis/src/core/qgsapplication.cpp 2008-08-27 21:31:59 UTC (rev 9194)
+++ trunk/qgis/src/core/qgsapplication.cpp 2008-08-27 21:56:29 UTC (rev 9195)
@@ -32,6 +32,8 @@
#include <netinet/in.h>
#endif
+#include <ogr_api.h>
+
QString QgsApplication::mPrefixPath;
QString QgsApplication::mPluginPath;
QString QgsApplication::mPkgDataPath;
@@ -314,4 +316,10 @@
return myStyle;
}
-
+void QgsApplication::registerOgrDrivers()
+{
+ if ( 0 >= OGRGetDriverCount() )
+ {
+ OGRRegisterAll();
+ }
+}
Modified: trunk/qgis/src/core/qgsapplication.h
===================================================================
--- trunk/qgis/src/core/qgsapplication.h 2008-08-27 21:31:59 UTC (rev 9194)
+++ trunk/qgis/src/core/qgsapplication.h 2008-08-27 21:56:29 UTC (rev 9195)
@@ -139,6 +139,14 @@
/** Convenience function to get a summary of the paths used in this
* application instance useful for debugging mainly.*/
static QString showSettings();
+ /** Register OGR drivers ensuring this only happens once.
+ * This is a workaround for an issue with older gdal versions that
+ * caused duplicate driver name entries to appear in the list
+ * of registered drivers when QgsApplication::registerOgrDrivers was called multiple
+ * times.
+ */
+ static void registerOgrDrivers();
+
private:
static QString mPrefixPath;
static QString mPluginPath;
Modified: trunk/qgis/src/core/qgsvectorfilewriter.cpp
===================================================================
--- trunk/qgis/src/core/qgsvectorfilewriter.cpp 2008-08-27 21:31:59 UTC (rev 9194)
+++ trunk/qgis/src/core/qgsvectorfilewriter.cpp 2008-08-27 21:56:29 UTC (rev 9195)
@@ -17,6 +17,7 @@
***************************************************************************/
/* $Id$ */
+#include "qgsapplication.h"
#include "qgsfield.h"
#include "qgsfeature.h"
#include "qgsgeometry.h"
@@ -48,7 +49,7 @@
// find driver in OGR
OGRSFDriverH poDriver;
- OGRRegisterAll();
+ QgsApplication::registerOgrDrivers();
poDriver = OGRGetDriverByName( driverName.toLocal8Bit().data() );
if ( poDriver == NULL )
Modified: trunk/qgis/src/plugins/ogr_converter/dialog.cpp
===================================================================
--- trunk/qgis/src/plugins/ogr_converter/dialog.cpp 2008-08-27 21:31:59 UTC (rev 9194)
+++ trunk/qgis/src/plugins/ogr_converter/dialog.cpp 2008-08-27 21:56:29 UTC (rev 9195)
@@ -15,9 +15,10 @@
#include "format.h"
#include "translator.h"
// QGIS includes
+#include <qgsapplication.h>
#include <qgslogger.h>
#include <qgscontexthelp.h>
-// TODO: Add support of QGIS projection selector
+// TODO: Add support of QGIS projection selector
//#include <qgsprojectionselector.h>
// Qt4
#include <QtAlgorithms>
@@ -29,425 +30,432 @@
#include <QStringList>
#include <QVariant>
-namespace qgis { namespace plugin { namespace ogrconv {
+namespace qgis
+{
+ namespace plugin
+ {
+ namespace ogrconv
+ {
// GDAL/OGR loaded into private namespace
#include <ogr_api.h>
#include <ogrsf_frmts.h>
-Dialog::Dialog(QWidget* parent, Qt::WFlags fl)
- : QDialog(parent, fl)
-{
- setupUi(this);
- populateFormats();
- resetSrcUi();
- resetDstUi();
-}
+ Dialog::Dialog( QWidget* parent, Qt::WFlags fl )
+ : QDialog( parent, fl )
+ {
+ setupUi( this );
+ populateFormats();
+ resetSrcUi();
+ resetDstUi();
+ }
-Dialog::~Dialog()
-{
-}
+ Dialog::~Dialog()
+ {
+ }
-void Dialog::resetSrcUi()
-{
- // Clear all settings and states
- inputSrcDataset->clear();
- // TODO: Transformation support
- //inputSrcSrs->clear();
- comboSrcLayer->clear();
- radioSrcFile->setDisabled(true);
- radioSrcFile->setChecked(false);
- radioSrcDirectory->setDisabled(true);
- radioSrcDirectory->setChecked(false);
- radioSrcProtocol->setDisabled(true);
- radioSrcProtocol->setChecked(false);
+ void Dialog::resetSrcUi()
+ {
+ // Clear all settings and states
+ inputSrcDataset->clear();
+ // TODO: Transformation support
+ //inputSrcSrs->clear();
+ comboSrcLayer->clear();
+ radioSrcFile->setDisabled( true );
+ radioSrcFile->setChecked( false );
+ radioSrcDirectory->setDisabled( true );
+ radioSrcDirectory->setChecked( false );
+ radioSrcProtocol->setDisabled( true );
+ radioSrcProtocol->setChecked( false );
- // Configure types of input sources
- unsigned char const& type = mSrcFormat.type();
+ // Configure types of input sources
+ unsigned char const& type = mSrcFormat.type();
- if (isFormatType(type, Format::eFile))
- {
- radioSrcFile->setDisabled(false);
- radioSrcFile->setChecked(true);
- }
+ if ( isFormatType( type, Format::eFile ) )
+ {
+ radioSrcFile->setDisabled( false );
+ radioSrcFile->setChecked( true );
+ }
- if (isFormatType(type, Format::eDirectory))
- {
- radioSrcDirectory->setDisabled(false);
- if (!radioSrcFile->isEnabled())
- radioSrcDirectory->setChecked(true);
- }
+ if ( isFormatType( type, Format::eDirectory ) )
+ {
+ radioSrcDirectory->setDisabled( false );
+ if ( !radioSrcFile->isEnabled() )
+ radioSrcDirectory->setChecked( true );
+ }
- if (isFormatType(type, Format::eProtocol))
- {
- radioSrcProtocol->setDisabled(false);
+ if ( isFormatType( type, Format::eProtocol ) )
+ {
+ radioSrcProtocol->setDisabled( false );
- if (!radioSrcFile->isEnabled() && !radioSrcDirectory->isEnabled())
- {
- radioSrcProtocol->setChecked(true);
- inputSrcDataset->setText(mSrcFormat.protocol());
+ if ( !radioSrcFile->isEnabled() && !radioSrcDirectory->isEnabled() )
+ {
+ radioSrcProtocol->setChecked( true );
+ inputSrcDataset->setText( mSrcFormat.protocol() );
+ }
}
- }
- setButtonState(buttonSelectSrc, isFormatType(type, Format::eProtocol));
-}
+ setButtonState( buttonSelectSrc, isFormatType( type, Format::eProtocol ) );
+ }
-void Dialog::resetDstUi()
-{
- inputDstDataset->clear();
- // TODO: Transformation support
- //inputDstSrs->clear();
-
- unsigned char const& type = mDstFormat.type();
- bool isProtocol = isFormatType(type, Format::eProtocol);
+ void Dialog::resetDstUi()
+ {
+ inputDstDataset->clear();
+ // TODO: Transformation support
+ //inputDstSrs->clear();
- if (isProtocol)
- {
- inputDstDataset->setText(mDstFormat.protocol());
- }
-
- setButtonState(buttonSelectDst, isProtocol);
-}
+ unsigned char const& type = mDstFormat.type();
+ bool isProtocol = isFormatType( type, Format::eProtocol );
-void Dialog::setButtonState(QPushButton* btn, bool isProtocol)
-{
- Q_CHECK_PTR(btn);
+ if ( isProtocol )
+ {
+ inputDstDataset->setText( mDstFormat.protocol() );
+ }
- if (isProtocol)
- {
- btn->setText(tr("Connect"));
- }
- else
- {
- btn->setText(tr("Browse"));
- }
-}
+ setButtonState( buttonSelectDst, isProtocol );
+ }
-void Dialog::populateFormats()
-{
- comboSrcFormats->clear();
- comboDstFormats->clear();
-
- QStringList drvSrcList;
- QStringList drvDstList;
- QString drvName;
+ void Dialog::setButtonState( QPushButton* btn, bool isProtocol )
+ {
+ Q_CHECK_PTR( btn );
- if (0 >= OGRGetDriverCount())
- {
- OGRRegisterAll();
- }
- int const drvCount = OGRGetDriverCount();
+ if ( isProtocol )
+ {
+ btn->setText( tr( "Connect" ) );
+ }
+ else
+ {
+ btn->setText( tr( "Browse" ) );
+ }
+ }
- for (int i = 0; i < drvCount; ++i)
- {
- OGRSFDriverH drv = OGRGetDriver(i);
- Q_CHECK_PTR(drv);
- if (0 != drv)
+ void Dialog::populateFormats()
+ {
+ comboSrcFormats->clear();
+ comboDstFormats->clear();
+
+ QStringList drvSrcList;
+ QStringList drvDstList;
+ QString drvName;
+
+ if ( 0 >= OGRGetDriverCount() )
{
- drvName = OGR_Dr_GetName(drv);
- drvSrcList.append(drvName);
+ QgsApplication::registerOgrDrivers();
+ }
+ int const drvCount = OGRGetDriverCount();
- if (0 != OGR_Dr_TestCapability(drv, ODrCCreateDataSource))
+ for ( int i = 0; i < drvCount; ++i )
+ {
+ OGRSFDriverH drv = OGRGetDriver( i );
+ Q_CHECK_PTR( drv );
+ if ( 0 != drv )
+ {
+ drvName = OGR_Dr_GetName( drv );
+ drvSrcList.append( drvName );
+
+ if ( 0 != OGR_Dr_TestCapability( drv, ODrCCreateDataSource ) )
{
- drvDstList.append(drvName);
+ drvDstList.append( drvName );
}
+ }
}
- }
- qSort(drvSrcList.begin(), drvSrcList.end());
- qSort(drvDstList.begin(), drvDstList.end());
- comboSrcFormats->addItems(drvSrcList);
- comboDstFormats->addItems(drvDstList);
-}
+ qSort( drvSrcList.begin(), drvSrcList.end() );
+ qSort( drvDstList.begin(), drvDstList.end() );
+ comboSrcFormats->addItems( drvSrcList );
+ comboDstFormats->addItems( drvDstList );
+ }
-void Dialog::populateLayers(QString const& url)
-{
- comboSrcLayer->clear();
+ void Dialog::populateLayers( QString const& url )
+ {
+ comboSrcLayer->clear();
- OGRDataSourceH ds = OGROpen(url.toAscii().constData(), 0, 0);
- if (0 != ds)
- {
- QString lyrName;
- QString lyrType;
+ OGRDataSourceH ds = OGROpen( url.toAscii().constData(), 0, 0 );
+ if ( 0 != ds )
+ {
+ QString lyrName;
+ QString lyrType;
- int const size = OGR_DS_GetLayerCount(ds);
- for (int i = 0; i < size; ++i)
- {
- OGRLayerH lyr = OGR_DS_GetLayer(ds, i);
- if (0 != lyr)
+ int const size = OGR_DS_GetLayerCount( ds );
+ for ( int i = 0; i < size; ++i )
+ {
+ OGRLayerH lyr = OGR_DS_GetLayer( ds, i );
+ if ( 0 != lyr )
{
- OGRFeatureDefnH lyrDef = OGR_L_GetLayerDefn(lyr);
- Q_ASSERT(0 != lyrDef);
-
- lyrName = OGR_FD_GetName(lyrDef);
-
- OGRwkbGeometryType const geomType = OGR_FD_GetGeomType(lyrDef);
- lyrType = OGRGeometryTypeToName(geomType);
+ OGRFeatureDefnH lyrDef = OGR_L_GetLayerDefn( lyr );
+ Q_ASSERT( 0 != lyrDef );
- // FIXME: Appending type to layer name prevents from layer finding
- //comboSrcLayer->addItem(lyrName + " (" + lyrType.toUpper() + ")");
- comboSrcLayer->addItem(lyrName);
+ lyrName = OGR_FD_GetName( lyrDef );
+
+ OGRwkbGeometryType const geomType = OGR_FD_GetGeomType( lyrDef );
+ lyrType = OGRGeometryTypeToName( geomType );
+
+ // FIXME: Appending type to layer name prevents from layer finding
+ //comboSrcLayer->addItem(lyrName + " (" + lyrType.toUpper() + ")");
+ comboSrcLayer->addItem( lyrName );
}
+ }
+
+ OGR_DS_Destroy( ds );
}
+ else
+ {
+ QMessageBox::warning( this,
+ tr( "OGR Converter" ),
+ tr( "Could not establish connection to: '" ) + url + "'",
+ QMessageBox::Close );
+ }
+ }
- OGR_DS_Destroy(ds);
- }
- else
- {
- QMessageBox::warning(this,
- tr("OGR Converter"),
- tr("Could not establish connection to: '") + url + "'",
- QMessageBox::Close);
- }
-}
+ bool Dialog::testConnection( QString const& url )
+ {
+ bool success = false;
-bool Dialog::testConnection(QString const& url)
-{
- bool success = false;
+ OGRDataSourceH ds = OGROpen( url.toAscii().constData(), 0, 0 );
+ if ( 0 != ds )
+ {
+ success = true;
+ OGR_DS_Destroy( ds );
+ }
- OGRDataSourceH ds = OGROpen(url.toAscii().constData(), 0, 0);
- if (0 != ds)
- {
- success = true;
- OGR_DS_Destroy(ds);
- }
+ return success;
+ }
- return success;
-}
+ QString Dialog::openFile()
+ {
+ QSettings sets;
+ QString path = QFileDialog::getOpenFileName( this,
+ tr( "Open OGR file" ),
+ sets.value( "/Plugin-OGR/ogr-file", "./" ).toString(),
+ tr( "OGR File Data Source (*.*)" ) );
-QString Dialog::openFile()
-{
- QSettings sets;
- QString path = QFileDialog::getOpenFileName(this,
- tr("Open OGR file"),
- sets.value("/Plugin-OGR/ogr-file", "./").toString(),
- tr("OGR File Data Source (*.*)"));
+ return path;
+ }
- return path;
-}
+ QString Dialog::openDirectory()
+ {
+ QString path = QFileDialog::getExistingDirectory( this,
+ tr( "Open Directory" ), "",
+ QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks );
-QString Dialog::openDirectory()
-{
- QString path = QFileDialog::getExistingDirectory(this,
- tr("Open Directory"), "",
- QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
-
- return path;
-}
+ return path;
+ }
-void Dialog::on_buttonBox_accepted()
-{
- // Validate input settings
- QString srcUrl(inputSrcDataset->text());
- QString srcLayer(comboSrcLayer->currentText());
+ void Dialog::on_buttonBox_accepted()
+ {
+ // Validate input settings
+ QString srcUrl( inputSrcDataset->text() );
+ QString srcLayer( comboSrcLayer->currentText() );
- if (srcUrl.isEmpty())
- {
- QMessageBox::warning(this, "OGR Layer Converter",
- tr("Input OGR dataset is missing!"));
- return;
- }
-
- if (srcLayer.isEmpty())
- {
- QMessageBox::warning(this, "OGR Layer Converter",
- tr("Input OGR layer name is missing!"));
- return;
- }
+ if ( srcUrl.isEmpty() )
+ {
+ QMessageBox::warning( this, "OGR Layer Converter",
+ tr( "Input OGR dataset is missing!" ) );
+ return;
+ }
- // Validate output settings
- QString dstFormat(comboDstFormats->currentText());
- QString dstUrl(inputDstDataset->text());
- QString dstLayer(inputDstLayer->text());
- if (dstLayer.isEmpty())
- dstLayer = srcLayer;
-
- if (dstFormat.isEmpty())
- {
- QMessageBox::warning(this, "OGR Layer Converter",
- tr("Target OGR format not selected!"));
- return;
- }
-
- if (dstUrl.isEmpty())
- {
- QMessageBox::warning(this, "OGR Layer Converter",
- tr("Output OGR dataset is missing!"));
- return;
- }
+ if ( srcLayer.isEmpty() )
+ {
+ QMessageBox::warning( this, "OGR Layer Converter",
+ tr( "Input OGR layer name is missing!" ) );
+ return;
+ }
- if (dstLayer.isEmpty())
- {
- QMessageBox::warning(this, "OGR Layer Converter",
- tr("Output OGR layer name is missing!"));
- return;
- }
+ // Validate output settings
+ QString dstFormat( comboDstFormats->currentText() );
+ QString dstUrl( inputDstDataset->text() );
+ QString dstLayer( inputDstLayer->text() );
+ if ( dstLayer.isEmpty() )
+ dstLayer = srcLayer;
- // TODO: SRS transformation support
- //QString srcSrs("EPSG:");
- //QString dstSrs("EPSG:");
- //srcSrs += inputSrcSrs->text();
- //dstSrs += inputDstSrs->text();
+ if ( dstFormat.isEmpty() )
+ {
+ QMessageBox::warning( this, "OGR Layer Converter",
+ tr( "Target OGR format not selected!" ) );
+ return;
+ }
- // Execute layer translation
- bool success = false;
-
- // TODO: Use try-catch to display more meaningful error messages from Translator
- Translator worker(srcUrl, dstUrl, dstFormat);
- worker.setSourceLayer(srcLayer);
- worker.setTargetLayer(dstLayer);
- success = worker.translate();
+ if ( dstUrl.isEmpty() )
+ {
+ QMessageBox::warning( this, "OGR Layer Converter",
+ tr( "Output OGR dataset is missing!" ) );
+ return;
+ }
- if (success)
- {
- QMessageBox::information(this, "OGR Layer Converter",
- tr("Successfully translated layer '") + srcLayer + "'");
- }
- else
- {
- QMessageBox::information(this, "OGR Layer Converter",
- tr("Failed to translate layer '") + srcLayer + "'");
- }
+ if ( dstLayer.isEmpty() )
+ {
+ QMessageBox::warning( this, "OGR Layer Converter",
+ tr( "Output OGR layer name is missing!" ) );
+ return;
+ }
- // Close dialog box
- accept();
-}
+ // TODO: SRS transformation support
+ //QString srcSrs("EPSG:");
+ //QString dstSrs("EPSG:");
+ //srcSrs += inputSrcSrs->text();
+ //dstSrs += inputDstSrs->text();
-void Dialog::on_buttonBox_rejected()
-{
- reject();
-}
+ // Execute layer translation
+ bool success = false;
-void Dialog::on_buttonBox_helpRequested()
-{
- QgsContextHelp::run(context_id);
-}
+ // TODO: Use try-catch to display more meaningful error messages from Translator
+ Translator worker( srcUrl, dstUrl, dstFormat );
+ worker.setSourceLayer( srcLayer );
+ worker.setTargetLayer( dstLayer );
+ success = worker.translate();
-void Dialog::on_radioSrcFile_toggled(bool checked)
-{
- if (checked)
- {
- unsigned char const& type = mSrcFormat.type();
- Q_ASSERT(isFormatType(type, Format::eFile));
+ if ( success )
+ {
+ QMessageBox::information( this, "OGR Layer Converter",
+ tr( "Successfully translated layer '" ) + srcLayer + "'" );
+ }
+ else
+ {
+ QMessageBox::information( this, "OGR Layer Converter",
+ tr( "Failed to translate layer '" ) + srcLayer + "'" );
+ }
- inputSrcDataset->clear();
- setButtonState(buttonSelectSrc, isFormatType(type, Format::eProtocol));
- }
-}
+ // Close dialog box
+ accept();
+ }
-void Dialog::on_radioSrcDirectory_toggled(bool checked)
-{
- if (checked)
- {
- unsigned char const& type = mSrcFormat.type();
- Q_ASSERT(isFormatType(type, Format::eDirectory));
+ void Dialog::on_buttonBox_rejected()
+ {
+ reject();
+ }
- inputSrcDataset->clear();
- setButtonState(buttonSelectSrc, isFormatType(type, Format::eProtocol));
- }
-}
+ void Dialog::on_buttonBox_helpRequested()
+ {
+ QgsContextHelp::run( context_id );
+ }
-void Dialog::on_radioSrcProtocol_toggled(bool checked)
-{
- if (checked)
- {
- unsigned char const& type = mSrcFormat.type();
- Q_ASSERT(isFormatType(type, Format::eProtocol));
+ void Dialog::on_radioSrcFile_toggled( bool checked )
+ {
+ if ( checked )
+ {
+ unsigned char const& type = mSrcFormat.type();
+ Q_ASSERT( isFormatType( type, Format::eFile ) );
- inputSrcDataset->setText(mSrcFormat.protocol());
- setButtonState(buttonSelectSrc, isFormatType(type, Format::eProtocol));
- }
-}
+ inputSrcDataset->clear();
+ setButtonState( buttonSelectSrc, isFormatType( type, Format::eProtocol ) );
+ }
+ }
-void Dialog::on_comboSrcFormats_currentIndexChanged(int index)
-{
- // Select source data format
- QString frmtCode = comboSrcFormats->currentText();
- mSrcFormat = mFrmts.find(frmtCode);
-
- resetSrcUi();
-}
+ void Dialog::on_radioSrcDirectory_toggled( bool checked )
+ {
+ if ( checked )
+ {
+ unsigned char const& type = mSrcFormat.type();
+ Q_ASSERT( isFormatType( type, Format::eDirectory ) );
-void Dialog::on_comboDstFormats_currentIndexChanged(int index)
-{
- // Select destination data format
- QString frmtCode = comboDstFormats->currentText();
- mDstFormat = mFrmts.find(frmtCode);
+ inputSrcDataset->clear();
+ setButtonState( buttonSelectSrc, isFormatType( type, Format::eProtocol ) );
+ }
+ }
- resetDstUi();
-}
+ void Dialog::on_radioSrcProtocol_toggled( bool checked )
+ {
+ if ( checked )
+ {
+ unsigned char const& type = mSrcFormat.type();
+ Q_ASSERT( isFormatType( type, Format::eProtocol ) );
-void Dialog::on_buttonSelectSrc_clicked()
-{
- QSettings settings;
- QString src;
-
- if (radioSrcFile->isChecked())
- {
- src = openFile();
- }
- else if (radioSrcDirectory->isChecked())
- {
- src = openDirectory();
- }
- else if (radioSrcProtocol->isChecked())
- {
- src = inputSrcDataset->text();
- }
- else
- {
- Q_ASSERT(!"SHOULD NEVER GET HERE");
- }
+ inputSrcDataset->setText( mSrcFormat.protocol() );
+ setButtonState( buttonSelectSrc, isFormatType( type, Format::eProtocol ) );
+ }
+ }
- inputSrcDataset->setText(src);
+ void Dialog::on_comboSrcFormats_currentIndexChanged( int index )
+ {
+ // Select source data format
+ QString frmtCode = comboSrcFormats->currentText();
+ mSrcFormat = mFrmts.find( frmtCode );
- if (!src.isEmpty())
- {
- populateLayers(src);
- }
-}
+ resetSrcUi();
+ }
-void Dialog::on_buttonSelectDst_clicked()
-{
- QSettings settings;
- QString dst;
- QString msg;
+ void Dialog::on_comboDstFormats_currentIndexChanged( int index )
+ {
+ // Select destination data format
+ QString frmtCode = comboDstFormats->currentText();
+ mDstFormat = mFrmts.find( frmtCode );
- unsigned char const& type = mDstFormat.type();
- if (isFormatType(type, Format::eProtocol))
- {
- dst = inputDstDataset->text();
+ resetDstUi();
+ }
- if (testConnection(dst))
+ void Dialog::on_buttonSelectSrc_clicked()
+ {
+ QSettings settings;
+ QString src;
+
+ if ( radioSrcFile->isChecked() )
{
- msg = tr("Successfully connected to: '") + dst + "'";
+ src = openFile();
}
+ else if ( radioSrcDirectory->isChecked() )
+ {
+ src = openDirectory();
+ }
+ else if ( radioSrcProtocol->isChecked() )
+ {
+ src = inputSrcDataset->text();
+ }
else
{
- msg = tr("Could not establish connection to: '") + dst + "'";
+ Q_ASSERT( !"SHOULD NEVER GET HERE" );
}
-
- QMessageBox::information(this, tr("OGR Converter"),
- msg, QMessageBox::Close);
- }
- else if (isFormatType(type, Format::eDirectory))
- {
- dst = openDirectory();
- }
- else if (isFormatType(type, Format::eFile))
- {
- dst = QFileDialog::getSaveFileName(this,
- tr("Choose a file name to save to"),
- "output", tr("OGR File Data Source (*.*)"));
- }
- else
- {
- Q_ASSERT(!"SHOULD NEVER GET HERE");
- }
- inputDstDataset->setText(dst);
-}
+ inputSrcDataset->setText( src );
+ if ( !src.isEmpty() )
+ {
+ populateLayers( src );
+ }
+ }
-}}} // namespace qgis::plugin::ogrconv
+ void Dialog::on_buttonSelectDst_clicked()
+ {
+ QSettings settings;
+ QString dst;
+ QString msg;
+ unsigned char const& type = mDstFormat.type();
+ if ( isFormatType( type, Format::eProtocol ) )
+ {
+ dst = inputDstDataset->text();
+
+ if ( testConnection( dst ) )
+ {
+ msg = tr( "Successfully connected to: '" ) + dst + "'";
+ }
+ else
+ {
+ msg = tr( "Could not establish connection to: '" ) + dst + "'";
+ }
+
+ QMessageBox::information( this, tr( "OGR Converter" ),
+ msg, QMessageBox::Close );
+ }
+ else if ( isFormatType( type, Format::eDirectory ) )
+ {
+ dst = openDirectory();
+ }
+ else if ( isFormatType( type, Format::eFile ) )
+ {
+ dst = QFileDialog::getSaveFileName( this,
+ tr( "Choose a file name to save to" ),
+ "output", tr( "OGR File Data Source (*.*)" ) );
+ }
+ else
+ {
+ Q_ASSERT( !"SHOULD NEVER GET HERE" );
+ }
+
+ inputDstDataset->setText( dst );
+ }
+
+
+ }
+ }
+} // namespace qgis::plugin::ogrconv
+
Modified: trunk/qgis/src/plugins/ogr_converter/translator.cpp
===================================================================
--- trunk/qgis/src/plugins/ogr_converter/translator.cpp 2008-08-27 21:31:59 UTC (rev 9194)
+++ trunk/qgis/src/plugins/ogr_converter/translator.cpp 2008-08-27 21:56:29 UTC (rev 9195)
@@ -13,407 +13,415 @@
// qgis::plugin::ogrconv
#include "translator.h"
// QGIS
+#include <qgsapplication.h>
#include <qgslogger.h>
// Qt4
#include <QString>
-namespace qgis { namespace plugin { namespace ogrconv {
+namespace qgis
+{
+ namespace plugin
+ {
+ namespace ogrconv
+ {
// GDAL/OGR loaded into private namespace
#include <ogr_api.h>
-Translator::Translator()
- : mDstUpdate(false), mDstLayerOverwrite(true)
-{
-}
+ Translator::Translator()
+ : mDstUpdate( false ), mDstLayerOverwrite( true )
+ {
+ }
-Translator::Translator(QString const& src, QString const& dst, QString const& format)
- : mSrcUrl(src), mDstUrl(dst), mDstFormat(format),
- mDstUpdate(false), mDstLayerOverwrite(true)
-{
-}
+ Translator::Translator( QString const& src, QString const& dst, QString const& format )
+ : mSrcUrl( src ), mDstUrl( dst ), mDstFormat( format ),
+ mDstUpdate( false ), mDstLayerOverwrite( true )
+ {
+ }
-QString const& Translator::targetFormat() const
-{
- return mDstFormat;
-}
+ QString const& Translator::targetFormat() const
+ {
+ return mDstFormat;
+ }
-void Translator::setTargetFormat(QString const& format)
-{
- mDstFormat = format;
-}
+ void Translator::setTargetFormat( QString const& format )
+ {
+ mDstFormat = format;
+ }
-QString const& Translator::targetLayer() const
-{
- return mDstLayer;
-}
+ QString const& Translator::targetLayer() const
+ {
+ return mDstLayer;
+ }
-void Translator::setTargetLayer(QString const& layer)
-{
- mDstLayer = layer;
-}
+ void Translator::setTargetLayer( QString const& layer )
+ {
+ mDstLayer = layer;
+ }
-QString const& Translator::sourceLayer() const
-{
- return mSrcLayer;
-}
+ QString const& Translator::sourceLayer() const
+ {
+ return mSrcLayer;
+ }
-void Translator::setSourceLayer(QString const& layer)
-{
- mSrcLayer = layer;
-}
+ void Translator::setSourceLayer( QString const& layer )
+ {
+ mSrcLayer = layer;
+ }
-QString const& Translator::targetReferenceSystem() const
-{
- return mDstSrs;
-}
+ QString const& Translator::targetReferenceSystem() const
+ {
+ return mDstSrs;
+ }
-void Translator::setTargetReferenceSystem(QString const& srs)
-{
- mDstSrs = srs;
-}
+ void Translator::setTargetReferenceSystem( QString const& srs )
+ {
+ mDstSrs = srs;
+ }
-QString const& Translator::sourceReferenceSystem() const
-{
- return mSrcSrs;
-}
+ QString const& Translator::sourceReferenceSystem() const
+ {
+ return mSrcSrs;
+ }
-void Translator::setSourceReferenceSystem(QString const& srs)
-{
- mSrcSrs = srs;
-}
+ void Translator::setSourceReferenceSystem( QString const& srs )
+ {
+ mSrcSrs = srs;
+ }
-bool Translator::isTargetUpdate() const
-{
- return mDstUpdate;
-}
+ bool Translator::isTargetUpdate() const
+ {
+ return mDstUpdate;
+ }
-void Translator::setUpdateTarget(bool update)
-{
- mDstUpdate = update;
-}
+ void Translator::setUpdateTarget( bool update )
+ {
+ mDstUpdate = update;
+ }
-bool Translator::isTargetLayerOverwrite() const
-{
- return mDstLayerOverwrite;
-}
+ bool Translator::isTargetLayerOverwrite() const
+ {
+ return mDstLayerOverwrite;
+ }
-bool Translator::translate()
-{
- bool success = false;
+ bool Translator::translate()
+ {
+ bool success = false;
- // TODO: RAII for OGR handlers!!!
+ // TODO: RAII for OGR handlers!!!
- // Open input data source
- OGRDataSourceH srcDs = openDataSource(mSrcUrl, true);
- if (0 == srcDs)
- {
- QgsDebugMsg("Open source failed: " + mSrcUrl);
- return false;
- }
+ // Open input data source
+ OGRDataSourceH srcDs = openDataSource( mSrcUrl, true );
+ if ( 0 == srcDs )
+ {
+ QgsDebugMsg( "Open source failed: " + mSrcUrl );
+ return false;
+ }
- // Open output data source
- OGRDataSourceH dstDs = openDataTarget(mDstUrl, mDstUpdate);
- if (0 == dstDs)
- {
- QgsDebugMsg("Open target failed: " + mDstUrl);
- OGR_DS_Destroy(srcDs);
- return false;
- }
+ // Open output data source
+ OGRDataSourceH dstDs = openDataTarget( mDstUrl, mDstUpdate );
+ if ( 0 == dstDs )
+ {
+ QgsDebugMsg( "Open target failed: " + mDstUrl );
+ OGR_DS_Destroy( srcDs );
+ return false;
+ }
- // TODO: Support translation of all layers from input data source
- //for (int i = 0; i < OGR_DS_GetLayerCount(); ++i)
+ // TODO: Support translation of all layers from input data source
+ //for (int i = 0; i < OGR_DS_GetLayerCount(); ++i)
- OGRLayerH srcLayer = OGR_DS_GetLayerByName(srcDs, mSrcLayer.toAscii().constData());
- if (0 == srcLayer)
- {
- QgsDebugMsg("Can not find layer: " + mSrcLayer);
- OGR_DS_Destroy(srcDs);
- OGR_DS_Destroy(dstDs);
- return false;
- }
+ OGRLayerH srcLayer = OGR_DS_GetLayerByName( srcDs, mSrcLayer.toAscii().constData() );
+ if ( 0 == srcLayer )
+ {
+ QgsDebugMsg( "Can not find layer: " + mSrcLayer );
+ OGR_DS_Destroy( srcDs );
+ OGR_DS_Destroy( dstDs );
+ return false;
+ }
- if (mDstLayer.isEmpty())
- {
- QgsDebugMsg("Using source layer name: " + mDstLayer);
- mDstLayer = mSrcLayer;
- }
+ if ( mDstLayer.isEmpty() )
+ {
+ QgsDebugMsg( "Using source layer name: " + mDstLayer );
+ mDstLayer = mSrcLayer;
+ }
- QgsDebugMsg("START LAYER TRANSLATION ------");
+ QgsDebugMsg( "START LAYER TRANSLATION ------" );
- success = translateLayer(srcDs, srcLayer, dstDs);
+ success = translateLayer( srcDs, srcLayer, dstDs );
- QgsDebugMsg("END LAYER TRANSLATION ------");
+ QgsDebugMsg( "END LAYER TRANSLATION ------" );
- OGR_DS_Destroy(dstDs);
- OGR_DS_Destroy(srcDs);
+ OGR_DS_Destroy( dstDs );
+ OGR_DS_Destroy( srcDs );
- return success;
-}
+ return success;
+ }
-bool Translator::translateLayer(OGRDataSourceH srcDs, OGRLayerH srcLayer, OGRDataSourceH dstDs)
-{
- // Implementation based on TranslateLayer function from ogr2ogr.cpp, from GDAL/OGR.
- Q_ASSERT(0 != srcDs);
- Q_ASSERT(0 != srcLayer);
- Q_ASSERT(0 != dstDs);
+ bool Translator::translateLayer( OGRDataSourceH srcDs, OGRLayerH srcLayer, OGRDataSourceH dstDs )
+ {
+ // Implementation based on TranslateLayer function from ogr2ogr.cpp, from GDAL/OGR.
+ Q_ASSERT( 0 != srcDs );
+ Q_ASSERT( 0 != srcLayer );
+ Q_ASSERT( 0 != dstDs );
- bool success = false;
+ bool success = false;
- // Get source layer schema
- OGRFeatureDefnH srcLayerDefn = OGR_L_GetLayerDefn(srcLayer);
- Q_ASSERT(0 != srcLayerDefn);
+ // Get source layer schema
+ OGRFeatureDefnH srcLayerDefn = OGR_L_GetLayerDefn( srcLayer );
+ Q_ASSERT( 0 != srcLayerDefn );
- // Find if layer exists in target data source
- int dstLayerIndex = 0;
- OGRLayerH dstLayer = findLayer(dstDs, mDstLayer, dstLayerIndex);
+ // Find if layer exists in target data source
+ int dstLayerIndex = 0;
+ OGRLayerH dstLayer = findLayer( dstDs, mDstLayer, dstLayerIndex );
- // If the user requested overwrite, and we have the layer in question
- // we need to delete it now so it will get recreated overwritten
- if (0 != dstLayer && mDstLayerOverwrite
- && 0 != OGR_DS_TestCapability(dstDs, ODsCDeleteLayer))
- {
- if (OGRERR_NONE != OGR_DS_DeleteLayer(dstDs, dstLayerIndex))
+ // If the user requested overwrite, and we have the layer in question
+ // we need to delete it now so it will get recreated overwritten
+ if ( 0 != dstLayer && mDstLayerOverwrite
+ && 0 != OGR_DS_TestCapability( dstDs, ODsCDeleteLayer ) )
{
- QgsDebugMsg("Delete layer failed when overwrite requested");
+ if ( OGRERR_NONE != OGR_DS_DeleteLayer( dstDs, dstLayerIndex ) )
+ {
+ QgsDebugMsg( "Delete layer failed when overwrite requested" );
return false;
+ }
}
- }
- if (0 == dstLayer)
- {
- QgsDebugMsg("Destination layer not found, will attempt to create");
+ if ( 0 == dstLayer )
+ {
+ QgsDebugMsg( "Destination layer not found, will attempt to create" );
- // If the layer does not exist, then create it
- if (0 == OGR_DS_TestCapability(dstDs, ODsCCreateLayer))
- {
- QgsDebugMsg("Layer " + mDstLayer + " not found, and CreateLayer not supported by driver");
+ // If the layer does not exist, then create it
+ if ( 0 == OGR_DS_TestCapability( dstDs, ODsCCreateLayer ) )
+ {
+ QgsDebugMsg( "Layer " + mDstLayer + " not found, and CreateLayer not supported by driver" );
return false;
- }
+ }
- // FIXME: Do we need it here?
- //CPLErrorReset();
+ // FIXME: Do we need it here?
+ //CPLErrorReset();
- // TODO: -nlt option support
- OGRwkbGeometryType geomType = OGR_FD_GetGeomType(srcLayerDefn);
-
- // TODO: Implement SRS transformation
- OGRSpatialReferenceH dstLayerSrs = OGR_L_GetSpatialRef(srcLayer);
+ // TODO: -nlt option support
+ OGRwkbGeometryType geomType = OGR_FD_GetGeomType( srcLayerDefn );
- dstLayer = OGR_DS_CreateLayer(dstDs, mDstLayer.toAscii().constData(),
- dstLayerSrs, geomType, 0);
- }
- // TODO: Append and createion options not implemented
- // else if (!mDstLayerAppend)
-
- Q_ASSERT(0 != dstLayer);
+ // TODO: Implement SRS transformation
+ OGRSpatialReferenceH dstLayerSrs = OGR_L_GetSpatialRef( srcLayer );
- // Transfer attributes schema
- if (!copyFields(dstLayer, srcLayerDefn))
- {
- QgsDebugMsg("Faild to copy fields from layer " + mSrcLayer);
- return false;
- }
+ dstLayer = OGR_DS_CreateLayer( dstDs, mDstLayer.toAscii().constData(),
+ dstLayerSrs, geomType, 0 );
+ }
+ // TODO: Append and createion options not implemented
+ // else if (!mDstLayerAppend)
- // Transfer features
- success = copyFeatures(srcLayer, dstLayer);
+ Q_ASSERT( 0 != dstLayer );
- return success;
-}
+ // Transfer attributes schema
+ if ( !copyFields( dstLayer, srcLayerDefn ) )
+ {
+ QgsDebugMsg( "Faild to copy fields from layer " + mSrcLayer );
+ return false;
+ }
-bool Translator::copyFields(OGRFeatureDefnH layerDefn, OGRLayerH layer)
-{
- Q_ASSERT(0 != layerDefn);
- Q_ASSERT(0 != layer);
+ // Transfer features
+ success = copyFeatures( srcLayer, dstLayer );
- int const count = OGR_FD_GetFieldCount(layerDefn);
- for (int i = 0; i < count; ++i)
- {
- OGRFieldDefnH fieldDefn = OGR_FD_GetFieldDefn(layerDefn, i);
- Q_ASSERT(0 != fieldDefn);
+ return success;
+ }
- if (OGRERR_NONE != OGR_L_CreateField(layer, fieldDefn, true))
+ bool Translator::copyFields( OGRFeatureDefnH layerDefn, OGRLayerH layer )
+ {
+ Q_ASSERT( 0 != layerDefn );
+ Q_ASSERT( 0 != layer );
+
+ int const count = OGR_FD_GetFieldCount( layerDefn );
+ for ( int i = 0; i < count; ++i )
{
+ OGRFieldDefnH fieldDefn = OGR_FD_GetFieldDefn( layerDefn, i );
+ Q_ASSERT( 0 != fieldDefn );
+
+ if ( OGRERR_NONE != OGR_L_CreateField( layer, fieldDefn, true ) )
+ {
return false;
+ }
}
- }
- return true;
-}
+ return true;
+ }
-bool Translator::copyFeatures(OGRLayerH srcLayer, OGRLayerH dstLayer)
-{
- Q_ASSERT(0 != srcLayer);
- Q_ASSERT(0 != dstLayer);
+ bool Translator::copyFeatures( OGRLayerH srcLayer, OGRLayerH dstLayer )
+ {
+ Q_ASSERT( 0 != srcLayer );
+ Q_ASSERT( 0 != dstLayer );
- bool success = false;
- OGRFeatureDefnH srcLayerDefn = OGR_L_GetLayerDefn(srcLayer);
- long srcFid = 0;
- long count = 0;
+ bool success = false;
+ OGRFeatureDefnH srcLayerDefn = OGR_L_GetLayerDefn( srcLayer );
+ long srcFid = 0;
+ long count = 0;
- // TODO: RAII for feature handlers!!!
-
- while (true)
- {
- OGRFeatureH srcFeat = OGR_L_GetNextFeature(srcLayer);
- if (0 == srcFeat)
+ // TODO: RAII for feature handlers!!!
+
+ while ( true )
{
- QgsDebugMsg("Next source feature is null, finishing");
+ OGRFeatureH srcFeat = OGR_L_GetNextFeature( srcLayer );
+ if ( 0 == srcFeat )
+ {
+ QgsDebugMsg( "Next source feature is null, finishing" );
success = true;
break;
- }
- srcFid = OGR_F_GetFID(srcFeat);
+ }
+ srcFid = OGR_F_GetFID( srcFeat );
- // FIXME: Do we need it here?
- //CPLErrorReset();
+ // FIXME: Do we need it here?
+ //CPLErrorReset();
- OGRFeatureH dstFeat = OGR_F_Create(srcLayerDefn);
+ OGRFeatureH dstFeat = OGR_F_Create( srcLayerDefn );
- if (OGRERR_NONE != OGR_F_SetFrom(dstFeat, srcFeat, true))
- {
- QString msg = QString("Unable to translate feature %1 from layer %2").arg(srcFid).arg(mSrcLayer);
- QgsDebugMsg(msg);
+ if ( OGRERR_NONE != OGR_F_SetFrom( dstFeat, srcFeat, true ) )
+ {
+ QString msg = QString( "Unable to translate feature %1 from layer %2" ).arg( srcFid ).arg( mSrcLayer );
+ QgsDebugMsg( msg );
- OGR_F_Destroy(srcFeat);
- OGR_F_Destroy(dstFeat);
+ OGR_F_Destroy( srcFeat );
+ OGR_F_Destroy( dstFeat );
success = false;
break;
- }
- Q_ASSERT(0 != dstFeat);
+ }
+ Q_ASSERT( 0 != dstFeat );
- // TODO: Transform feature geometry
+ // TODO: Transform feature geometry
- OGR_F_Destroy(srcFeat);
-
- // FIXME: Do we need it here?
- //CPLErrorReset();
+ OGR_F_Destroy( srcFeat );
- // TODO: Skip failures support
- if (OGRERR_NONE != OGR_L_CreateFeature(dstLayer, dstFeat))
- {
- QgsDebugMsg("Feature creation failed");
- OGR_F_Destroy(dstFeat);
+ // FIXME: Do we need it here?
+ //CPLErrorReset();
+
+ // TODO: Skip failures support
+ if ( OGRERR_NONE != OGR_L_CreateFeature( dstLayer, dstFeat ) )
+ {
+ QgsDebugMsg( "Feature creation failed" );
+ OGR_F_Destroy( dstFeat );
success = false;
break;
+ }
+
+ OGR_F_Destroy( dstFeat );
+
+ count += 1;
+ success = true;
}
- OGR_F_Destroy(dstFeat);
-
- count += 1;
- success = true;
- }
+ QgsDebugMsg( QString( "Number of copied features: %1" ).arg( count ) );
- QgsDebugMsg(QString("Number of copied features: %1").arg(count));
+ return success;
+ }
- return success;
-}
+ OGRSFDriverH Translator::findDriver( QString const& name )
+ {
+ if ( OGRGetDriverCount() <= 0 )
+ {
+ QgsApplication::registerOgrDrivers();
+ }
+ int const drvCount = OGRGetDriverCount();
-OGRSFDriverH Translator::findDriver(QString const& name)
-{
- if (OGRGetDriverCount() <= 0)
- {
- OGRRegisterAll();
- }
- int const drvCount = OGRGetDriverCount();
+ OGRSFDriverH drv = 0;
+ QString drvName;
- OGRSFDriverH drv = 0;
- QString drvName;
-
- for (int i = 0; i < drvCount; ++i)
- {
- OGRSFDriverH drvTmp = OGRGetDriver(i);
- Q_CHECK_PTR(drvTmp);
- if (0 != drvTmp)
+ for ( int i = 0; i < drvCount; ++i )
{
- drvName = OGR_Dr_GetName(drvTmp);
- if (name == drvName
- && 0 != OGR_Dr_TestCapability(drvTmp, ODrCCreateDataSource))
+ OGRSFDriverH drvTmp = OGRGetDriver( i );
+ Q_CHECK_PTR( drvTmp );
+ if ( 0 != drvTmp )
+ {
+ drvName = OGR_Dr_GetName( drvTmp );
+ if ( name == drvName
+ && 0 != OGR_Dr_TestCapability( drvTmp, ODrCCreateDataSource ) )
{
- QgsDebugMsg("Driver found: " + name);
- drv = drvTmp;
- break;
+ QgsDebugMsg( "Driver found: " + name );
+ drv = drvTmp;
+ break;
}
+ }
}
- }
- return drv;
-}
+ return drv;
+ }
-OGRLayerH Translator::findLayer(OGRDataSourceH ds, QString const& name, int& index)
-{
- if (0 == ds)
- {
- index = -1;
- return 0;
- }
+ OGRLayerH Translator::findLayer( OGRDataSourceH ds, QString const& name, int& index )
+ {
+ if ( 0 == ds )
+ {
+ index = -1;
+ return 0;
+ }
- OGRLayerH lyr = 0;
- int const count = OGR_DS_GetLayerCount(ds);
+ OGRLayerH lyr = 0;
+ int const count = OGR_DS_GetLayerCount( ds );
- for (int i = 0; i < count; ++i)
- {
- OGRLayerH lyrTmp = OGR_DS_GetLayer(ds, i);
- if (0 != lyrTmp)
+ for ( int i = 0; i < count; ++i )
{
- OGRFeatureDefnH defn = OGR_L_GetLayerDefn(lyrTmp);
- Q_ASSERT(0 != defn);
-
- QString nameTmp(OGR_FD_GetName(defn));
- if (name == nameTmp)
+ OGRLayerH lyrTmp = OGR_DS_GetLayer( ds, i );
+ if ( 0 != lyrTmp )
+ {
+ OGRFeatureDefnH defn = OGR_L_GetLayerDefn( lyrTmp );
+ Q_ASSERT( 0 != defn );
+
+ QString nameTmp( OGR_FD_GetName( defn ) );
+ if ( name == nameTmp )
{
- QgsDebugMsg("Layer found: " + nameTmp);
- index = i;
- lyr = lyrTmp;
- break;
+ QgsDebugMsg( "Layer found: " + nameTmp );
+ index = i;
+ lyr = lyrTmp;
+ break;
}
+ }
}
- }
- return lyr;
-}
+ return lyr;
+ }
-OGRDataSourceH Translator::openDataSource(QString const& url, bool readOnly)
-{
- OGRDataSourceH ds = OGROpen(url.toAscii().constData(), !readOnly, 0);
- if (0 == ds)
- {
- QgsDebugMsg("Failed to open: " + url);
- }
+ OGRDataSourceH Translator::openDataSource( QString const& url, bool readOnly )
+ {
+ OGRDataSourceH ds = OGROpen( url.toAscii().constData(), !readOnly, 0 );
+ if ( 0 == ds )
+ {
+ QgsDebugMsg( "Failed to open: " + url );
+ }
- return ds;
-}
+ return ds;
+ }
-OGRDataSourceH Translator::openDataTarget(QString const& url, bool update)
-{
- OGRDataSourceH ds = 0;
+ OGRDataSourceH Translator::openDataTarget( QString const& url, bool update )
+ {
+ OGRDataSourceH ds = 0;
- if (update)
- {
- // Try opening the output datasource as an existing, writable
- ds = openDataSource(url, false);
- }
- else
- {
- // Find the output driver
- OGRSFDriverH drv = findDriver(mDstFormat);
- if (0 == drv)
+ if ( update )
{
- QgsDebugMsg("Could not find driver: " + mDstFormat);
+ // Try opening the output datasource as an existing, writable
+ ds = openDataSource( url, false );
+ }
+ else
+ {
+ // Find the output driver
+ OGRSFDriverH drv = findDriver( mDstFormat );
+ if ( 0 == drv )
+ {
+ QgsDebugMsg( "Could not find driver: " + mDstFormat );
return 0;
- }
+ }
- // Create the output data source
- //
- // TODO: Add support for creation options
- ds = OGR_Dr_CreateDataSource(drv, url.toAscii().constData(), 0);
- if (0 == ds)
- {
- QgsDebugMsg("Failed to open: " + url);
+ // Create the output data source
+ //
+ // TODO: Add support for creation options
+ ds = OGR_Dr_CreateDataSource( drv, url.toAscii().constData(), 0 );
+ if ( 0 == ds )
+ {
+ QgsDebugMsg( "Failed to open: " + url );
+ }
}
- }
- return ds;
-}
+ return ds;
+ }
-}}} // namespace qgis::plugin::ogrconv
+ }
+ }
+} // namespace qgis::plugin::ogrconv
Modified: trunk/qgis/src/plugins/spit/qgsshapefile.cpp
===================================================================
--- trunk/qgis/src/plugins/spit/qgsshapefile.cpp 2008-08-27 21:31:59 UTC (rev 9194)
+++ trunk/qgis/src/plugins/spit/qgsshapefile.cpp 2008-08-27 21:56:29 UTC (rev 9195)
@@ -30,6 +30,7 @@
#include <QTextCodec>
#include <QFileInfo>
+#include "qgsapplication.h"
#include "qgsdbfbase.h"
#include "cpl_error.h"
#include "qgsshapefile.h"
@@ -51,7 +52,7 @@
{
fileName = name;
features = 0;
- OGRRegisterAll();
+ QgsApplication::registerOgrDrivers();
ogrDataSource = OGROpen( QFile::encodeName( fileName ).constData(), FALSE, NULL );
if ( ogrDataSource != NULL )
{
@@ -206,7 +207,7 @@
dbf.read(( char * )&fda, sizeof( fda ) );
switch ( fda.field_type )
{
- case 'N': if (( int )fda.field_decimal>0 )
+ case 'N': if (( int )fda.field_decimal > 0 )
column_types.push_back( "float" );
else
column_types.push_back( "int" );
Modified: trunk/qgis/src/providers/ogr/qgsogrprovider.cpp
===================================================================
--- trunk/qgis/src/providers/ogr/qgsogrprovider.cpp 2008-08-27 21:31:59 UTC (rev 9194)
+++ trunk/qgis/src/providers/ogr/qgsogrprovider.cpp 2008-08-27 21:56:29 UTC (rev 9195)
@@ -62,7 +62,7 @@
ogrLayer( 0 ),
ogrDriver( 0 )
{
- OGRRegisterAll();
+ QgsApplication::registerOgrDrivers();
// set the selection rectangle pointer to 0
mSelectionRectangle = 0;
@@ -434,7 +434,7 @@
{
switch ( mAttributeFields[attindex].type() )
{
- case QVariant::String: value = QVariant( mEncoding->toUnicode( OGR_F_GetFieldAsString( ogrFet,attindex ) ) ); break;
+ case QVariant::String: value = QVariant( mEncoding->toUnicode( OGR_F_GetFieldAsString( ogrFet, attindex ) ) ); break;
case QVariant::Int: value = QVariant( OGR_F_GetFieldAsInteger( ogrFet, attindex ) ); break;
case QVariant::Double: value = QVariant( OGR_F_GetFieldAsDouble( ogrFet, attindex ) ); break;
//case QVariant::DateTime: value = QVariant(QDateTime::fromString(str)); break;
@@ -924,7 +924,7 @@
}
// register ogr plugins
- OGRRegisterAll();
+ QgsApplication::registerOgrDrivers();
// first get the GDAL driver manager
@@ -1117,7 +1117,7 @@
const std::list<std::pair<QString, QString> >& attributes )
{
OGRSFDriverH driver;
- OGRRegisterAll();
+ QgsApplication::registerOgrDrivers();
driver = OGRGetDriverByName( format.toAscii() );
if ( driver == NULL )
{
More information about the QGIS-commit
mailing list