Ce face MBRCovers() și MBRCoveredBy()
Diferența dintre „conține” și „acoperă” este marginea. MBRContains() cere ca punctele să fie strict în interior, pe când MBRCovers() acceptă și punctele de pe contur. MBRCoveredBy(g1, g2) este relația inversă: dreptunghiul lui g1 este acoperit de dreptunghiul lui g2.
Parametri
| Parametru | Descriere |
|---|---|
g1, g2 |
Geometriile ale căror dreptunghiuri se compară. |
Ce returnează
1, 0 sau NULL.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE cartiere (
id INT PRIMARY KEY,
nume VARCHAR(20),
forma POLYGON NOT NULL
);
INSERT INTO cartiere VALUES
(1, 'Centru', ST_GeomFromText('POLYGON((0 0,4 0,4 4,0 4,0 0))')),
(2, 'Copou', ST_GeomFromText('POLYGON((0 4,4 4,4 8,0 8,0 4))')),
(3, 'Tătărași', ST_GeomFromText('POLYGON((3 1,7 1,7 5,3 5,3 1))')),
(4, 'Galata', ST_GeomFromText('POLYGON((10 0,13 0,13 3,10 3,10 0))'));
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: Punct pe margine: conținut sau acoperit
SELECT m.nume,
MBRContains(c.forma, m.loc) AS contine,
MBRCovers(c.forma, m.loc) AS acopera,
MBRCoveredBy(m.loc, c.forma) AS acoperit_de
FROM magazine m JOIN cartiere c ON c.nume = 'Centru'
WHERE m.id IN (1, 4, 5)
ORDER BY m.id;
Rezultat
+----------------+---------+---------+-------------+
| nume | contine | acopera | acoperit_de |
+----------------+---------+---------+-------------+
| Librăria Ana | 1 | 1 | 1 |
| Cafeneaua Mara | 0 | 1 | 1 |
| Atelierul Radu | 0 | 0 | 0 |
+----------------+---------+---------+-------------+
Greșeli frecvente
- Inversezi argumentele la
MBRCoveredBy(). Primul argument este geometria mică, al doilea zona:MBRCoveredBy(punct, zona).
Comenzi înrudite
MBRContains() și MBRWithin(): Verifică dacă dreptunghiul de încadrare al unei geometrii îl conține pe al celeilalte; un test rapid, aproximativ.ST_Contains(): Verifică dacă prima geometrie o conține complet pe a doua (de exemplu un punct în interiorul unui poligon).ST_Intersects(): Verifică dacă două geometrii au măcar un punct comun (inclusiv pe margine).