[ST_contains过滤时无法正常工作

问题描述 投票:0回答:1

我有以下表格和数据。

create table test ( id bigserial not null,
geo geometry not null );

insert
    into
    test(geo)
values ('MULTIPOLYGON (((0 0, 0 0, 0 7, 0 7, 0 0)), ((0 0, 0 7, 7 7, 7 0, 0 0)), ((0 0, 7 0, 7 0, 0 0, 0 0)), ((7 7, 7 7, 7 0, 7 0, 7 7)), ((0 7, 0 7, 7 7, 7 7, 0 7)), ((0 0, 7 0, 7 7, 0 7, 0 0)))'),
('POLYGON ((0 0, 5 0, 5 5, 0 5, 0 0))'),
('POLYGON ((2 2, 5 2, 5 5, 2 5, 2 2))');

select * from test;

id|geo                                                                                                                                                                                        |
--|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
 5|MULTIPOLYGON (((0 0, 0 0, 0 7, 0 7, 0 0)), ((0 0, 0 7, 7 7, 7 0, 0 0)), ((0 0, 7 0, 7 0, 0 0, 0 0)), ((7 7, 7 7, 7 0, 7 0, 7 7)), ((0 7, 0 7, 7 7, 7 7, 0 7)), ((0 0, 7 0, 7 7, 0 7, 0 0)))|
 6|POLYGON ((0 0, 5 0, 5 5, 0 5, 0 0))                                                                                                                                                        |
 7|POLYGON ((2 2, 5 2, 5 5, 2 5, 2 2))                                                                                                                                                        |

以下查询(Q)应该返回所有行

select
    *
from
    test t
where
    st_contains('MULTIPOLYGON (((0 0, 0 0, 0 7, 0 7, 0 0)), ((0 0, 0 7, 7 7, 7 0, 0 0)), ((0 0, 7 0, 7 0, 0 0, 0 0)), ((7 7, 7 7, 7 0, 7 0, 7 7)), ((0 7, 0 7, 7 7, 7 7, 0 7)), ((0 0, 7 0, 7 7, 0 7, 0 0)))',
    geo);

id|geo                                                                                                                                                                                        |
--|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
 5|MULTIPOLYGON (((0 0, 0 0, 0 7, 0 7, 0 0)), ((0 0, 0 7, 7 7, 7 0, 0 0)), ((0 0, 7 0, 7 0, 0 0, 0 0)), ((7 7, 7 7, 7 0, 7 0, 7 7)), ((0 7, 0 7, 7 7, 7 7, 0 7)), ((0 0, 7 0, 7 7, 0 7, 0 0)))|
 6|POLYGON ((0 0, 5 0, 5 5, 0 5, 0 0))                                                                                                                                                        |

因为以下约束返回true。

select
    st_contains('MULTIPOLYGON (((0 0, 0 0, 0 7, 0 7, 0 0)), ((0 0, 0 7, 7 7, 7 0, 0 0)), ((0 0, 7 0, 7 0, 0 0, 0 0)), ((7 7, 7 7, 7 0, 7 0, 7 7)), ((0 7, 0 7, 7 7, 7 7, 0 7)), ((0 0, 7 0, 7 7, 0 7, 0 0)))',
    'POLYGON ((2 2, 5 2, 5 5, 2 5, 2 2))');

上面的查询Q在这里怎么了?

geospatial postgis
1个回答
0
投票

输入的几何形状无效,因此根据doc的结果也无效:

© www.soinside.com 2019 - 2024. All rights reserved.