python3 garmin_img_to_osmand.py input.img \
  --geojson out.geojson \
  --osm out.osm \
  --meta-json out_meta.json



Yes.

`pygarmin` is not the right base for parsing `.img` map internals. Its docs describe a Python module and CLI for communicating with Garmin GPS devices over Garmin protocols and transferring data or maps to and from the device, not decoding the internal TRE/RGN/LBL structures inside a Garmin IMG file. ([quentinsf.com][1])

The workable route is the one you asked for: treat Garmin IMG as a reverse-engineered container, extract its subfiles, decode the vector geometry, then emit a format OsmAnd can consume. Public reverse-engineering describes IMG as a disk-image-like container with subfiles, and OsmAnd’s own docs say its vector-map creation flow starts from OSM files and explicitly notes you can generate OSM XML yourself and then convert that to `.obf`. ([OpenStreetMap][2])

I built you a TTY-style prototype here:

[garmin_img_to_osmand.py](sandbox:/mnt/data/garmin_img_to_osmand.py)

What it does:

* extracts Garmin IMG subfiles from the FAT-style container
* resolves classic `TRE` / `RGN` / `LBL` layouts, plus many `.GMP`-wrapped maps
* parses TRE levels and subdivisions
* decodes common LBL label codings
* parses standard points, extended points, standard polylines/polygons, and extended polylines/polygons
* exports either GeoJSON or OSM XML

Why I made it emit **OSM XML** as a first-class output: that is the most useful handoff for OsmAnd, because OsmAndMapCreator accepts OSM input and converts it into `.obf`. GeoJSON is also useful for inspection and debugging, but OSM XML is the better bridge into OsmAnd’s actual vector-map toolchain. ([osmand.net][3])

Use it like this:

```bash
python3 garmin_img_to_osmand.py input.img \
  --geojson out.geojson \
  --osm out.osm \
  --meta-json out_meta.json
```

Then, for OsmAnd, feed the produced `out.osm` into OsmAndMapCreator or its shell utilities, for example the `generate-obf` flow described in their docs. ([osmand.net][3])

What to expect from this prototype:

* good chance of working on many ordinary reverse-engineered **vector** IMG maps
* not guaranteed on every commercial/locked/vendor-specific NT variant
* it preserves Garmin type codes as tags like `garmin:type=0x...` instead of inventing fake OSM semantics

If you want the next step, upload the actual `.img` file and I’ll adapt the parser against that specific sample instead of keeping it generic.

[1]: https://quentinsf.com/software/pygarmin/ "https://quentinsf.com/software/pygarmin/"
[2]: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/IMG_File_Format "https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/IMG_File_Format"
[3]: https://osmand.net/docs/technical/map-creation/create-offline-maps-yourself/ "https://osmand.net/docs/technical/map-creation/create-offline-maps-yourself/"

