[gdal-dev] RFC 35: Delete, reorder and alter field definitions of OGR layers - Call for discussion

Even Rouault even.rouault at mines-paris.org
Sat May 7 19:10:10 EDT 2011

> I would like to see some description of the effect of ReorderField().  I
> assume iOldFieldPos and iNewFieldPos have to both be existing fields, and
> that intermediate fields will be shuffled along as needed to satisfy the
> request - is that right?

Yes, exactly. iOldFieldPos and iNewFieldPos must be in [0, GetFieldCount()-1]

If you have initially 5 fields "0", "1", "2", "3","4" :
* ReorderField(1,3) --> "0", "2", "3", "1", "4"
* ReorderField(0,4) --> "1", "2", "3", "4", "0"
* ReorderField(4,0) --> "4", "0", "1", "2", "3"

> I am somewhat wondering if it would be better to provide a mechanism
> to reorder all columns in one request.

Yes, that could be a possibility. The use case I was thinking initially was a 
user dragging the header of a column in a table to move it at a new position. 
But that could be done through a global reordering method, 
OGRLayer::ReorderFields(int* panNewPos), panNewPos being a permutation of [0, 
GetFieldCount()-1]. ReorderFields() would behave such, for each field that was 
initially at position i, its new position would be panNewPos[i]. I believe 
that the implementation in shapelib would be doable, and perhaps even a bit 
more straightforward than the one of ReorderField() where one must be careful 
to move things in the right order depending on if iOldFieldPos < iNewFieldPos 
or not.

I'll update the RFC, patch and test with that solution.

> Otherwise I am satisfied with the suggested approach.
> Best regards,

More information about the gdal-dev mailing list