OSM Tools
dutch german en francais spanish spanish polish russian

Speed Camera GPIs for Garmin Devices

More available soon or on request - refresh page to see latest links.

  download Austria speed cameras

  download Belgium speed cameras

  download France North speed cameras

 download France South speed cameras

  download Germany North speed cameras

  download Germany South speed cameras

   download Greece speed cameras

  download Holland speed cameras

  download Italy speed cameras

  download Luxembourg speed cameras

  download Sweden speed cameras

  download Spain speed cameras

  download UK speed cameras

Garmin GPI file structure

honda sat nav

We converted gpx files to gpi with image 48x48.! NOT 24x24

Extra gpi files have been added before uploading map.

New POIS:

  • Speed Cameras
  • Sainsbury Supermarket

Make sure the your gpx files do not contain polygons or tracks

gpx should only contain:

Latitude,Longitude and name

A screen shot showing customised POIS on a built in
Garmin car sat nav

Introduction

The GPI file structure has not been documented but the following information should be sufficient to extract labels and coordinates from a gpi file and convert them to GPX,CSV etc

The gpi file ,similar to a tdb file, consists of a short header and a series of blocks each beginning with a type number.

The numbers generally reflect order of importance or categories,ie street name, name of town, telephone number etc

Most blocks contain a label, which is always found at the end of the block.

Current editors of GPI files do not reveal all the data ( ie labels) contained in a gpi file and are also subject to crashing out when they encounter an 'error'

Many editors add their own BMP icon!

Not all data can be read if a file has been encrypted.

Header

Headers Lengths are variable.

GPI version 00 Header
00 4 bytes 00 00 00 00 (00 00 08 00 when file is protected)
04 4 bytes pointer to first block starting from 0x08
08 GRMREC followed by version number
10 Time in seconds
16

Pointer to first block

1E start of first Block
22 pointer? 0x0c
26 POI
2c ? 48
2d ? 48
2e codepage
32 flags (0x9 ?)
34 bit 5 set when file includes bmp if so and extra 4 bytes are added at 3a
36 Length of data 4 bytes
(3a) Pointer to the last type
~3a/3e Pointer to next block
~3e/42 Beginning of text block
~40/44 Length of text
   

Blocks

Two bytes make up the type number, always at the start of a block.

Most blocks have a 2 letter language abbreviation ,ie 0x45,0x4E (EN), at the start of a text sub block; some do not when the start of a label is fixed . Such labels often represent less important categories, like telephone numbers,post codes etc.
Codes seen : EN , DE, RU

Text does not have to be terminated by a zero as we can ascertain its length by a two byte number.

Type data pointer to next block text flags length of text Text
2 number of bytes depends on type 4 2 2 variable length

Latitude & Longitude (0x02)

These are located in the data section ,each requiring 4 bytes; they are converted to degrees using Garmin's standard map unit.Off set from text block appears to be fixed.

Coordinates are only stored in certain blocks, ie 0x2 ,0x3,0x4 (given certain flags),0x8 , 0xC

They are not specific to certain blocks , so block 3 contains coordinates only when certain flags have been set.

Min Max latitudes and longitudes (0x08)

Boundaries are often found in block type 0x8 with offsets to the last block and the next block

BMP Block (0x05)

Found at the end, if present, contains bmp file - width and height at offset &hA - both 2 bytes, allowing for large bmp sizes, not just 24x24 .

We can point to a bitmap using a 4 byte numbers contained in the first main block at the beginning of a gpi file.

This block also contains the size of the gpi file from a given offset, the colour used for transparency ,bits per pixel and the size of this block mostly &2C

Speed & Proximity (0x03,0x09)

4 bytes are used to calculate the speed limit or proximity data.

Speed is converted to metres - hence the conversion of feet to metres is never accurate, ie 30 becomes 9 (30/3.281)

Alert Distances are also stored in 4 bytes at various offsets depending on type .

Proximity distances are calculated to metres per second, making them large numbers.

Divide 4 byte number by a given multiple , ie 1835408 to obtain kilometers.

The following applies to type=4:

if Offset 0xA has 4th bit set, the block contains no speed data.

If 0x0A has value 3 the block contains speed data.

Most blocks contain a byte which ,.when set , indicates existence of speed data.

Type numbers

It seems that if file contains a bitmap then even numbers are used.

No Bitmap

0x2 is used if file contains no bitmap;it contains coordinates and can include labels.

0x3 contains speed / prolixity.