Changes between Version 6 and Version 7 of FGDBSpecification


Ignore:
Timestamp:
Oct 9, 2013, 12:46:28 AM (11 years ago)
Author:
Even Rouault
Comment:

various small changes, add license paragraph

Legend:

Unmodified
Added
Removed
Modified
  • FGDBSpecification

    v6 v7  
    44
    55This is a work-in-progress reverse-engineered specification of .gdbtable and .gdbtablx files found in FileGDB datasets.
     6It applies to FileGDB datasets v10, as well as earlier versions.
    67
    78= Conventions =
    89
    9 ubyte: unsigned byte
    10 int16: little-endian 16-bit integer
    11 int32: little-endian 32-bit integer
    12 float64: little-endian 64-bit IEEE754 floating point number
    13 utf16: string in little-endian UTF-16 encoding
    14 string: (UTF-8 ?) string
     10 * ubyte: unsigned byte
     11 * int16: little-endian 16-bit integer
     12 * int32: little-endian 32-bit integer
     13 * float64: little-endian 64-bit IEEE754 floating point number
     14 * utf16: string in little-endian UTF-16 encoding
     15 * string: (UTF-8 ?) string
    1516
    1617A row or a feature are synonyms in this document.
     
    3334|| int32 || file size in bytes ||
    3435|| 4 bytes || 0x00 0x00 0x00 0x00 - unknown role. Constant among the files ||
    35 || int32 || offset in bytes at which the field description section begins, often (in FGDB 10) 0x28 0x00 0x00 0x00, i.e. 40 ||
     36|| int32 || offset in bytes at which the field description section begins (often 40 in FGDB 10) ||
    3637|| 4 bytes || 0x00 0x00 0x00 0x00 - unknown role. Constant among the files ||
    3738
     
    9899
    99100If magic > 1, there are extra bytes whose organization seems to comply to the following algorithm :
    100 
    101 {{{
    102   1) Store current offset
    103   2) Skip one byte
    104   3) Read int32 value "magic2".
    105       a) if magic2 = 0, then rewind to the stored offset and read 2 float64 (that happen to be NaN values). And then go to 2)
    106       b) otherwise (generally magic2 = 1 or magic2 = 3), skip magic2 x float64 values
    107 }}}
     101  1. Store current offset
     102  2. Skip one byte
     103  3. Read int32 value "magic2".
     104      a. if magic2 = 0, then rewind to the stored offset and read 2 float64 (that happen to be NaN values). And then go to 2)
     105      b. otherwise (generally magic2 = 1 or magic2 = 3), skip magic2 x float64 values
     106
    108107
    109108
     
    267266
    268267The last few bytes look like 00 00 00 00 X 00 00 00 X 00 00 00 00 00 00 00 where X is non 0 (often 1). Unknown role
     268
     269= License =
     270
     271This specification document is (C) 2013 Even Rouault and licensed under the [http://creativecommons.org/licenses/by-sa/3.0 CC-BY-SA 3.0] terms [[Image(http://i.creativecommons.org/l/by-sa/3.0/88x31.png, link=http://creativecommons.org/licenses/by-sa/3.0)]].
     272
     273Note: the scope of the copyrighted material does, of course, not extend onto any source or binary code derived from the specification, that may be licensed under the terms that their author may see fit.