gpt4 book ai didi

使用 PostgreSQL 对多边形中的点进行 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 11:15:38 25 4
gpt4 key购买 nike

我有以下简单表格:

CREATE TABLE tbl_test
(
id serial NOT NULL,
poly polygon NOT NULL
)
WITH (OIDS=FALSE);

然后我尝试插入一行多边形:

insert into tbl_test values(1, PolyFromText('POLYGON((0 0, 10 10, 10 0, 0 0))'))

遇到这个错误:

column "poly" is of type polygon but expression is of type geometry

这是蹩脚的。所以我的第一个问题是:

  1. 我真的必须投吗?

无论如何,转换后它会起作用。现在我正在尝试执行一个简单的 ST_Contains 查询:

select id, poly from tbl_test where ST_Contains(poly, Point(GeomFromText('POINT(9 2)')))

这给出了错误:

ERROR:  function st_contains(polygon, point) does not exist
LINE 1: select id, poly from tbl_test where ST_Contains(poly, Point(...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.

我该怎么办?

以下作品:

select st_contains(st_geomfromtext('POLYGON((0 0, 10 10, 10 0, 0 0))'), st_geomfromtext('POINT(0 0)'))

但这可能是因为两个参数都是 Geometry 类型。针对表数据的实际查询不起作用。

答案:

来吧!问题是我创建的数据库不是基于postgis模板数据库(因此没有相关功能和几何列表等)。最后,我想说的是,PostGIS 要求您向数据库添加数百个函数、行和几个表以便获得 GIS 支持的方式是完全蹩脚的。它使模式的备份变得更加复杂并且非常容易出错(如果您忽略调用 AddGeometryColumn 而只是自己添加一个几何列,那将是天方夜谭)。

最佳答案

多边形是 PostGIS 构建于其上的基本 Postgres 类型。您可以使用 PostGIS 函数 select AddGeometryColumn(...) 启用几何列。否则,您将使用直多边形:

=> create table gt (id int, space polygon);
=> insert into gt values (1, '((2,2),(3,4),(3,6),(1,1))');
INSERT 0 1
=> select point(space) from gt where id = 1;
point
-------------
(2.25,3.25)
(1 row)

这是多边形的中心点

=> select circle(space) from gt where id = 1;
circle
--------------------------------
<(2.25,3.25),1.93994028704315>
(1 row)

这是多边形的最小边界圆,表示为 Postgres circle 类型。所有几何运算符都记录在案here: http://www.postgresql.org/docs/8.3/interactive/functions-geometry.html基础多边形没有任何投影数据、SRID 等,因此如果它与 PostGIS 一起工作,它可能只是默认为预设并且很幸运。但当然,在很多情况下,您只需要次地理空间尺度上的几何图形。

关于使用 PostgreSQL 对多边形中的点进行 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1012504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com