MBRIntersects() și MBRDisjoint() în MySQL

Verifică dacă dreptunghiurile de încadrare a două geometrii se intersectează, respectiv dacă sunt separate.

Sintaxă
MBRIntersects(g1, g2)
MBRDisjoint(g1, g2)

Ce face MBRIntersects() și MBRDisjoint()

MBRIntersects() returnează 1 dacă dreptunghiurile au măcar un punct comun (inclusiv pe margine), iar MBRDisjoint() este opusul ei. Pentru că lucrează cu dreptunghiuri, două forme care nu se ating pot avea totuși dreptunghiurile intersectate.

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 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: Dreptunghiuri comparate cu formele exacte

SET @zona = ST_GeomFromText('POLYGON((1.5 2.5,2.5 2.5,2.5 3.5,1.5 3.5,1.5 2.5))');

SELECT nume,
       MBRIntersects(linie, @zona) AS mbr_intersecteaza,
       ST_Intersects(linie, @zona) AS forma_intersecteaza,
       MBRDisjoint(linie, @zona) AS mbr_separate
FROM trasee
ORDER BY id;

Rezultat

+------------------+-------------------+---------------------+--------------+
| nume             | mbr_intersecteaza | forma_intersecteaza | mbr_separate |
+------------------+-------------------+---------------------+--------------+
| Autobuz 28       |                 1 |                   0 |            0 |
| Tramvai 3        |                 1 |                   0 |            0 |
| Pistă biciclete  |                 1 |                   1 |            0 |
+------------------+-------------------+---------------------+--------------+

Greșeli frecvente

  • Tratezi rezultatul MBR ca pe unul exact. Este doar un filtru rapid; confirmă cu ST_Intersects().

Comenzi înrudite

  • ST_Intersects(): Verifică dacă două geometrii au măcar un punct comun (inclusiv pe margine).
  • ST_Disjoint(): Verifică dacă două geometrii nu au niciun punct comun (sunt complet separate).
  • MBRContains() și MBRWithin(): Verifică dacă dreptunghiul de încadrare al unei geometrii îl conține pe al celeilalte; un test rapid, aproximativ.