Database 在PostGIS中铸造地理类型

Database 在PostGIS中铸造地理类型,database,postgresql,postgis,Database,Postgresql,Postgis,我定义了下表,它使用PostGIS地理信息系统 CREATE TABLE test_geog ( id SERIAL PRIMARY KEY, boundary GEOGRAPHY(Polygon) ); 我将以下测试多边形添加到表中: INSERT INTO test_geog VALUES (ST_GeographyFromText('SRID=4326;POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))')); 我试图确定一个点是否位于该表中的任何多边

我定义了下表,它使用PostGIS地理信息系统

CREATE TABLE test_geog (
    id SERIAL PRIMARY KEY,
    boundary GEOGRAPHY(Polygon)
);
我将以下测试多边形添加到表中:

INSERT INTO test_geog VALUES (ST_GeographyFromText('SRID=4326;POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'));
我试图确定一个点是否位于该表中的任何多边形内。我有一个疑问:

SELECT ST_ContainsProperly(ST_GeographyFromText('Point(2 2)'), area)
FROM (SELECT boundary FROM test_geog) AS area;
这会产生以下错误:

ERROR:  function st_containsproperly(geography, record) does not exist
LINE 1: SELECT ST_ContainsProperly(ST_GeographyFromText('Point(2 2)'...
            ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
如何将此“记录”转换为多边形?我很困惑,因为该列似乎已经声明为只包含
POLYGON
类型,但出于某种原因,这不是我从数据库中提取的内容

我试图将记录强制转换为多边形,如下所示:

SELECT ST_ContainsProperly(ST_GeographyFromText('Point(2 2)'), CAST (boundary AS POLYGON))
FROM (SELECT boundary FROM source_imagery) AS nitf_area;
但这给了我一个错误:

ERROR:  cannot cast type record to polygon
LINE 1: ...tainsProperly(ST_GeographyFromText('Point(2 2)'), CAST (boun...

我在这里不明白什么?

我的问题在GIS论坛上得到了回答。我犯了一个愚蠢的错误,认为ST_Containes完全可以用于地理,而实际上它只支持几何。我也不需要我试图做的多余的子查询

这就是我的解决方案。我改为使用ST_封面,这是我想要的,并且支持地理。这样可以避免对几何体进行强制转换。以下是有效的代码:

SELECT ST_Covers(
    boundary, 
    ST_GeographyFromText('Point(2 2)')
) 
FROM source_imagery