Skip to content

Develop#39

Merged
Majorfi merged 6 commits into
mainfrom
develop
Mar 21, 2026
Merged

Develop#39
Majorfi merged 6 commits into
mainfrom
develop

Conversation

@Majorfi

@Majorfi Majorfi commented Mar 21, 2026

Copy link
Copy Markdown
Owner

Google Maps geocoding provider

  • Reverse geocode via Google Geocoding API, extracts structured address components
  • Forward search with index-based PlaceIDs
  • Rate limiter (50ms/req, burst 10), in-memory cache

Chain geocoder replacing fallback geocoder

  • GEOCODE_PROVIDER now accepts comma-separated values (ex: here,google)
  • Nominatim is always first, then providers are tried in order
  • chainGeocoder replaces the old two-provider fallbackGeocoder
  • describeProvider() for accurate startup logging

Provider-specific API keys

  • New env vars: HERE_API_KEY, GOOGLE_API_KEY
  • GEOCODE_API_KEY kept as legacy fallback via resolveKey()

Language parameter on ReverseGeocode

  • ReverseGeocode now accepts lang string (was hardcoded "en")
  • All providers default to "en" when empty
  • Sync service passes "en", HTTP handlers can pass browser language

Rate limit handling improvements

  • Nominatim ForwardSearch now has adaptive 429 handling (was missing)
  • HERE ForwardSearch now returns descriptive 429 errors
  • Shared adaptRateLimiter() method eliminates code duplication
  • All ForwardSearch implementations default lang to "en"

Config/docs

  • Documented chain format, provider-specific keys
  • Added missing IMMICH_EXTERNAL_URL and DAWARICH_URL pass-through

Majorfi added 6 commits March 21, 2026 20:19
Introduces provider-specific environment variables (HERE_API_KEY, GOOGLE_API_KEY) while maintaining GEOCODE_API_KEY as a legacy fallback. Updates GEOCODE_PROVIDER to accept comma-separated provider chains (e.g. 'here,google') enabling fallback behavior. Adds IMMICH_EXTERNAL_URL and DAWARICH_URL configuration.

Change-Type: feature
Scope: config
Replaces the rigid 2-provider fallback with an N-provider chain pattern. Providers are tried in sequence; weak results (coordinates or 'Unknown') trigger the next provider. Adds resolveKey helper for API key resolution and describeProvider for logging the active chain.

Change-Type: refactor
Scope: geocoder
Implements reverse geocoding and forward search against Google Maps API. Includes per-request rate limiting and address component-based label building to match existing provider behavior.

Change-Type: feature
Scope: providers
Extracts Nominatim rate limiter adaptation into adaptRateLimiter method. Fixes language parameter to default to 'en' when not provided across all providers. Adds explicit 429 (rate limit) checks and simplifies string building logic in nominatimClient.

Change-Type: refactor
Scope: providers
Updates geocode provider initialization to accept structured API keys object. Uses describeProvider for logging the active provider chain instead of raw config string.

Change-Type: refactor
Scope: main
Add language parameter support to ReverseGeocode interface and all provider implementations. This allows callers to specify preferred language for address results, with "en" as the default fallback.

Each provider integrates the language parameter according to its API:
- Google Maps: uses 'language' query parameter
- HERE: uses 'lang' query parameter
- Nominatim: uses 'Accept-Language' header

Updates all call sites and tests to pass language to the method.

Change-Type: feature
Scope: geocoding
@Majorfi Majorfi merged commit a6ecbe2 into main Mar 21, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant