Position Field Value Type Order
Byte 0 File Code 9994 Integer Big
Byte 4 Unused 0 Integer Big
Byte 8 Unused 0 Integer Big
Byte 12 Unused 0 Integer Big
Byte 16 Unused 0 Integer Big
Byte 20 Unused 0 Integer Big
Byte 24 File Length File Length Integer Big
Byte 28 Version 1000 Integer Little
Byte 32 Shape Type Shape Type Integer Little
Byte 36 Bounding Box Xmin Double Little
Byte 44 Bounding Box Ymin Double Little
Byte 52 Bounding Box Xmax Double Little
Byte 60 Bounding Box Ymax Double Little
Byte 68* Bounding Box Zmin Double Little
Byte 76* Bounding Box Zmax Double Little
Byte 84* Bounding Box Mmin Double Little
Byte 92* Bounding Box Mmax Double Little
{ Declaration du type SHPFileHeader }
{ SHP File Header }
Type
pSHPFileHeader = ^TSHPFileHeader;
TSHPFileHeader = record
FileCode : integer; { = 9994 }
__Unused0 : integer;
__Unused1 : integer;
__Unused2 : integer;
__Unused3 : integer;
__Unused4 : integer;
FileLength: integer;
Version : integer; { = 1000 }
ShapeType : integer;
BBXmin : Double;
BBYmin : Double;
BBXmax : Double;
BBYmax : Double;
BBZmin : Double;
BBZmax : Double;
BBMmin : Double;
BBMmax : Double;
end;
const
SIZEOFSHPFileHeader = SizeOf(TSHPFileHeader);
{ Shape Type }
const
ShapeTypeNull = 0;
ShapeTypePoint = 1;
ShapeTypePolyLine = 3;
ShapeTypePolygon = 5;
ShapeTypeMultiPoint = 8;
ShapeTypePointZ = 11;
ShapeTypePolyLineZ = 13;
ShapeTypePolygonZ = 15;
ShapeTypeMultiPointZ = 18;
ShapeType
PointM = 21;
ShapeType
PolyLineM = 23;
ShapeType
PolygonM = 25;
ShapeType
MultiPointM = 28;
ShapeType
MultiPatch = 31;
{ Exemple Lecture }
var
FileHeader : TSHPFileHeader;
begin
...
with TFileStream.Create(FileName, fmOpenRead) do
try
ReadBuffer(FileHeader, SIZEOFSHPFileHeader);
...
finally
Free;
end;
...
end;
{ Exemple Ecriture }
var
FileHeader : TSHPFileHeader;
begin
...
with TFileStream.Create(FileName, fmCreate) do
try
FileHeader... := ...;
Position := 0;
WriteBuffer(FileHeader, SIZEOFSHPFileHeader);
...
finally
Free;
end;
...
end;
Shape File specification [PDF]
<hr size="2" width="100%" />