Name

ST_Crosses — Testar om två geometrier har vissa, men inte alla, inre punkter gemensamt

Synopsis

boolean ST_Crosses(geometry g1, geometry g2);

Beskrivning

Jämför två geometriobjekt och returnerar true om deras skärningspunkt "korsar varandra spatialtt", dvs. geometrierna har vissa men inte alla inre punkter gemensamma. Skärningspunkten mellan geometriernas inre punkter måste vara icke-tom och ha en dimension som är mindre än den maximala dimensionen för de två geometrierna i indata, och skärningspunkten mellan de två geometrierna får inte vara lika med någon av geometrierna. I annat fall returneras false. Crosses-relationen är symmetrisk och irreflexiv.

I matematiska termer: ST_Crosses(A, B) ⇔ (dim( Int(A) ⋂ Int(B) ) < max( dim( Int(A) ), dim( Int(B) ) )) ∧ (A ⋂ B ≠ A) ∧ (A ⋂ B ≠ B)

Geometrier korsas om deras DE-9IM Intersection Matrix matchar:

  • T*T****** för situationerna Point/Line, Point/Area och Line/Area

  • T*****T** för Line/Point-, Area/Point- och Area/Line-situationer

  • 0******** för Line/Line-situationer

  • resultatet är falskt för Point/Point- och Area/Area-situationer

[Note]

OpenGIS Simple Features Specification definierar detta predikat endast för situationerna Point/Line, Point/Area, Line/Line och Line/Area. JTS / GEOS utökar definitionen till att även gälla Line/Point, Area/Point och Area/Line situationer. Detta gör relationen symmetrisk.

[Note]

Denna funktion inkluderar automatiskt en jämförelse av begränsningsrutor som använder alla spatiala index som finns tillgängliga för geometrierna.

[Important]

Förbättrad: 3.0.0 aktiverade stöd för GEOMETRYCOLLECTION

Denna metod implementerar OGC:s implementeringsspecifikation för enkla funktioner för SQL 1.1. s2.1.13.3

Denna metod implementerar SQL/MM-specifikationen. SQL-MM 3: 5.1.29

Exempel

Följande situationer returnerar alla true.

MULTIPOINT / LINESTRING

MULTIPOINT / POLYGON

LINESTRING / POLYGON

LINESTRING / LINESTRING

Tänk dig en situation där en användare har två tabeller: en tabell med vägar och en tabell med motorvägar.

CREATE TABLE roads (
  id serial NOT NULL,
  geom geometry,
  CONSTRAINT roads_pkey PRIMARY KEY (road_id)
);

CREATE TABLE highways (
  id serial NOT NULL,
  the_gem geometry,
  CONSTRAINT roads_pkey PRIMARY KEY (road_id)
);

För att få fram en lista över vägar som korsar en motorväg, använd en fråga som liknar:

SELECT roads.id
FROM roads, highways
WHERE ST_Crosses(roads.geom, highways.geom);