ST_GeoHash() în MySQL

Codifică o poziție (longitudine, latitudine) într-un geohash: un text scurt, ca u87sk0fw pentru Iași.

Sintaxă
ST_GeoHash(longitudine, latitudine, lungime_maxima)
ST_GeoHash(punct, lungime_maxima)

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