ST_Envelope() în MySQL

Returnează dreptunghiul minim de încadrare (MBR) al unei geometrii, ca poligon.

Sintaxă
ST_Envelope(geometrie)

Ce face ST_Envelope()

MBR („Minimum Bounding Rectangle”) este cel mai mic dreptunghi cu laturile paralele cu axele care conține toată geometria. Rezultatul este poligonul POLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY)).

Pentru un punct, rezultatul este punctul, iar pentru un segment orizontal sau vertical este segmentul (un dreptunghi cu lățimea zero ar fi un poligon invalid). Funcția nu acceptă geometrii cu SRID geografic (de exemplu 4326).

Parametri

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

Ce returnează

Un POLYGON (sau un POINT / LINESTRING în cazurile degenerate).

Exemple

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

CREATE TABLE trasee (
  id INT PRIMARY KEY,
  nume VARCHAR(20),
  linie LINESTRING NOT NULL
);

INSERT INTO trasee VALUES
  (1, 'Autobuz 28',  ST_GeomFromText('LINESTRING(0 0,3 0,3 4,6 4)')),
  (2, 'Tramvai 3',   ST_GeomFromText('LINESTRING(1 6,1 2,5 2)')),
  (3, 'Pistă biciclete', ST_GeomFromText('LINESTRING(0 0,2 2,0 4,0 0)'));

Exemplul 1: Dreptunghiul care încadrează un traseu

SELECT nume, ST_AsText(ST_Envelope(linie)) AS mbr
FROM trasee
ORDER BY id;

Rezultat

+------------------+--------------------------------+
| nume             | mbr                            |
+------------------+--------------------------------+
| Autobuz 28       | POLYGON((0 0,6 0,6 4,0 4,0 0)) |
| Tramvai 3        | POLYGON((1 2,5 2,5 6,1 6,1 2)) |
| Pistă biciclete  | POLYGON((0 0,2 0,2 4,0 4,0 0)) |
+------------------+--------------------------------+

Exemplul 2: Cazurile degenerate: punct și segment vertical

SELECT ST_AsText(ST_Envelope(Point(2, 3))) AS punct,
       ST_AsText(ST_Envelope(ST_GeomFromText('LINESTRING(1 1,1 5)'))) AS segment;

Rezultat

+------------+---------------------+
| punct      | segment             |
+------------+---------------------+
| POINT(2 3) | LINESTRING(1 1,1 5) |
+------------+---------------------+

Greșeli frecvente

  • Folosești ST_Envelope() pe coloane cu SRID 4326. Primești eroarea că funcția nu este implementată pentru sisteme geografice.

Comenzi înrudite

  • ST_MakeEnvelope(): Construiește dreptunghiul care are cele două puncte drept colțuri opuse.
  • MBRContains() și MBRWithin(): Verifică dacă dreptunghiul de încadrare al unei geometrii îl conține pe al celeilalte; un test rapid, aproximativ.
  • ST_ConvexHull(): Returnează înfășurătoarea convexă: cel mai mic poligon convex care cuprinde toată geometria.