Subversion Repositories display

Rev

Rev 288 | Blame | Compare with Previous | Last modification | View Log | RSS feed


NOTE: This is a work in progress.  CVS sources may or may not 
function properly (or even compile) at any given point in time.


About imgdecode
---------------

NOTE: This code has been designed to work on topo and road maps
only.  No effort has been made towards parsing marine or aviation
maps. 

"NT" style maps do not decode past a few headers as this map file
format is only partially understood.  City Navigator v8 files do
not decode correctly, either, due to unknown changes in their data
structures.  It is known to work correctly on City Navigator v7 and
older map files, US TOPO files, and Metroguide maps (v7 and older).

The program is designed to aid in the decoding of Garmin IMG files.
It hexdumps the IMG file side-by-side with plain-text descriptions
of what the particular bytes in the file represent.  Unknown
data blocks are either unlabeled or labeled with a ???.  Files are
created in a directory named after the IMG file, with separate files
for each subfile & section.  Naming convention is:

   offsetbegin-offsetend.subfile.section

For example:

   00130348/
        00000001-000018bf.DSKIMG.header
        00001a00-00001a1c.RGN.header
        00001a7d-00002449.RGN.level.02
        00002548-00003d99.RGN.level.01
        00003ee2-0003a972.RGN.level.00
        0003d200-0003d2bb.TRE.header
        0003d2bc-0003d30f.TRE.mapinfo
        0003d310-0003d315.TRE.copyright
        0003d316-0003e0a1.TRE.subdivs
        0003e0a2-0003e0b1.TRE.levels
        0003e0b2-0003e0cc.TRE.polylines
        0003e0cd-0003e0f3.TRE.polygons
        0003e0f4-0003e1a4.TRE.points
        0003e1a5-0003e298.TRE.unknown1
        0003e299-0003e29d.TRE.unknown2
        0003e400-0003e515.LBL.header
        0003e516-0003e51e.LBL.sort
        0003e51f-00047ddd.LBL.labels
        00047dde-00047de0.LBL.countries
        00047de1-00047de5.LBL.regions
        00047de6-00047e30.LBL.cities
        00047e31-00047e60.LBL.zipcodes
        00047e61-00048d50.LBL.unknown1
        00048d51-0004c930.LBL.poi_properties
        0004c931-0004c94c.LBL.unknown2

As you can see, it generates a LOT of output.  Be prepared.

Note that I am not doing detailed bitstream parsing for polylines
and polygons at the moment.  Mostly this is to get past those things
that are already known and on to sections (like NET and NOD) that
are unknown.  I calculate the number of points in the -line or -gon
but probably will NOT add the coords themselves in order to keep
the output to manageable levels (it's currently at 20x the IMG file).

What you also see is the beginning of a general-purpose library for
interacting with IMG files (including the "combined" map files
generated by MapSource and MapSend when uploading a map set to the
GPS or a card writer).  Because the decoder needs raw access to the
IMG data, many of the functions that would normally be methods in
the various subfile objects (tre, lbl, rgn, etc.) are implemented
in the decoder itself, but as the library develops this code will
get duplicated into the objects.


What isn't working
------------------

Much of NOD is still unknown.