[QGIS Commit] r14825 - in trunk/qgis/src: plugins/delimited_text
providers/delimitedtext
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Thu Dec 2 03:32:12 EST 2010
Author: jef
Date: 2010-12-02 00:32:12 -0800 (Thu, 02 Dec 2010)
New Revision: 14825
Modified:
trunk/qgis/src/plugins/delimited_text/qgsdelimitedtextplugingui.cpp
trunk/qgis/src/providers/delimitedtext/qgsdelimitedtextprovider.cpp
trunk/qgis/src/providers/delimitedtext/qgsdelimitedtextprovider.h
Log:
delimited text provider: fix indentation, some warnings and use
intersection only when requested in select().
Modified: trunk/qgis/src/plugins/delimited_text/qgsdelimitedtextplugingui.cpp
===================================================================
--- trunk/qgis/src/plugins/delimited_text/qgsdelimitedtextplugingui.cpp 2010-12-02 04:25:59 UTC (rev 14824)
+++ trunk/qgis/src/plugins/delimited_text/qgsdelimitedtextplugingui.cpp 2010-12-02 08:32:12 UTC (rev 14825)
@@ -104,23 +104,23 @@
.arg( txtDelimiter->text() )
.arg( delimiterType );
- if( geomTypeXY->isChecked())
- {
- if ( !cmbXField->currentText().isEmpty() && !cmbYField->currentText().isEmpty() )
- {
- uri += QString( "&xField=%1&yField=%2" )
- .arg( cmbXField->currentText() )
- .arg( cmbYField->currentText() );
- }
- }
- else
- {
- if( ! cmbWktField->currentText().isEmpty() )
- {
- uri += QString( "&wktField=%1" )
- .arg( cmbWktField->currentText() );
- }
- }
+ if ( geomTypeXY->isChecked() )
+ {
+ if ( !cmbXField->currentText().isEmpty() && !cmbYField->currentText().isEmpty() )
+ {
+ uri += QString( "&xField=%1&yField=%2" )
+ .arg( cmbXField->currentText() )
+ .arg( cmbYField->currentText() );
+ }
+ }
+ else
+ {
+ if ( ! cmbWktField->currentText().isEmpty() )
+ {
+ uri += QString( "&wktField=%1" )
+ .arg( cmbWktField->currentText() );
+ }
+ }
int skipLines = rowCounter->value();
if ( skipLines > 0 )
@@ -222,9 +222,9 @@
disconnect( cmbXField, SIGNAL( currentIndexChanged( int ) ), this, SLOT( enableAccept() ) );
disconnect( cmbYField, SIGNAL( currentIndexChanged( int ) ), this, SLOT( enableAccept() ) );
disconnect( cmbWktField, SIGNAL( currentIndexChanged( int ) ), this, SLOT( enableAccept() ) );
- disconnect(geomTypeXY, SIGNAL(toggled(bool)), cmbXField, SLOT(setEnabled(bool)));
- disconnect(geomTypeXY, SIGNAL(toggled(bool)), cmbYField, SLOT(setEnabled(bool)));
- disconnect(geomTypeXY, SIGNAL(toggled(bool)), cmbWktField, SLOT(setDisabled(bool)));
+ disconnect( geomTypeXY, SIGNAL( toggled( bool ) ), cmbXField, SLOT( setEnabled( bool ) ) );
+ disconnect( geomTypeXY, SIGNAL( toggled( bool ) ), cmbYField, SLOT( setEnabled( bool ) ) );
+ disconnect( geomTypeXY, SIGNAL( toggled( bool ) ), cmbWktField, SLOT( setDisabled( bool ) ) );
QString columnX = cmbXField->currentText();
QString columnY = cmbYField->currentText();
@@ -241,7 +241,7 @@
cmbYField->setEnabled( false );
cmbWktField->setEnabled( false );
- if( ! haveValidFileAndDelimiters()) return;
+ if ( ! haveValidFileAndDelimiters() ) return;
QFile file( txtFilePath->text() );
if ( !file.open( QIODevice::ReadOnly ) )
@@ -283,28 +283,28 @@
cmbXField->addItem( field );
cmbYField->addItem( field );
- cmbWktField->addItem( field );
- haveFields = true;
+ cmbWktField->addItem( field );
+ haveFields = true;
}
int indexWkt = -1;
- if( ! columnWkt.isEmpty() )
+ if ( ! columnWkt.isEmpty() )
{
- indexWkt = cmbWktField->findText( columnWkt );
+ indexWkt = cmbWktField->findText( columnWkt );
}
- if( indexWkt < 0 )
+ if ( indexWkt < 0 )
{
- indexWkt = cmbWktField->findText("wkt", Qt::MatchContains );
+ indexWkt = cmbWktField->findText( "wkt", Qt::MatchContains );
}
- if( indexWkt < 0 )
+ if ( indexWkt < 0 )
{
- indexWkt = cmbWktField->findText("geometry", Qt::MatchContains );
+ indexWkt = cmbWktField->findText( "geometry", Qt::MatchContains );
}
- if( indexWkt < 0 )
+ if ( indexWkt < 0 )
{
- indexWkt = cmbWktField->findText("shape", Qt::MatchContains );
+ indexWkt = cmbWktField->findText( "shape", Qt::MatchContains );
}
- cmbWktField->setCurrentIndex( indexWkt);
+ cmbWktField->setCurrentIndex( indexWkt );
int indexX = -1;
if ( !columnX.isEmpty() )
@@ -343,26 +343,26 @@
cmbYField->setCurrentIndex( indexY );
- bool isXY = (geomTypeXY->isChecked() && indexX >= 0 && indexY >= 0) || indexWkt < 0;
+ bool isXY = ( geomTypeXY->isChecked() && indexX >= 0 && indexY >= 0 ) || indexWkt < 0;
- geomTypeXY->setChecked( isXY );
+ geomTypeXY->setChecked( isXY );
geomTypeWKT->setChecked( ! isXY );
- if( haveFields )
+ if ( haveFields )
{
- geomTypeXY->setEnabled(true);
- geomTypeWKT->setEnabled(true);
- cmbXField->setEnabled( isXY );
- cmbYField->setEnabled( isXY );
- cmbWktField->setEnabled( ! isXY );
+ geomTypeXY->setEnabled( true );
+ geomTypeWKT->setEnabled( true );
+ cmbXField->setEnabled( isXY );
+ cmbYField->setEnabled( isXY );
+ cmbWktField->setEnabled( ! isXY );
- connect( cmbXField, SIGNAL( currentIndexChanged( int ) ), this, SLOT( enableAccept() ) );
- connect( cmbYField, SIGNAL( currentIndexChanged( int ) ), this, SLOT( enableAccept() ) );
- connect( cmbWktField, SIGNAL( currentIndexChanged( int ) ), this, SLOT( enableAccept() ) );
- connect(geomTypeXY, SIGNAL(toggled(bool)), cmbXField, SLOT(setEnabled(bool)));
- connect(geomTypeXY, SIGNAL(toggled(bool)), cmbYField, SLOT(setEnabled(bool)));
- connect(geomTypeXY, SIGNAL(toggled(bool)), cmbWktField, SLOT(setDisabled(bool)));
+ connect( cmbXField, SIGNAL( currentIndexChanged( int ) ), this, SLOT( enableAccept() ) );
+ connect( cmbYField, SIGNAL( currentIndexChanged( int ) ), this, SLOT( enableAccept() ) );
+ connect( cmbWktField, SIGNAL( currentIndexChanged( int ) ), this, SLOT( enableAccept() ) );
+ connect( geomTypeXY, SIGNAL( toggled( bool ) ), cmbXField, SLOT( setEnabled( bool ) ) );
+ connect( geomTypeXY, SIGNAL( toggled( bool ) ), cmbYField, SLOT( setEnabled( bool ) ) );
+ connect( geomTypeXY, SIGNAL( toggled( bool ) ), cmbWktField, SLOT( setDisabled( bool ) ) );
}
// clear the sample text box
@@ -414,28 +414,28 @@
void QgsDelimitedTextPluginGui::updateFieldsAndEnable()
{
- updateFieldLists();
- enableAccept();
+ updateFieldLists();
+ enableAccept();
}
void QgsDelimitedTextPluginGui::enableAccept()
{
- // If the geometry type field is enabled then there must be
- // a valid file, and it must be
+ // If the geometry type field is enabled then there must be
+ // a valid file, and it must be
bool enabled = haveValidFileAndDelimiters();
if ( enabled )
{
- if( geomTypeXY->isChecked() )
- {
- enabled = !( cmbXField->currentText().isEmpty() || cmbYField->currentText().isEmpty() || cmbXField->currentText() == cmbYField->currentText() );
- }
- else
- {
- enabled = !cmbWktField->currentText().isEmpty();
- }
+ if ( geomTypeXY->isChecked() )
+ {
+ enabled = !( cmbXField->currentText().isEmpty() || cmbYField->currentText().isEmpty() || cmbXField->currentText() == cmbYField->currentText() );
+ }
+ else
+ {
+ enabled = !cmbWktField->currentText().isEmpty();
+ }
}
pbnOK->setEnabled( enabled );
Modified: trunk/qgis/src/providers/delimitedtext/qgsdelimitedtextprovider.cpp
===================================================================
--- trunk/qgis/src/providers/delimitedtext/qgsdelimitedtextprovider.cpp 2010-12-02 04:25:59 UTC (rev 14824)
+++ trunk/qgis/src/providers/delimitedtext/qgsdelimitedtextprovider.cpp 2010-12-02 08:32:12 UTC (rev 14825)
@@ -132,13 +132,16 @@
}
QgsDelimitedTextProvider::QgsDelimitedTextProvider( QString uri )
- : QgsVectorDataProvider( uri ),
- mHasWktField( false ), mFieldCount(0),
- mXFieldIndex( -1 ), mYFieldIndex( -1 ),
- mWktFieldIndex( -1 ), mWktHasZM( false),
- mWktZMRegexp("\\s+(?:z|m|zm)(?=\\s*\\()",Qt::CaseInsensitive),
- mWktCrdRegexp("(\\-?\\d+(?:\\.\\d*)?\\s+\\-?\\d+(?:\\.\\d*)?)\\s[\\s\\d\\.\\-]+"),
- mShowInvalidLines( true ), mWkbType( QGis::WKBNoGeometry )
+ : QgsVectorDataProvider( uri )
+ , mHasWktField( false )
+ , mFieldCount( 0 )
+ , mXFieldIndex( -1 ), mYFieldIndex( -1 )
+ , mWktFieldIndex( -1 )
+ , mWktHasZM( false )
+ , mWktZMRegexp( "\\s+(?:z|m|zm)(?=\\s*\\()", Qt::CaseInsensitive )
+ , mWktCrdRegexp( "(\\-?\\d+(?:\\.\\d*)?\\s+\\-?\\d+(?:\\.\\d*)?)\\s[\\s\\d\\.\\-]+" )
+ , mShowInvalidLines( true )
+ , mWkbType( QGis::WKBNoGeometry )
{
// Get the file name and mDelimiter out of the uri
mFileName = uri.left( uri.indexOf( "?" ) );
@@ -169,7 +172,7 @@
yField = QUrl::fromPercentEncoding( yField.toUtf8() );
mHasWktField = wktField != "";
-
+
skipLines = QUrl::fromPercentEncoding( skipLines.toUtf8() );
mSkipLines = skipLines.toInt();
@@ -247,13 +250,13 @@
// fields vector
QStringList fieldList = splitLine( line );
- mFieldCount = fieldList.count();
+ mFieldCount = fieldList.count();
// We don't know anything about a text based field other
// than its name. All fields are assumed to be text
int fieldPos = 0;
- for( int column = 0; column < mFieldCount; column++ )
- {
+ for ( int column = 0; column < mFieldCount; column++ )
+ {
QString field = fieldList[column];
if ( field.length() > 0 )
{
@@ -275,20 +278,20 @@
mYFieldIndex = column;
}
- // WKT geometry field won't be displayed in attribute tables
- if( column == mWktFieldIndex ) continue;
+ // WKT geometry field won't be displayed in attribute tables
+ if ( column == mWktFieldIndex ) continue;
QgsDebugMsg( "Adding field: " + ( field ) );
// assume that the field could be integer or double
// for now, let's set field type as text
- attributeColumns.append(column);
+ attributeColumns.append( column );
attributeFields[fieldPos] = QgsField( field, QVariant::String, "Text" );
couldBeInt.insert( fieldPos, true );
couldBeDouble.insert( fieldPos, true );
fieldPos++;
}
}
- if( mWktFieldIndex >= 0 ) { mXFieldIndex = -1; mYFieldIndex=-1; }
+ if ( mWktFieldIndex >= 0 ) { mXFieldIndex = -1; mYFieldIndex = -1; }
QgsDebugMsg( "Field count for the delimited text file is " + QString::number( attributeFields.size() ) );
hasFields = true;
}
@@ -304,83 +307,83 @@
continue;
}
- if( mHasWktField && mWktFieldIndex >= 0 )
- {
- // Get the wkt - confirm it is valid, get the type, and
- // if compatible with the rest of file, add to the extents
+ if ( mHasWktField && mWktFieldIndex >= 0 )
+ {
+ // Get the wkt - confirm it is valid, get the type, and
+ // if compatible with the rest of file, add to the extents
- QString sWkt = parts[mWktFieldIndex];
- QgsGeometry *geom = 0;
- try
- {
- if( ! mWktHasZM && sWkt.indexOf(mWktZMRegexp) >= 0 ) mWktHasZM = true;
- if( mWktHasZM )
- {
- sWkt.remove(mWktZMRegexp).replace(mWktCrdRegexp,"\\1");
- }
- geom = QgsGeometry::fromWkt(sWkt);
- }
- catch(...)
- {
- geom = 0;
- }
+ QString sWkt = parts[mWktFieldIndex];
+ QgsGeometry *geom = 0;
+ try
+ {
+ if ( ! mWktHasZM && sWkt.indexOf( mWktZMRegexp ) >= 0 ) mWktHasZM = true;
+ if ( mWktHasZM )
+ {
+ sWkt.remove( mWktZMRegexp ).replace( mWktCrdRegexp, "\\1" );
+ }
+ geom = QgsGeometry::fromWkt( sWkt );
+ }
+ catch ( ... )
+ {
+ geom = 0;
+ }
- if( geom )
- {
- QGis::WkbType type = geom->wkbType();
- if( type != QGis::WKBNoGeometry )
- {
- if( mNumberFeatures == 0 )
- {
- mNumberFeatures++;
- mWkbType = type;
- mExtent = geom->boundingBox();
- }
- else if( type == mWkbType )
- {
- mNumberFeatures++;
- QgsRectangle bbox( geom->boundingBox());
- mExtent.combineExtentWith( &bbox );
- }
- }
- delete geom;
- }
- }
+ if ( geom )
+ {
+ QGis::WkbType type = geom->wkbType();
+ if ( type != QGis::WKBNoGeometry )
+ {
+ if ( mNumberFeatures == 0 )
+ {
+ mNumberFeatures++;
+ mWkbType = type;
+ mExtent = geom->boundingBox();
+ }
+ else if ( type == mWkbType )
+ {
+ mNumberFeatures++;
+ QgsRectangle bbox( geom->boundingBox() );
+ mExtent.combineExtentWith( &bbox );
+ }
+ }
+ delete geom;
+ }
+ }
- else if( ! mHasWktField && mXFieldIndex >= 0 && mYFieldIndex >= 0 )
- {
+ else if ( ! mHasWktField && mXFieldIndex >= 0 && mYFieldIndex >= 0 )
+ {
- // Get the x and y values, first checking to make sure they
- // aren't null.
+ // Get the x and y values, first checking to make sure they
+ // aren't null.
- QString sX = parts[mXFieldIndex];
- QString sY = parts[mYFieldIndex];
+ QString sX = parts[mXFieldIndex];
+ QString sY = parts[mYFieldIndex];
- bool xOk = true;
- bool yOk = true;
- double x = sX.toDouble( &xOk );
- double y = sY.toDouble( &yOk );
+ bool xOk = true;
+ bool yOk = true;
+ double x = sX.toDouble( &xOk );
+ double y = sY.toDouble( &yOk );
- if ( xOk && yOk )
- {
- if ( mNumberFeatures > 0 )
- {
- mExtent.combineExtentWith( x, y );
- }
- else
- {
- // Extent for the first point is just the first point
- mExtent.set( x, y, x, y );
- mWkbType = QGis::WKBPoint;
- }
- mNumberFeatures++;
- }
- }
+ if ( xOk && yOk )
+ {
+ if ( mNumberFeatures > 0 )
+ {
+ mExtent.combineExtentWith( x, y );
+ }
+ else
+ {
+ // Extent for the first point is just the first point
+ mExtent.set( x, y, x, y );
+ mWkbType = QGis::WKBPoint;
+ }
+ mNumberFeatures++;
+ }
+ }
- for( int i = 0; i < attributeFields.size(); i++ )
- {
- QString &value = parts[attributeColumns[i]];
- if( value.isEmpty()) continue;
+ for ( int i = 0; i < attributeFields.size(); i++ )
+ {
+ QString &value = parts[attributeColumns[i]];
+ if ( value.isEmpty() ) continue;
// try to convert attribute values to integer and double
if ( couldBeInt[i] )
{
@@ -433,8 +436,6 @@
feature.setValid( false );
while ( ! mStream->atEnd() )
{
- double x = 0.0;
- double y = 0.0;
QString line = readLine( mStream ); // Default local 8 bit encoding
if ( line.isEmpty() )
continue;
@@ -442,55 +443,55 @@
// lex the tokens from the current data line
QStringList tokens = splitLine( line );
- QgsGeometry *geom = 0;
+ QgsGeometry *geom = 0;
- if( mHasWktField && mWktFieldIndex >= 0 )
- {
- try
- {
- QString &sWkt = tokens[mWktFieldIndex];
- if( mWktHasZM )
- {
- sWkt.remove(mWktZMRegexp).replace(mWktCrdRegexp,"\\1");
- }
+ if ( mHasWktField && mWktFieldIndex >= 0 )
+ {
+ try
+ {
+ QString &sWkt = tokens[mWktFieldIndex];
+ if ( mWktHasZM )
+ {
+ sWkt.remove( mWktZMRegexp ).replace( mWktCrdRegexp, "\\1" );
+ }
- geom = QgsGeometry::fromWkt(sWkt);
- }
- catch(...)
- {
- geom = 0;
- }
+ geom = QgsGeometry::fromWkt( sWkt );
+ }
+ catch ( ... )
+ {
+ geom = 0;
+ }
- if( geom && geom->wkbType() != mWkbType )
- {
- delete geom;
- geom = 0;
- }
- mFid++;
- if( ! boundsCheck(geom))
- {
- delete geom;
- geom = 0;
- }
- }
- else if( ! mHasWktField && mXFieldIndex >= 0 && mYFieldIndex >= 0 )
- {
- bool xOk, yOk;
- double x = tokens[mXFieldIndex].toDouble(&xOk);
- double y = tokens[mYFieldIndex].toDouble(&yOk);
- if( xOk && yOk )
- {
- mFid++;
- if( boundsCheck(x,y) )
- {
- geom = QgsGeometry::fromPoint(QgsPoint(x,y));
- }
- }
- }
+ if ( geom && geom->wkbType() != mWkbType )
+ {
+ delete geom;
+ geom = 0;
+ }
+ mFid++;
+ if ( ! boundsCheck( geom ) )
+ {
+ delete geom;
+ geom = 0;
+ }
+ }
+ else if ( ! mHasWktField && mXFieldIndex >= 0 && mYFieldIndex >= 0 )
+ {
+ bool xOk, yOk;
+ double x = tokens[mXFieldIndex].toDouble( &xOk );
+ double y = tokens[mYFieldIndex].toDouble( &yOk );
+ if ( xOk && yOk )
+ {
+ mFid++;
+ if ( boundsCheck( x, y ) )
+ {
+ geom = QgsGeometry::fromPoint( QgsPoint( x, y ) );
+ }
+ }
+ }
- // If no valid geometry skip to the next line
+ // If no valid geometry skip to the next line
- if( ! geom ) continue;
+ if ( ! geom ) continue;
// At this point the current feature values are valid
@@ -498,13 +499,13 @@
feature.setFeatureId( mFid );
- feature.setGeometry( geom );
+ feature.setGeometry( geom );
for ( QgsAttributeList::const_iterator i = mAttributesToFetch.begin();
i != mAttributesToFetch.end();
++i )
{
- QString &value = tokens[attributeColumns[*i]];
+ QString &value = tokens[attributeColumns[*i]];
QVariant val;
switch ( attributeFields[*i].type() )
{
@@ -568,6 +569,7 @@
mSelectionRectangle = rect;
mAttributesToFetch = fetchAttributes;
mFetchGeom = fetchGeometry;
+ mUseIntersect = useIntersect;
if ( rect.isEmpty() )
{
mSelectionRectangle = mExtent;
@@ -644,7 +646,7 @@
if ( mSelectionRectangle.isEmpty() || !mFetchGeom )
return true;
- return mSelectionRectangle.contains( QgsPoint(x,y) );
+ return mSelectionRectangle.contains( QgsPoint( x, y ) );
}
/**
* Check to see if the geometry is within the selection rectangle
@@ -655,8 +657,8 @@
if ( mSelectionRectangle.isEmpty() || !mFetchGeom )
return true;
- return geom->boundingBox().intersects( mSelectionRectangle )
- && geom->intersects(mSelectionRectangle);;
+ return geom->boundingBox().intersects( mSelectionRectangle ) &&
+ ( !mUseIntersect || geom->intersects( mSelectionRectangle ) );
}
int QgsDelimitedTextProvider::capabilities() const
Modified: trunk/qgis/src/providers/delimitedtext/qgsdelimitedtextprovider.h
===================================================================
--- trunk/qgis/src/providers/delimitedtext/qgsdelimitedtextprovider.h 2010-12-02 04:25:59 UTC (rev 14824)
+++ trunk/qgis/src/providers/delimitedtext/qgsdelimitedtextprovider.h 2010-12-02 08:32:12 UTC (rev 14825)
@@ -188,20 +188,20 @@
QRegExp mDelimiterRegexp;
QString mDelimiterType;
- bool mHasWktField;
- int mFieldCount; // Note: this includes field count for wkt field
+ bool mHasWktField;
+ int mFieldCount; // Note: this includes field count for wkt field
int mXFieldIndex;
int mYFieldIndex;
- int mWktFieldIndex;
+ int mWktFieldIndex;
- // Handling of WKT types with .. Z, .. M, and .. ZM geometries (ie
- // Z values and/or measures). mWktZMRegexp is used to test for and
- // remove the Z or M fields, and mWktCrdRegexp is used to remove the
- // extra coordinate values.
+ // Handling of WKT types with .. Z, .. M, and .. ZM geometries (ie
+ // Z values and/or measures). mWktZMRegexp is used to test for and
+ // remove the Z or M fields, and mWktCrdRegexp is used to remove the
+ // extra coordinate values.
- bool mWktHasZM;
- QRegExp mWktZMRegexp;
- QRegExp mWktCrdRegexp;
+ bool mWktHasZM;
+ QRegExp mWktZMRegexp;
+ QRegExp mWktCrdRegexp;
//! Layer extent
QgsRectangle mExtent;
@@ -216,6 +216,7 @@
QTextStream *mStream;
bool mValid;
+ bool mUseIntersect;
int mGeomType;
More information about the QGIS-commit
mailing list