Module: GitFit::Elevation::DemCache
- Defined in:
- lib/git_fit/elevation/dem_cache.rb
Constant Summary collapse
- DEM_CACHE_DIR =
ENV.fetch('GIT_FIT_DEM_CACHE_DIR', 'data/cache/dem')
- CACHE_FILE =
File.join(DEM_CACHE_DIR, 'dem.json')
- GRID =
0.0003
Class Method Summary collapse
- .grid_key(lat, lng) ⇒ Object
- .load_all ⇒ Object
- .load_batch(slice) ⇒ Object
- .missing_keys(slice, cached) ⇒ Object
- .save_batch(elevs_by_gk) ⇒ Object
Class Method Details
.grid_key(lat, lng) ⇒ Object
14 15 16 |
# File 'lib/git_fit/elevation/dem_cache.rb', line 14 def grid_key(lat, lng) "#{(lat / GRID).round}/#{(lng / GRID).round}" end |
.load_all ⇒ Object
18 19 20 21 22 23 |
# File 'lib/git_fit/elevation/dem_cache.rb', line 18 def load_all return {} unless File.exist?(CACHE_FILE) JSON.parse(File.read(CACHE_FILE)) rescue StandardError {} end |
.load_batch(slice) ⇒ Object
25 26 27 28 29 30 31 32 33 |
# File 'lib/git_fit/elevation/dem_cache.rb', line 25 def load_batch(slice) all = load_all results = {} slice.each do |lat, lng| gk = grid_key(lat, lng) results[gk] = all[gk] if all.key?(gk) end results end |
.missing_keys(slice, cached) ⇒ Object
35 36 37 |
# File 'lib/git_fit/elevation/dem_cache.rb', line 35 def missing_keys(slice, cached) slice.reject { |lat, lng| cached.key?(grid_key(lat, lng)) } end |
.save_batch(elevs_by_gk) ⇒ Object
39 40 41 42 43 44 45 46 47 |
# File 'lib/git_fit/elevation/dem_cache.rb', line 39 def save_batch(elevs_by_gk) return if elevs_by_gk.empty? FileUtils.mkdir_p(DEM_CACHE_DIR) existing = load_all elevs_by_gk.each { |gk, elev| existing[gk] = elev } File.write(CACHE_FILE, JSON.generate(existing)) rescue StandardError => e warn "DEM cache write error: #{e.}" end |