如何在 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
我本以为明显的查询是:
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