ST_ConvexHull() în MySQL

Operații spațiale MySQL 5.7+

Returnează înfășurătoarea convexă: cel mai mic poligon convex care cuprinde toată geometria.

Sintaxă
ST_ConvexHull(geometrie)

Ce face ST_ConvexHull()

Înfășurătoarea convexă este forma pe care ar lua-o un elastic întins în jurul tuturor punctelor. Este utilă pentru a afla zona acoperită de un set de puncte, de exemplu zona în care sunt clienții unui magazin.

Pentru o colecție, MySQL ia toate vârfurile tuturor elementelor. Dacă punctele sunt coliniare, rezultatul este o linie. Pentru colecția goală rezultatul este NULL. Funcția nu acceptă SRID geografic.

Parametri

Parametru Descriere
geometrie Valoarea spațială (SRID cartezian).

Ce returnează

Un poligon, o linie sau un punct.

Exemple

Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.

CREATE TABLE magazine (
  id INT PRIMARY KEY,
  nume VARCHAR(20),
  loc POINT NOT NULL
);

INSERT INTO magazine VALUES
  (1, 'Librăria Ana',   Point(1, 1)),
  (2, 'Florăria Dan',   Point(2, 6)),
  (3, 'Brutăria Ioana', Point(5, 3)),
  (4, 'Cafeneaua Mara', Point(4, 2)),
  (5, 'Atelierul Radu', Point(12, 1));

Exemplul 1: Zona acoperită de magazine

SELECT ST_AsText(ST_ConvexHull(ST_Collect(loc))) AS zona,
       ST_Area(ST_ConvexHull(ST_Collect(loc))) AS arie
FROM magazine
WHERE id <= 4;

Rezultat

+--------------------------------+------+
| zona                           | arie |
+--------------------------------+------+
| POLYGON((1 1,4 2,5 3,2 6,1 1)) |   10 |
+--------------------------------+------+

Exemplul 2: Puncte coliniare dau o linie

SELECT ST_AsText(ST_ConvexHull(ST_GeomFromText('MULTIPOINT(0 0,1 1,3 3)'))) AS rezultat;

Rezultat

+---------------------+
| rezultat            |
+---------------------+
| LINESTRING(0 0,3 3) |
+---------------------+

Greșeli frecvente

  • Folosești înfășurătoarea convexă ca graniță exactă a unei zone. Golurile și formele „în C” dispar; este doar o aproximare exterioară.

Comenzi înrudite

  • ST_Envelope(): Returnează dreptunghiul minim de încadrare (MBR) al unei geometrii, ca poligon.
  • ST_Collect(): Funcție de agregare: strânge geometriile din mai multe rânduri într-o singură geometrie Multi sau colecție.
  • ST_Buffer(): Returnează zona formată din toate punctele aflate la cel mult o distanță dată de o geometrie (o „zonă tampon”).