QgsDataSourceUri QgsAuxiliaryStorage::parseOgrUri( const QgsDataSourceUri &uri ) { QgsDataSourceUri newUri; // parsing for ogr style uri : // " filePath|layername='tableName' table="" sql=" QStringList uriParts = uri.uri().split( '|' ); if ( uriParts.count() < 2 ) return newUri; const QString databasePath = uriParts[0].replace( ' ', "" ); const QString table = uriParts[1]; QStringList tableParts = table.split( ' ' ); if ( tableParts.count() < 1 ) return newUri; const QString tableName = tableParts[0].replace( QStringLiteral( "layername=" ), QString() ); newUri.setDataSource( QString(), tableName, QString() ); newUri.setDatabase( databasePath ); return newUri; }
void QgsOSMExportDialog::onOK() { if ( !openDatabase() ) return; QgsOSMDatabase::ExportType type; if ( radPoints->isChecked() ) type = QgsOSMDatabase::Point; else if ( radPolylines->isChecked() ) type = QgsOSMDatabase::Polyline; else type = QgsOSMDatabase::Polygon; buttonBox->setEnabled( false ); QApplication::setOverrideCursor( Qt::WaitCursor ); QStringList tagKeys; QStringList notNullTagKeys; for ( int i = 0; i < mTagsModel->rowCount(); ++i ) { QStandardItem* item = mTagsModel->item( i, 0 ); if ( item->checkState() == Qt::Checked ) tagKeys << item->text(); QStandardItem* item2 = mTagsModel->item( i, 2 ); if ( item2->checkState() == Qt::Checked ) notNullTagKeys << item->text(); } bool res = mDatabase->exportSpatiaLite( type, editLayerName->text(), tagKeys, notNullTagKeys ); // load the layer into canvas if that was requested if ( chkLoadWhenFinished->isChecked() ) { QgsDataSourceUri uri; uri.setDatabase( editDbFileName->text() ); uri.setDataSource( QString(), editLayerName->text(), "geometry" ); QgsVectorLayer* vlayer = new QgsVectorLayer( uri.uri(), editLayerName->text(), "spatialite" ); if ( vlayer->isValid() ) QgsMapLayerRegistry::instance()->addMapLayer( vlayer ); } QApplication::restoreOverrideCursor(); buttonBox->setEnabled( true ); if ( res ) { QMessageBox::information( this, tr( "OpenStreetMap export" ), tr( "Export has been successful." ) ); } else { QMessageBox::critical( this, tr( "OpenStreetMap export" ), tr( "Failed to export OSM data:\n%1" ).arg( mDatabase->errorString() ) ); } mDatabase->close(); }