Hi, Hugo.
I came across golfTiles through the OSM community and wanted to say it looks like a really valuable project. The idea of golf-centric vector tiles from OSM data, built on tilemaker and served as PMtiles, fills a genuine gap; and the pipeline you have working already is impressive for such an early stage.
I have spent some time reading through the README, todo.md, process.lua, run_all.sh, and the golftiles.org site, and I have put together a suggested contribution roadmap. I want to be clear that this is offered in the spirit of helping, not criticism; please feel free to take, leave, or reshape any of it as you see fit.
The roadmap is organised into five phases:
Phase 0 — Code health and immediate technical debt
- process.lua TODOs: There are a number of inline
TODO comments in process.lua that could each become a dedicated GitHub issue, keeping the code free of stale annotations. The most actionable is the trio of -- TODO log to some file to process comments in set_AttributeInteger_and_log() — completing this would produce a bad_tags.csv on each run, directly enabling the todo.md item about uploading a fixable dataset for the OSM community.
- run_all.sh: The TODO at line 9 could become an issue. The script would also benefit from
set -e and set -o pipefail to prevent silent failures mid-pipeline.
- golftiles.org: The GitHub link on the homepage appears to be broken (it resolves to
golftiles.org/github.com/... rather than https://github.com/...). A basic MapLibre GL JS embed showing one of the existing sample PMtiles would make the project immediately tangible to new visitors.
- todo.md: Would it be worth converting the items in todo.md and the README's next-steps checklist into GitHub Issues, so contributors can pick things up without having to read across multiple files?
Phase 1 — Data quality pipeline
The tilemaker output already produces a large number of Invalid integer warnings from malformed OSM tags (e.g. hole_number=7 & 16, par=4/5, dist=332 yd). Two improvements here:
- Structured export: Complete the logging stub to write a
bad_tags.csv per run (columns: osm_type, osm_id, key, value). This could seed a MapRoulette challenge or Overpass query for community-led OSM data cleanup.
- Graceful parsing: Harden the Lua to handle the most common real-world patterns — stripping unit suffixes from
dist, extracting integers from X/Y or X & Y formats in hole_number and par, treating named hole variants (e.g. hole_number=Becton 1) as strings rather than attempted integers.
Phase 2 — Schema documentation
- A SCHEMA.md documenting the three layers (
facilities, golf, other), their zoom ranges, all attributes, and the rationale for key decisions — following the shortbread-docs model already mentioned in the README.
- A configuration doc explaining the osmium and tilemaker parameters and their memory/performance trade-offs.
- Wiki contributions covering penalty area tagging (
water_hazard, lateral_water_hazard, surface variants) and the architect tag — both noted as open items in todo.md.
- Implementing
name:<CODE> multi-language subtag support, currently noted as a TODO in general_attributes().
Phase 3 — Testing and CI
- Lua unit tests (e.g. using busted) covering the integer-parsing logic, with test cases drawn from the known-bad tag values in the UK extract output.
- GitHub Actions CI running the full pipeline on a small extract, validating that the output PMtiles file exists and contains the expected layers. The README already lists this as a next step.
Phase 4 — route=golf relation support
This is the highest-impact item: reading hole order from route=golf relations and assigning values to golf_hole= tags, enabling correct multi-course facilities and the animated hole viewer. The current while true do loop in way_function() has an inline comment noting it needs reworking to handle multiple relations. Would it be worth resolving the design question (namespace prefix vs. separate geometry per route) with input from FairwayMapper and the OSM golf tagging community before implementation begins?
Phase 5 — Community and visibility
- A CONTRIBUTING.md covering environment setup, how to run a test tile generation, and coding conventions.
- Coordinating with FairwayMapper on the
route=golf schema, given the shared goals.
- A follow-up OSM diary post or forum thread sharing the bad_tags output and Overpass queries, once the export is working.
I am happy to contribute to any of the above, particularly the data quality work and documentation, where my OSM background is most relevant. Would any of this be useful? And are there areas you would rather keep focused on for now?
Thanks,
Chris
Hi, Hugo.
I came across golfTiles through the OSM community and wanted to say it looks like a really valuable project. The idea of golf-centric vector tiles from OSM data, built on tilemaker and served as PMtiles, fills a genuine gap; and the pipeline you have working already is impressive for such an early stage.
I have spent some time reading through the README, todo.md, process.lua, run_all.sh, and the golftiles.org site, and I have put together a suggested contribution roadmap. I want to be clear that this is offered in the spirit of helping, not criticism; please feel free to take, leave, or reshape any of it as you see fit.
The roadmap is organised into five phases:
Phase 0 — Code health and immediate technical debt
TODOcomments in process.lua that could each become a dedicated GitHub issue, keeping the code free of stale annotations. The most actionable is the trio of-- TODO log to some file to processcomments inset_AttributeInteger_and_log()— completing this would produce abad_tags.csvon each run, directly enabling the todo.md item about uploading a fixable dataset for the OSM community.set -eandset -o pipefailto prevent silent failures mid-pipeline.golftiles.org/github.com/...rather thanhttps://github.com/...). A basic MapLibre GL JS embed showing one of the existing sample PMtiles would make the project immediately tangible to new visitors.Phase 1 — Data quality pipeline
The tilemaker output already produces a large number of
Invalid integerwarnings from malformed OSM tags (e.g.hole_number=7 & 16,par=4/5,dist=332 yd). Two improvements here:bad_tags.csvper run (columns: osm_type, osm_id, key, value). This could seed a MapRoulette challenge or Overpass query for community-led OSM data cleanup.dist, extracting integers fromX/YorX & Yformats inhole_numberandpar, treating named hole variants (e.g.hole_number=Becton 1) as strings rather than attempted integers.Phase 2 — Schema documentation
facilities,golf,other), their zoom ranges, all attributes, and the rationale for key decisions — following the shortbread-docs model already mentioned in the README.water_hazard,lateral_water_hazard, surface variants) and thearchitecttag — both noted as open items in todo.md.name:<CODE>multi-language subtag support, currently noted as a TODO ingeneral_attributes().Phase 3 — Testing and CI
Phase 4 — route=golf relation support
This is the highest-impact item: reading hole order from
route=golfrelations and assigning values togolf_hole=tags, enabling correct multi-course facilities and the animated hole viewer. The currentwhile true doloop inway_function()has an inline comment noting it needs reworking to handle multiple relations. Would it be worth resolving the design question (namespace prefix vs. separate geometry per route) with input from FairwayMapper and the OSM golf tagging community before implementation begins?Phase 5 — Community and visibility
route=golfschema, given the shared goals.I am happy to contribute to any of the above, particularly the data quality work and documentation, where my OSM background is most relevant. Would any of this be useful? And are there areas you would rather keep focused on for now?
Thanks,
Chris