ST_MakeEnvelope() în MySQL

Operații spațiale MySQL 5.7+

Construiește dreptunghiul care are cele două puncte drept colțuri opuse.

Sintaxă
ST_MakeEnvelope(punct1, punct2)

Ce face ST_MakeEnvelope()

ST_MakeEnvelope() este modul rapid de a crea zona de căutare pentru o hartă: colțul stânga-jos și colțul dreapta-sus ale ecranului. Dacă punctele sunt egale, rezultatul este punctul; dacă sunt pe aceeași orizontală sau verticală, rezultatul este segmentul dintre ele.

Calculul se face în plan, iar rezultatul are SRID 0. Punctele cu SRID geografic produc eroare.

Parametri

Parametru Descriere
punct1, punct2 Două colțuri opuse, ca POINT.

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 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: Dreptunghiul și cazurile degenerate

SELECT ST_AsText(ST_MakeEnvelope(Point(0, 0), Point(5, 4))) AS dreptunghi,
       ST_AsText(ST_MakeEnvelope(Point(1, 1), Point(1, 1))) AS punct,
       ST_AsText(ST_MakeEnvelope(Point(0, 2), Point(5, 2))) AS segment;

Rezultat

+--------------------------------+------------+---------------------+
| dreptunghi                     | punct      | segment             |
+--------------------------------+------------+---------------------+
| POLYGON((0 0,5 0,5 4,0 4,0 0)) | POINT(1 1) | LINESTRING(0 2,5 2) |
+--------------------------------+------------+---------------------+

Exemplul 2: Magazinele vizibile pe porțiunea de hartă afișată

SELECT nume
FROM magazine
WHERE MBRContains(ST_MakeEnvelope(Point(0, 0), Point(5, 4)), loc)
ORDER BY id;

Rezultat

+----------------+
| nume           |
+----------------+
| Librăria Ana   |
| Cafeneaua Mara |
+----------------+

Greșeli frecvente

  • Folosești ST_MakeEnvelope() cu puncte GPS cu SRID 4326. Primești eroare; pentru zone geografice construiește poligonul cu ST_GeomFromText(..., 4326).

Comenzi înrudite

  • ST_Envelope(): Returnează dreptunghiul minim de încadrare (MBR) al unei geometrii, ca poligon.
  • MBRContains() și MBRWithin(): Verifică dacă dreptunghiul de încadrare al unei geometrii îl conține pe al celeilalte; un test rapid, aproximativ.
  • ST_GeomFromText(): Creează o geometrie de orice tip din textul ei WKT („Well-Known Text”), opțional cu SRID.