Ce face ST_GeoHash()
Un geohash împarte globul în celule tot mai mici și dă fiecărei celule un cod din litere și cifre. Cu cât codul este mai lung, cu atât celula este mai mică (8 caractere înseamnă aproximativ 40 x 20 m). Puncte apropiate au de obicei același început de cod, așa că geohash-ul se poate indexa și căuta cu LIKE 'u87%'.
Prima formă primește longitudinea și latitudinea ca numere (longitudinea întâi). A doua primește un punct cu SRID 0 sau 4326. lungime_maxima poate fi cel mult 100; rezultatul poate fi mai scurt dacă poziția se poate reprezenta exact.
Parametri
| Parametru | Descriere |
|---|---|
longitudine, latitudine |
Coordonatele în grade (prima formă). |
punct |
Un POINT cu SRID 0 sau 4326 (a doua formă). |
lungime_maxima |
Numărul maxim de caractere (1-100). |
Ce returnează
Un text geohash.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE orase (
id INT PRIMARY KEY,
nume VARCHAR(20),
loc POINT NOT NULL SRID 4326,
SPATIAL INDEX (loc)
);
INSERT INTO orase VALUES
(1, 'Iași', ST_GeomFromText('POINT(47.1585 27.6014)', 4326)),
(2, 'Cluj-Napoca', ST_GeomFromText('POINT(46.7712 23.6236)', 4326)),
(3, 'București', ST_GeomFromText('POINT(44.4268 26.1025)', 4326)),
(4, 'Timișoara', ST_GeomFromText('POINT(45.7489 21.2087)', 4326)),
(5, 'Constanța', ST_GeomFromText('POINT(44.1598 28.6348)', 4326));
Exemplul 1: Geohash pentru orașe, cu diferite lungimi
SELECT nume,
ST_GeoHash(loc, 4) AS gh4,
ST_GeoHash(loc, 8) AS gh8
FROM orase
ORDER BY id;
Rezultat
+-------------+------+----------+
| nume | gh4 | gh8 |
+-------------+------+----------+
| Iași | u87s | u87sk0fw |
| Cluj-Napoca | u82f | u82f1d6j |
| București | sxfs | sxfs9zxk |
| Timișoara | u2ph | u2ph687d |
| Constanța | sxu7 | sxu75x51 |
+-------------+------+----------+
Exemplul 2: Din numere și din punct, același rezultat
SELECT ST_GeoHash(27.6014, 47.1585, 8) AS din_numere,
ST_GeoHash(ST_GeomFromText('POINT(47.1585 27.6014)', 4326), 8) AS din_punct;
Rezultat
+------------+-----------+
| din_numere | din_punct |
+------------+-----------+
| u87sk0fw | u87sk0fw |
+------------+-----------+
Greșeli frecvente
- Dai latitudinea primul în forma cu numere. Prima formă cere longitudinea întâi:
ST_GeoHash(27.6014, 47.1585, 8)pentru Iași.
Comenzi înrudite
ST_LatFromGeoHash(), ST_LongFromGeoHash(), ST_PointFromGeoHash(): Decodifică un geohash: latitudinea, longitudinea sau direct un punct.ST_Distance_Sphere(): Returnează distanța pe o sferă (în metri) dintre două puncte; un calcul rapid, aproximativ, pentru coordonate GPS.Point(): Creează un punct din coordonatele lui x și y; este cel mai simplu mod de a construi o geometrie.