Koder i dekoder Geohash
Prywatne z założenia — działa w całości w Państwa przeglądarce
W trybie encode wpisz szerokość i długość geograficzną (z suwakiem precyzji), aby otrzymać string geohash. W trybie decode wklej hash, by zobaczyć współrzędne środka i granice południowo-zachodni/północno-wschodni jego komórki. Przydatne do indeksów przestrzennych, wyszukiwań po bliskości i pseudonimizowanego przechowywania lokalizacji.
Co geohash naprawdę koduje
Geohash przeplata bity długości i szerokości geograficznej, a wynik koduje w base32 z własnym alfabetem (0-9 oraz b-z bez a/i/l/o). Każdy znak wnosi 5 bitów precyzji, na przemian doprecyzowując długość i szerokość. Efektem jest krótki, URL-safe ciąg, którego relacja prefiksu odpowiada zawieraniu się komórek przestrzennych: każdy geohash zaczynający się od "dr5ru" leży w komórce dr5ru.
Precyzja i wielkość komórki
Przy precyzji 1 świat dzieli się na 32 komórki o szerokości ok. 5 000 km. Precyzja 5 (~ 4,9 km na równiku) jest dobra do grupowania na poziomie dzielnicy. Precyzja 9 (~ 5 m) to skala pojedynczego budynku. Precyzja 12 schodzi do ~ 4 cm, rzadko potrzebna poza geodezją. Komórki maleją w pobliżu biegunów.
Po co używać geohashy
Prefiksy łańcuchów indeksują się świetnie w PostgreSQL, Redis, DynamoDB i SQLite. Aby znaleźć punkty w promieniu 5 km od celu, oblicz jego geohash w precyzji 5 i szukaj zgodności prefiksu — znacznie taniej niż zapytania z dystansem ortodromicznym. Efekt krawędzi komórki istnieje, więc w produkcji pyta się dodatkowo o osiem sąsiednich komórek. Geohash jest prostszy i starszy od S2/H3 i wciąż pozostaje najlżejszym schematem do zadań proximity na ścieżce gorącej.
Najczęściej zadawane pytania
- Dlaczego precyzja 5 obejmuje całe miasto?
- Każdy znak to 5 bitów, więc precyzja 5 = 25 bitów ≈ komórki 4,9 km × 4,9 km w pobliżu równika. Miasta o szerokości paru kilometrów mieszczą się w jednej komórce, dlatego wiele aplikacji ride-hailing i dostaw grupuje kierowców/zamówienia po geohash precyzji 5 dla szybkiego dopasowania.
- Dwa bliskie punkty mają różne geohashe — bug?
- To nie błąd, lecz artefakt siatki. Punkty po dwóch stronach granicy komórki nie mają wspólnego prefiksu nawet w odległości 1 m. W produkcji pyta się o hash celu plus osiem sąsiadów (pierścień 3×3).
- Jakiego alfabetu używa geohash?
- 0-9 plus b-z bez a, i, l, o. Wykluczenie tych liter zapobiega myleniu z 0/1 w słabo kontrastowych krojach. To base32 z tym własnym alfabetem, różne od base32 z RFC 4648.
- Jak geohash wypada wobec S2 i H3?
- Geohash jest najprostszy i najstarszy z trójki. S2 (sześcian rzutowany na sferę) i H3 (siatka heksagonalna) lepiej radzą sobie z deformacją przy biegunach, ale wymagają więcej kodu. Dla większości zadań aplikacyjnych z proximity geohash wystarcza; dla nawigacji w skali planety opłacają się S2/H3.
- Czy można bezpiecznie indeksować geohashe w PostgreSQL?
- Tak. Trzymaj hash w kolumnie text z indeksem btree, a wyszukiwania prefiksowe (LIKE 'dr5ru%') stają się bardzo szybkie. Do zapytań przestrzennych uzupełnij PostGIS-em; w większości przypadków wystarcza prefiks.
- Czy Toova loguje współrzędne, które koduję?
- Nie. Encode i decode wykonują się w JavaScript tej strony. Współrzędne i wynikowy hash nie trafiają do żadnego serwera Toova.