3d 如何在PostGIS中使用SQL确定三维点是否位于实体对象内?

3d 如何在PostGIS中使用SQL确定三维点是否位于实体对象内?,3d,postgis,intersection,3d,Postgis,Intersection,在使用PostGIS确定三维点是否位于实体对象内部时,我遇到了一些麻烦 我尝试过创建最简单的实体: ST_MakeSolid('POLYHEDRALSURFACE Z ( ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 0 1 0, 0 1 1, 0 0 1, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 1, 1 0 1, 0 0 1, 0 1 1, 1

在使用PostGIS确定三维点是否位于实体对象内部时,我遇到了一些麻烦

我尝试过创建最简单的实体:

ST_MakeSolid('POLYHEDRALSURFACE Z (
    ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
    ((0 0 0, 0 1 0, 0 1 1, 0 0 1, 0 0 0)),
    ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
    ((1 1 1, 1 0 1, 0 0 1, 0 1 1, 1 1 1)),
    ((1 1 1, 1 0 1, 1 0 0, 1 1 0, 1 1 1)),
    ((1 1 1, 1 1 0, 0 1 0, 0 1 1, 1 1 1))
  )'::geometry)
并想知道以下3D点是否在其内部

SELECT ST_3DIntersects(
  ST_MakeSolid('POLYHEDRALSURFACE Z (
    ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
    ((0 0 0, 0 1 0, 0 1 1, 0 0 1, 0 0 0)),
    ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
    ((1 1 1, 1 0 1, 0 0 1, 0 1 1, 1 1 1)),
    ((1 1 1, 1 0 1, 1 0 0, 1 1 0, 1 1 1)),
    ((1 1 1, 1 1 0, 0 1 0, 0 1 1, 1 1 1))
  )'::geometry),
  ST_MakeSolid('POINT Z (0.5 0.5 0.5)'::geometry)
);
上面的代码返回false。我怀疑ST_3DIntersects仅在点与实体曲面相交时返回true。我怀疑这是因为此查询返回true:

SELECT ST_3DIntersects(
  ST_MakeSolid('POLYHEDRALSURFACE Z (
    ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
    ((0 0 0, 0 1 0, 0 1 1, 0 0 1, 0 0 0)),
    ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
    ((1 1 1, 1 0 1, 0 0 1, 0 1 1, 1 1 1)),
    ((1 1 1, 1 0 1, 1 0 0, 1 1 0, 1 1 1)),
    ((1 1 1, 1 1 0, 0 1 0, 0 1 1, 1 1 1))
  )'::geometry),
  ST_MakeSolid('POINT Z (1 1 1)'::geometry)
);
我知道我可以使用
&&&
-函数,但我的实体将更复杂,这就是为什么我不能使用实体的边界框

有人知道使用哪个3D函数来确定点是否位于实体对象内吗