当前位置: 首页 > 面试题库 >

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

巫马心水
2023-03-14
问题内容

我有下面的简单表:

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))'))

并遇到此错误:

列“ poly”是多边形类型,而表达式是“ geometry”类型

真是la子 所以我的第一个问题是:

  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类型。针对表数据的实际查询不起作用。

回答:

土井!问题是我创建的DB不是基于postgis模板DB(因此没有相关的功能和几何列表等)。最后,我想指出一下,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)

这是多边形的最小边界圆,表示为Postgrescircle类型。此处记录了所有几何运算符:http://www.postgresql.org/docs/8.3/interactive/functions-
geometry.html

基础多边形没有任何投影数据,SRID等,因此,如果它可与PostGIS一起使用它可能只是默认设置而已,很幸运。但是,当然,在很多情况下,您只需要在亚大骨空间范围内进行几何处理。



 类似资料:
  • 我有一个数据库,其中一个表(ca_licenses)是商业地址,另一个表是市议会区多边形的公共模式(ca_la_la_council)。 我运行此查询是为了将议会表中的地区号码放在企业地址表中: 我的问题是我总是得不到任何结果。两个几何列都是几何类型,SRID是4326。 示例ca_licenses数据:https://raw . githubusercontent . com/pour safe

  • 问题内容: 我对mysql,多边形的Geometric数据类型有一个典型的问题。 我有经度和纬度数组形式的面数据,例如: 我有一个经度和纬度坐标的点(顶点),例如: 现在,我想查找此顶点(点)是否在多边形内。我如何在php中做到这一点? 问题答案: 这是我从另一种语言转换为PHP的功能: 附加: 有关更多功能,我建议您使用此处提供的polygon.php类。使用顶点创建类,并以测试点作为输入调用该

  • 我有一个geopandas数据框,其中包含一个形状良好的点几何体列表。还有一列包含ID列表,用于指定每个点所属的唯一多边形。简化输入代码为: 我想按多边形ID分组,以便将几何体从点转换为多边形。该输出基本上如下所示: 我想这很简单,但我很难让它工作。我发现下面的代码允许我将其转换为开放式多段线,但无法计算出多边形。有人能建议如何适应这种情况吗? 简单地用多边形替换LineString会导致Type

  • 我正在寻找一种方法来创建一组多边形(rechtangles),沿着一条线在多个多边形中创建一组多边形(rechtangles),并将其水平隔开,如图所示。 我尝试生成点并将其用作多边形的中点,但问题是,通过创建等间距的点光栅,除了180度之外,不可能以任何其他方向旋转。 例子 给出了一个多多边形形状的对象和由宽度和高度以及每个多边形之间的垂直和水平间距定义的多边形。多边形应仅放置在多多边形内,且不

  • 问题内容: 前几天,我在Java中上了一堂课,以计算a 是否在多边形内。(和为,因为将是地理坐标)。 我知道Java具有该类,但是我必须使用and ,因为不允许使用,只能是整数:( 一旦在中完成多边形,就使用了方法(有了它),问题就解决了。 但是现在,我想导入到Android,问题就在这里,因为需要导入: 并且在Android中不存在awt,因此无法使用。 那么,是否有任何类似于had 方法的类?

  • 我有一个形状优美的多边形,代表洛杉矶市的边界。我在geopandas GeoDataFrame中还有一组约100万lat长的点,所有这些点都位于多边形的最小边界框内。其中一些点位于多边形本身内,但其他点不在多边形内。我只想保留洛杉矶边界内的那些点,由于洛杉矶的不规则形状,在其最小边界框内只有大约1/3的点在多边形本身内。 使用Python,如果点和多边形具有相同的最小边界框,识别这些点中哪些点位于