feat(presentation): wyszukiwarka lokalizacji + mapa (OSM/Leaflet) #6

Merged
gitea merged 1 commits from feat/location-search-leaflet into master 2026-07-21 01:41:57 +00:00
Owner

QoL 2/2 — wyszukiwarka lokalizacji + interaktywna mapa

Na formularzach Horoskop / Interpretacje / Kalendarz doszlo pole „Szukaj miejsca"
(nazwa / adres / POI) i interaktywna mapa (OpenStreetMap / Leaflet). Bez klucza API.

⚠️ Stacked na PR #5 (domyslna
lokalizacja). Gitea/tea nie pozwolilo ustawic bazy na galaz nie-domyslna, wiec base=master
i ten diff zawiera rowniez commit z PR #5. Kolejnosc: najpierw zmerguj #5, wtedy ten
diff zredukuje sie do samej wyszukiwarki. Oba dotykaja tych samych plikow (main.py, szablony).

Dlaczego OSM/Nominatim, nie Google

Zgodnie z ustaleniem: Google Places wymaga konta GCP z rozliczeniem + klucza w kliencie + ToS.
OSM/Nominatim jest keyless, darmowy, rozwiazuje POI („Szpital Barlickiego") i zwraca gotowe lat/lon.
Leaflet (BSD-2-Clause, permisywny) — spojne ze sciezka A.

Jak

  • geocode.py — proxy Nominatim po stronie serwera (User-Agent, throttling ~1 req/s,
    cache TTL 1h) → /geocode i /reverse. Serwerowo, bo latwiej trzymac polityke Nominatim i
    dziala niezaleznie od secure-context (wasze http://<ip>).
  • _location_picker.html — wspolny partial (search + wyniki + mapa + atrybucja OSM),
    wpiety jednym {% include %} do 3 formularzy.
  • geo.js — Leaflet: wyszukiwanie z debounce, klik na wynik ustawia lat/lon i centruje mape,
    klik/drag pineski ustawia wspolrzedne + /reverse pokazuje nazwe; sync z „Tu i teraz".
  • Leaflet 1.9.4 vendorowany (static/vendor/leaflet) — niezaleznosc od CDN; kafelki z OSM;
    marker jako divIcon (bez PNG).

Weryfikacja (w przegladarce)

Domyslny widok = pineska na Szpitalu Barlickiego. „Wawel Krakow" → lista → klik ustawia
50.0547/19.9361 i przesuwa mape; klik w mape ustawia wspolrzedne + reverse wypelnia nazwe.
Zero bledow w konsoli. /geocode i /reverse zwracaja szpital; cache dziala (2. zapytanie ~2ms).

Uwaga wdrozeniowa

Pod presentation potrzebuje egressu do nominatim.openstreetmap.org; przegladarki — do
tile.openstreetmap.org. Bez internetu: reczne lat/lon i reszta UI dzialaja dalej.

## QoL 2/2 — wyszukiwarka lokalizacji + interaktywna mapa Na formularzach Horoskop / Interpretacje / Kalendarz doszlo pole **„Szukaj miejsca"** (nazwa / adres / POI) i **interaktywna mapa** (OpenStreetMap / Leaflet). Bez klucza API. > ⚠️ **Stacked na [PR #5](https://gitea.czernobog.pl/gitea/astrololo/pulls/5)** (domyslna > lokalizacja). Gitea/tea nie pozwolilo ustawic bazy na galaz nie-domyslna, wiec base=master > i **ten diff zawiera rowniez commit z PR #5**. Kolejnosc: **najpierw zmerguj #5**, wtedy ten > diff zredukuje sie do samej wyszukiwarki. Oba dotykaja tych samych plikow (main.py, szablony). ## Dlaczego OSM/Nominatim, nie Google Zgodnie z ustaleniem: Google Places wymaga konta GCP z rozliczeniem + klucza w kliencie + ToS. OSM/Nominatim jest keyless, darmowy, rozwiazuje POI („Szpital Barlickiego") i zwraca gotowe lat/lon. Leaflet (BSD-2-Clause, permisywny) — spojne ze sciezka A. ## Jak - **`geocode.py`** — proxy Nominatim **po stronie serwera** (User-Agent, throttling ~1 req/s, cache TTL 1h) → `/geocode` i `/reverse`. Serwerowo, bo latwiej trzymac polityke Nominatim i dziala niezaleznie od secure-context (wasze `http://<ip>`). - **`_location_picker.html`** — wspolny partial (search + wyniki + mapa + atrybucja OSM), wpiety jednym `{% include %}` do 3 formularzy. - **`geo.js`** — Leaflet: wyszukiwanie z debounce, klik na wynik ustawia lat/lon i centruje mape, klik/drag pineski ustawia wspolrzedne + `/reverse` pokazuje nazwe; sync z „Tu i teraz". - **Leaflet 1.9.4 vendorowany** (`static/vendor/leaflet`) — niezaleznosc od CDN; kafelki z OSM; marker jako `divIcon` (bez PNG). ## Weryfikacja (w przegladarce) Domyslny widok = pineska na Szpitalu Barlickiego. „Wawel Krakow" → lista → klik ustawia 50.0547/19.9361 i przesuwa mape; klik w mape ustawia wspolrzedne + reverse wypelnia nazwe. Zero bledow w konsoli. `/geocode` i `/reverse` zwracaja szpital; cache dziala (2. zapytanie ~2ms). ## Uwaga wdrozeniowa Pod `presentation` potrzebuje egressu do `nominatim.openstreetmap.org`; przegladarki — do `tile.openstreetmap.org`. Bez internetu: reczne lat/lon i reszta UI dzialaja dalej.
gitea added 1 commit 2026-07-21 01:32:28 +00:00
feat(presentation): wyszukiwarka lokalizacji + mapa (OSM/Leaflet)
Testy / Testy warstwy logicznej (silnik) (pull_request) Successful in 10m39s
Testy / Build obrazu silnika B (swisseph) (pull_request) Failing after 28s
Testy / Kontrola składni wszystkich warstw (pull_request) Successful in 21s
build / build (push) Successful in 57s
Testy / Testy warstwy logicznej (silnik) (push) Successful in 10m47s
Testy / Build obrazu silnika B (swisseph) (push) Failing after 29s
Testy / Kontrola składni wszystkich warstw (push) Successful in 22s
a2aabd37a5
QoL 2/2: pole „Szukaj miejsca" (nazwa/adres/POI) + interaktywna mapa na
formularzach horoskopu / interpretacji / kalendarza. Bez klucza API.

- geocode.py: proxy OSM/Nominatim PO STRONIE SERWERA (poprawny User-Agent,
  throttling ~1 req/s, cache TTL 1h) — endpointy /geocode i /reverse.
  Wolanie z serwera, nie z przegladarki: latwiej trzymac polityke Nominatim
  i dziala niezaleznie od secure-context (http://<ip>).
- _location_picker.html: wspolny partial (search + wyniki + mapa + atrybucja),
  wpiety includem do 3 formularzy z polami lat/lon.
- geo.js: Leaflet — wyszukiwanie (debounce), klik na wynik ustawia lat/lon i
  centruje mape, klik/drag pineski ustawia wspolrzedne + /reverse pokazuje
  nazwe; sync z „Tu i teraz" (now.js emituje event astrololo:coords).
- Leaflet 1.9.4 vendorowany lokalnie (static/vendor/leaflet, BSD-2-Clause,
  permisywny) — niezaleznosc od CDN; kafelki mapy z OSM. Marker jako divIcon
  (bez plikow PNG).
- styles.css: style pod ciemny motyw.

Zweryfikowane w przegladarce: domyslny widok (pineska na Szpitalu Barlickiego),
wyszukanie „Wawel Krakow" -> lista -> klik ustawia 50.0547/19.9361 i przesuwa
mape, klik w mape ustawia wspolrzedne + reverse wypelnia nazwe. Zero bledow
w konsoli. /geocode i /reverse zwracaja szpital; cache dziala.

Uwaga wdrozeniowa: pod prezentacji potrzebuje egressu do
nominatim.openstreetmap.org; przegladarki — do tile.openstreetmap.org.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
gitea force-pushed feat/location-search-leaflet from d4a37aca52 to a2aabd37a5 2026-07-21 01:32:28 +00:00 Compare
gitea merged commit a2aabd37a5 into master 2026-07-21 01:41:57 +00:00
gitea deleted branch feat/location-search-leaflet 2026-07-21 01:41:58 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gitea/astrololo#6