Skip to content

Commit 5d5883b

Browse files
author
jef
committed
fix #1941
git-svn-id: http://svn.osgeo.org/qgis/trunk@11698 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 1728008 commit 5d5883b

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

src/core/qgsvectorfilewriter.cpp

+12-2
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,9 @@ QgsVectorFileWriter::QgsVectorFileWriter( const QString& shapefileName,
116116
QgsDebugMsg( "creating " + QString::number( fields.size() ) + " fields" );
117117

118118
mFields = fields;
119+
mAttrIdxToOgrIdx.clear();
119120

121+
int ogrIdx = 0;
120122
QgsFieldMap::const_iterator fldIt;
121123
for ( fldIt = fields.begin(); fldIt != fields.end(); ++fldIt )
122124
{
@@ -178,6 +180,8 @@ QgsVectorFileWriter::QgsVectorFileWriter( const QString& shapefileName,
178180
mError = ErrAttributeCreationFailed;
179181
return;
180182
}
183+
184+
mAttrIdxToOgrIdx.insert( fldIt.key(), ogrIdx++ );
181185
}
182186

183187
QgsDebugMsg( "Done creating fields" );
@@ -218,8 +222,14 @@ bool QgsVectorFileWriter::addFeature( QgsFeature& feature )
218222
continue;
219223
}
220224

221-
int ogrField = fldIt.key();
222-
const QVariant& attrValue = feature.attributeMap()[ ogrField ];
225+
if ( !mAttrIdxToOgrIdx.contains( fldIt.key() ) )
226+
{
227+
QgsDebugMsg( QString( "no ogr field for field %1" ).arg( fldIt.key() ) );
228+
continue;
229+
}
230+
231+
const QVariant& attrValue = feature.attributeMap()[ fldIt.key()];
232+
int ogrField = mAttrIdxToOgrIdx[ fldIt.key()];
223233

224234
switch ( attrValue.type() )
225235
{

src/core/qgsvectorfilewriter.h

+3
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ class CORE_EXPORT QgsVectorFileWriter
9898

9999
/** geometry type which is being used */
100100
QGis::WkbType mWkbType;
101+
102+
/** map attribute indizes to OGR field indexes */
103+
QMap<int, int> mAttrIdxToOgrIdx;
101104
};
102105

103106
#endif

0 commit comments

Comments
 (0)