Files
garmin-img-format-parsing/stage-2-parse-stage-1
2026-04-14 16:37:10 -07:00
..
2026-04-14 16:37:10 -07:00
2026-04-14 16:37:10 -07:00

You have two good OsmAnd targets now.

The fast, practical one is GPX waypoint overlay. OsmAnd supports GPX import, waypoint icons/colors, and waypoint grouping through OsmAnd-specific GPX extensions, so this is the closest match to a toggleable landmark layer without fighting the full map compiler. Favorites are also stored/imported as GPX waypoints, which confirms GPX is a native path for point overlays. (OsmAnd)

The more native/searchable one is POI-only OBF. OsmAndMapCreator officially supports generate-poi separately from generate-obf, and it accepts OSM-family input such as .osm, .osm.gz, .osm.bz2, and .pbf. That makes it the right target when you want searchable/filterable POIs but do not want the routing stage that is currently crashing. (OsmAnd)

I packaged both paths into a converter:

landmarks_csv_to_osmand.py

Sample outputs:

What I recommend

For a “BGMountains-like thing I can switch on and off,” use GPX overlays first. For a “native searchable POI pack,” use POI-only OBF second.

Path 1: GPX overlay layer

This is the quickest route.

It converts your landmark CSVs into a GPX file with:

  • one waypoint per landmark
  • grouped categories using <type>
  • OsmAnd waypoint group styling via osmand:points_groups
  • icons/colors per category

Build it like this:

python landmarks_csv_to_osmand.py *.csv --gpx bg_landmarks.gpx --group-by category

For just water sources:

python landmarks_csv_to_osmand.py *.csv --category water_sources --gpx bg_water_sources.gpx

Then import that GPX into OsmAnd. GPX waypoints and waypoint groups are supported officially, including icon/color/background customization. (OsmAnd)

Best practice for toggling: make one GPX file per theme:

  • water_sources.gpx
  • villages.gpx
  • summits.gpx
  • springs.gpx

That gives you clean on/off control by file instead of stuffing everything into one blob.

Path 2: native POI pack for OsmAnd

This is better when you want it to behave more like a built-in searchable POI dataset.

First convert CSVs to OSM XML:

python landmarks_csv_to_osmand.py *.csv --category water_sources --osm water_sources.osm

Then build a POI-only OBF:

java.exe -Xms256M -Xmx4096M -cp "OsmAndMapCreator.jar;lib/*" ^
  net.osmand.MainUtilities generate-poi C:\path\to\water_sources.osm

That uses OsmAndMapCreators documented generate-poi mode and avoids the routing stage entirely. (OsmAnd)

Which one should you choose?

Use GPX when you want:

  • fast import
  • easy toggle on/off
  • visual overlay behavior
  • category grouping with custom icons/colors

Use POI-only OBF when you want:

  • more native OsmAnd integration
  • better POI-style searching/indexing
  • a cleaner long-term pack

Important limitation

For now, your landmark CSV path is strongest for exact-coordinate point features. That is why it works well for springs, drinking water, villages, summits, and similar point landmarks. It is not the same as a full vector map overlay with arbitrary line/polygon filtering.

Ready-to-use commands

All CSVs into one grouped GPX:

python landmarks_csv_to_osmand.py *.csv --gpx all_landmarks.gpx --group-by category --summary-json all_landmarks_summary.json

Only water sources into GPX:

python landmarks_csv_to_osmand.py *.csv --category water_sources --gpx water_sources.gpx

Only water sources into OSM for POI build:

python landmarks_csv_to_osmand.py *.csv --category water_sources --osm water_sources.osm

Only named villages into GPX:

python landmarks_csv_to_osmand.py *.csv --filter-tag place=village --named-only --gpx villages.gpx

The cleanest deployment pattern is: one GPX per category for toggles, plus one POI-only OBF per high-value category for native search.