Consider this query:
SELECT
ST_3DIntersects(a1, a2)
FROM ST_GeomFromText('GEOMETRYCOLLECTION Z (POINT Z EMPTY, POINT Z (0 0 0))') As a1
, ST_GeomFromText('POINT Z (0 0 0)') As a2;
--expected{t}; actual{f}
Postgis produces a result of false, but I expected it to produce true. I think this is a bug, due to the following 3 reasons:
- ST_3DIntersection(a1, a2) returns POINT Z (0 0 0). So the expected result of 3DIntersects is true.
- Considering the 2D version function, ST_Intersects(a1, a2) returns true here:
SELECT
ST_Intersects(a1, a2)
FROM ST_GeomFromText('GEOMETRYCOLLECTION(POINT EMPTY, POINT (0 0))') As a1
, ST_GeomFromText('POINT (0 0)') As a2;
--expected{t}
- Making the empty point position behind POINT Z (0 0 0), ST_3DIntersection(a1, a2) returns true.
SELECT
ST_3DIntersects(a1, a2)
FROM ST_GeomFromText('GEOMETRYCOLLECTION Z ( POINT Z (0 0 0)), POINT Z EMPTY') As a1
, ST_GeomFromText('POINT Z (0 0 0)') As a2;
--expected{t};
Version: POSTGIS="3.4.0 0874ea3" [EXTENSION] PGSQL="150" GEOS="3.9.0-CAPI-1.16.2" SFCGAL="1.3.8" PROJ="7.2.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn. proj.org USER_WRITABLE_DIRECTORY=/var/lib/postgresql/.local/share/proj DATABASE_PATH=/usr/share/proj/proj.db" LIBXML="2.9.10" LIBJSON="0.15" LIBPR OTOBUF="1.3.3" WAGYU="0.5.0 (Internal)" TOPOLOGY