如何在 PostGIS 中根据 3D 边界框检查 3D 坐标?

How to check 3D coordinates against 3D bounding box in PostGIS?

我本以为明显的查询是:

postgres=# SELECT ST_GeomFromText( 'POINT( 1 2 3 )' ) &&&
                  'BOX3D( -5 -5 -5, 5 5 5 )'::box3d;

但这会导致

 ?column?
----------
 f

相对于t

查询似乎完全丢失了边界框的 z 坐标。这也会导致以下问题,其中范围从 z=1 到 z=2 的边界框将 return t 对于 z=0 处的点:

galaxymap=# SELECT ST_GeomFromText( 'POINT( 0 0 0 )' ) &&&
                   'BOX3D( -1 -1 1, 1 1 2 )'::box3d;
 ?column?
----------
 t
(1 row)

经过一个小时的谷歌搜索,我终于在 postgis-devel 邮件列表上找到了 e-mail conversation

Our boxes are all broken. There should be somewhere a wiki page or ticker or something about options to improve the situation.

建议的解决方法似乎是使用线(或边界对角线,我没有尝试):

SELECT ST_MakePoint( 1, 2, 3 ) &&& ST_MakeLine(
           ST_MakePoint( -10, -10, -10 ), ST_MakePoint( 10, 10, 10 ) );
 ?column?
----------
 t