MapInfo MAP file (Undocumented,restored)(map.rfh):
Class: GIS files, Status: Almost Complete, Last change: 29.06.2012 14:11:14
include Float.rfi
type
TBlockTag enum int (
Header=0,
Index=1,
ObjDef=2,
Coords=3,
Deleted=4,
Tools=5
)
TSmallPoint struc
int X
int Y
ends
TPoint struc
long X
long Y
ends
TSmallRect struc
int L
int T
int R
int B
ends
TRect struc
long L
long T
long R
long B
ends
TColor struc
byte R
byte G
byte B
ends
include MITables.rfi
TCoordPrecision enum byte (
LatLong=6, //Lat/Long maps
Cartesian=8, //Cartesian maps
Projected=1 //Projected maps
)
TCoordOriginCode enum byte (
LatLong=2, //for Lat/Long maps
CartProj=1 //for Cartesian and Projected maps
)
TReflectAxisCode enum byte (
LatLong=1, //for Lat/Long maps
CartProj=0 //for Cartesian and Projected maps
)
PBlock ^TBlock near=ulong
TIndexDataRec struc
TRect MBR //Coordinates of Minimum Bounding Rectangle
PBlock Bl
ends
TObjRecTbl(Sz) forward
TMapToolTbl(Sz) forward
TBlock struc
TBlockTag Tag
word Num
case @.Tag of
Index: array[@@.Num]of TIndexDataRec
ObjDef: struc
TPoint Center
PBlock pFirstCoordBlock
PBlock pLastCoordBlock
TObjRecTbl(@@@.Num) Defs
ends
Coords: struc
PBlock Next
ends
Deleted: struc
PBlock Next
ends
Tools: struc
PBlock Next
TMapToolTbl(@@@.Num) Tools
ends
endc D
ends
THeader struc
/*
TBlockTag Tag
raw[0xFF] at 0; LongSign //??
*/
long Sign
int FileVer
word BlSize
TDouble CoordSysToDistUnits //Miles/LatDegree for Lat/Long maps 1.0 for all others
TRect MBR //Coordinates of Minimum Bounding Rectangle
TRect VR //Coordinates of Default View of table
PBlock pObjDefIndex //Offset of Object Definition Index
PBlock DelBlockList //Offset of the beginning of Deleted Block sequence
PBlock pTools //Offset of Tools Block
long NSymbol //Number of Symbol elements
long NLine //Number of Line elements
long NRegion //Number of Region elements
long NText //Number of Text elements
ulong MaxCoordBufSize
raw[14] Z //14 Unknown bytes (Probably reserved and set to zero)
TMapUnit DistUnit //Map File Distance Units
sint MaxSpIndexDepth //Max spatial index depth
TCoordPrecision CoordPrecision
TCoordOriginCode CoordOriginCode
TReflectAxisCode ReflectAxisCode
byte ObjLenArraySize //(at the start of the file)
sint NPenRes //Number of pen resources
sint NBrushRes //Number of brush resources
sint NSymbolRes //Number of symbol resources
sint NTextRes //Number of text resources
int NResBl //Number of Resource Blocks
raw[3] Z1 //Unknown(probably reserved and set to zero)
TProjectionType ProjectionType
TDatumType Datum
TMapUnit CoordUnit //Units of coordinate system
TDouble XScale
TDouble YScale
TDouble XOffset
TDouble YOffset
array[6]of TDouble ProjParms //1-based array of projection parameters
TDouble DatumShiftX
TDouble DatumShiftY
TDouble DatumShiftZ
array[5]of TDouble DatumParms //1-based array of datum parameters
ends:assert[/*@.Tag=TBlockTag.Header*/@.Sign=42424242]
data
0x0100 THeader Hdr
0x0 array[Hdr.ObjLenArraySize+1]of Byte ObjDefRecSize
assert Hdr:assert;
descr ('MapInfo vector graphics file.')
descr (NL,
'Info Src: Notes on the MapInfoR Native table format by Anssi Joutsiniemi',NL,
' Robert Edwards. http://spatialnews.geocomm.com/features/mif_format/',NL,
'Info Src: MITAB Library. http://mitab.maptools.org/',NL)
type
TObjDefTag enum byte (
NONE = 0,
SYMBOL_C = 0x01,
SYMBOL = 0x02,
LINE_C = 0x04,
LINE = 0x05,
PLINE_C = 0x07,
PLINE = 0x08,
ARC_C = 0x0a,
ARC = 0x0b,
REGION_C = 0x0d,
REGION = 0x0e,
TEXT_C = 0x10,
TEXT = 0x11,
RECT_C = 0x13,
RECT = 0x14,
ROUNDRECT_C = 0x16,
ROUNDRECT = 0x17,
ELLIPSE_C = 0x19,
ELLIPSE = 0x1a,
MULTIPLINE_C = 0x25,
MULTIPLINE = 0x26,
FONTSYMBOL_C = 0x28,
FONTSYMBOL = 0x29,
CUSTOMSYMBOL_C=0x2b,
CUSTOMSYMBOL = 0x2c,
/* Version 450 object types: */
V450_REGION_C= 0x2e,
V450_REGION = 0x2f,
V450_MULTIPLINE_C=0x31,
V450_MULTIPLINE = 0x32,
/* Version 650 object types: */
MULTIPOINT_C = 0x34,
MULTIPOINT = 0x35,
COLLECTION_C = 0x37,
COLLECTION = 0x38
)
TSmallPoints(Sz) array of TSmallPoint:[@:Size=@:Sz when @:Sz<Hdr.BlSize exc Hdr.BlSize /*For presentation purposes only*/]
PSmallPoints(Sz) ^TSmallPoints(@:Sz) near=ulong
PRelSmallPoints(Sz,Base) ^TSmallPoints(@:Sz) near=ulong, REF=@+@:Base;
TPoints(Sz) array of TPoint:[@:Size=@:Sz when @:Sz<Hdr.BlSize exc Hdr.BlSize /*For presentation purposes only*/]
PPoints(Sz) ^TPoints(@:Sz) near=ulong
PRelPoints(Sz,Base) ^TPoints(@:Sz) near=ulong, REF=@+@:Base;
TNumVertices(V450) case @:V450 of
0: int
else long
endc:let Val=(@.0)exc(@.1);
TCoordSection(V450) struc
TNumVertices(@:V450) numVertices
int numHoles
TRect MBR
// ulong pCoords
PRelPoints(@.numVertices:Val*8,&@-@:#*@:Size/*Array start*/) pCoords
ends
TCoordSection_C(V450) struc
TNumVertices(@:V450) numVertices
int numHoles
TSmallRect MBR
// ulong pCoords
PRelSmallPoints(@.numVertices:Val*4,&@-@:#*@:Size/*Array start*/) pCoords
ends
//In fact all such pointers point into some block and, when
//the variable doesn't fit completely into the block, its
//rest is placed into the next block(s)
PCoordSection_C(V450) ^TCoordSection_C(@:V450) NEAR=ulong
PCoordSection(V450) ^TCoordSection(@:V450) NEAR=ulong
TCoordSections_C(Num,V450) array[@:Num]of TCoordSection_C(@:V450)
TCoordSections(Num,V450) array[@:Num]of TCoordSection(@:V450)
PCoordSections_C(Num,V450) ^TCoordSections_C(@:Num,@:V450) NEAR=ulong
PCoordSections(Num,V450) ^TCoordSections(@:Num,@:V450) NEAR=ulong
TLblTextStr(L) array[@:L]of Char
PLblTextStr(L) ^TLblTextStr(@:L) NEAR=ulong :displ=(@^,'{',@,'}')
TFontStyle set 16 of (
fsBold ^ 0x001,
fsItalic ^ 0x002,
fsUnderline ^ 0x004,
fsShadow ^ 0x020,
fsFill ^ 0x100,
fsAround ^ 0x200,
fsCapital ^ 0x400,
fsSparse ^ 0x800
)
TObjDefRec struc
TObjDefTag Tag
ulong RowID //(0 = Valid; 0x40000000 = Deleted
case @.Tag of
SYMBOL_C: struc
TSmallPoint P
byte hSym //Symbol type number from Resource Block
ends
SYMBOL: struc
TPoint P
byte hSym //Symbol type number from Resource Block
ends
LINE_C: struc
TSmallPoint S
TSmallPoint E
byte hPen //Pen type number from Resource Block
ends
LINE: struc
TPoint S
TPoint E
byte hPen //Pen type number from Resource Block
ends
PLINE_C: struc
PSmallPoints CoordOfs
ulong CoordSz
TSmallPoint LabelPos
TPoint Org
TSmallRect MBR
byte hPen //Pen type number from Resource Block
ends:[@.CoordOfs:Sz=@.CoordSz and 0x7FFFFFFF] //Take smooth flag out of the value
PLINE: struc
PPoints CoordOfs
ulong CoordSz
TPoint LabelPos
TRect MBR
byte hPen //Pen type number from Resource Block
ends:[@.CoordOfs:Sz=@.CoordSz and 0x7FFFFFFF] //Take smooth flag out of the value
ARC_C: struc
int StartAngle
int EndAngle
TSmallRect EllipseMBR
TSmallRect ArcMBR
byte hPen //Pen type number from Resource Block
ends
ARC: struc
int StartAngle
int EndAngle
TRect EllipseMBR
TRect ArcMBR
byte hPen //Pen type number from Resource Block
ends
REGION_C,V450_REGION_C: struc
PCoordSections_C CoordOfs
ulong CoordSz
int numLineSections
TSmallPoint LabelPos
TPoint Org
TSmallRect MBR
byte hPen //Pen type number from Resource Block
byte hBrush //Brush type number from Resource Block
ends:[@.CoordOfs:Num=@.numLineSections,
@.CoordOfs:V450=@@@.Tag=TObjDefTag.V450_REGION_C]
REGION,V450_REGION: struc
PCoordSections CoordOfs
ulong CoordSz
int numLineSections
TPoint LabelPos
TRect MBR
byte hPen //Pen type number from Resource Block
byte hBrush //Brush type number from Resource Block
ends:[@.CoordOfs:Num=@.numLineSections,
@.CoordOfs:V450=@@@.Tag=TObjDefTag.V450_REGION]
//:[@.CoordOfs:Sz=@.CoordSz and 0x7FFFFFFF] //Take smooth flag out of the value
MULTIPLINE_C,V450_MULTIPLINE_C: struc
PCoordSections CoordOfs
ulong CoordSz
int numLineSections
TSmallPoint LabelPos
TPoint Org
TSmallRect MBR
byte hPen //Pen type number from Resource Block
ends:[@.CoordOfs:Num=@.numLineSections,
@.CoordOfs:V450=@@@.Tag=TObjDefTag.V450_MULTIPLINE_C]
MULTIPLINE,V450_MULTIPLINE: struc
PCoordSections CoordOfs
ulong CoordSz
int numLineSections
TPoint LabelPos
TRect MBR
byte hPen //Pen type number from Resource Block
ends:[@.CoordOfs:Num=@.numLineSections,
@.CoordOfs:V450=@@@.Tag=TObjDefTag.V450_MULTIPLINE]
FONTSYMBOL_C: struc
byte SymbolId // Symbol index
byte PointSize
word FontStyle
TColor TextColor
TColor BGColor //??? BG Color ???
int Angle
TSmallPoint Pos
byte FontId
ends
FONTSYMBOL: struc
byte SymbolId // Symbol index
byte PointSize
word FontStyle
TColor TextColor
TColor BGColor //??? BG Color ???
int Angle
TPoint Pos
byte FontId
ends
TEXT_C: struc
PLblTextStr TxtOfs
word TxtLen
word Alignment // just./spacing/arrow
int nAngle // Tenths of degree
word FontStyle
TColor TextColor
TColor BGColor
TSmallPoint Pos // Label line end point
int TextH
byte FontId
TSmallRect MBR // MBR after rotation
byte hPen //Pen type number from Resource Block
ends:[@.TxtOfs:L=@.TxtLen]
TEXT: struc
PLblTextStr TxtOfs
word TxtLen
word Alignment // just./spacing/arrow
int nAngle // Tenths of degree
TFontStyle FontStyle
TColor TextColor
TColor BGColor
TPoint Pos // Label line end point
long TextH
byte FontId
TRect MBR // MBR after rotation
byte hPen //Pen type number from Resource Block
ends:[@.TxtOfs:L=@.TxtLen]
endc D
raw[] Rest
ends:[@:Size=((ObjDefRecSize[@.Tag]and 0x7F) when (ObjDefRecSize[@.Tag]>0)) exc 1]
TObjRecTbl(Sz) array of TObjDefRec:[@:Size=@:Sz]
TMapToolKind enum byte (
PEN = 1,
BRUSH = 2,
FONT = 3,
SYMBOL = 4
)
TMapToolRec struc
TMapToolKind Kind
long RefCount
case @.Kind of
PEN: struc
byte PixelWidth
byte LinePattern
byte PointWidth
TColor Color
ends
BRUSH: struc
byte FillPattern
byte TransparentFill
TColor FGColor
TColor BGColor
ends
FONT: struc
array[32]of Char,<0; Name
ends
SYMBOL: struc
int SymbolNo
int PointSize
byte Unknown
TColor Color
ends
endc D
ends
TMapToolTbl(Sz) array of TMapToolRec?not((@.Kind>0)and(@.Kind<=4))!void;:[@:Size=@:Sz]
Other specifications.
FlexT home page,
Author`s home page.