1

如何使用 postgis 在 postgress 中进行查询以了解正方形是否与圆形相交或不 postgress

在此处输入图像描述

4

1 回答 1

1

您正在寻找的功能是ST_Intersects. 这个函数不受任何几何形状的限制,所以它是矩形、圆形还是六边形都无关紧要。重要的是它们覆盖的区域。看这个例子:

数据样本

 -- bbox
SRID=4326;POLYGON((-4.43 54.31,-4.39 54.31,-4.39 54.29,-4.43 54.29,-4.43 54.31))
 -- buffer
SRID=4326;POLYGON((-4.4245 54.2887,-4.424692147195968 54.286749096779836,-4.425261204674887 54.284873165676345,-4.426185303876974 54.2831442976698,-4.427428932188135 54.281628932188134,-4.428944297669804 54.280385303876976,-4.430673165676349 54.27946120467489,-4.432549096779838 54.27889214719597,-4.4345 54.2787,-4.436450903220162 54.27889214719597,-4.438326834323651 54.27946120467489,-4.440055702330196 54.280385303876976,-4.441571067811865 54.281628932188134,-4.442814696123025 54.2831442976698,-4.443738795325113 54.284873165676345,-4.444307852804032 54.286749096779836,-4.4445 54.2887,-4.444307852804032 54.29065090322016,-4.443738795325113 54.29252683432365,-4.442814696123025 54.2942557023302,-4.441571067811865 54.29577106781186,-4.440055702330196 54.29701469612302,-4.438326834323651 54.29793879532511,-4.436450903220162 54.29850785280403,-4.4345 54.2987,-4.432549096779838 54.29850785280403,-4.430673165676349 54.29793879532511,-4.428944297669804 54.29701469612302,-4.427428932188135 54.29577106781186,-4.426185303876974 54.2942557023302,-4.425261204674887 54.29252683432365,-4.424692147195968 54.29065090322016,-4.4245 54.2887))

在此处输入图像描述

以下 CTE 将检查给定几何图形是否相交 ( ST_Intersects) 并将返回具有重叠区域 ( ST_Intersection) 的几何图形:

WITH bbox (geom) AS (
  VALUES ('SRID=4326;POLYGON((-4.43 54.31,-4.39 54.31,-4.39 54.29,-4.43 54.29,-4.43 54.31))'::GEOMETRY)
), buffer (geom) AS (
  VALUES ('SRID=4326;POLYGON((-4.4245 54.2887,-4.424692147195968 54.286749096779836,-4.425261204674887 54.284873165676345,-4.426185303876974 54.2831442976698,-4.427428932188135 54.281628932188134,-4.428944297669804 54.280385303876976,-4.430673165676349 54.27946120467489,-4.432549096779838 54.27889214719597,-4.4345 54.2787,-4.436450903220162 54.27889214719597,-4.438326834323651 54.27946120467489,-4.440055702330196 54.280385303876976,-4.441571067811865 54.281628932188134,-4.442814696123025 54.2831442976698,-4.443738795325113 54.284873165676345,-4.444307852804032 54.286749096779836,-4.4445 54.2887,-4.444307852804032 54.29065090322016,-4.443738795325113 54.29252683432365,-4.442814696123025 54.2942557023302,-4.441571067811865 54.29577106781186,-4.440055702330196 54.29701469612302,-4.438326834323651 54.29793879532511,-4.436450903220162 54.29850785280403,-4.4345 54.2987,-4.432549096779838 54.29850785280403,-4.430673165676349 54.29793879532511,-4.428944297669804 54.29701469612302,-4.427428932188135 54.29577106781186,-4.426185303876974 54.2942557023302,-4.425261204674887 54.29252683432365,-4.424692147195968 54.29065090322016,-4.4245 54.2887))'::GEOMETRY)
)
SELECT ST_Intersection(bbox.geom,buffer.geom) FROM bbox,buffer
WHERE ST_Intersects(bbox.geom,buffer.geom);

                                                                                                                                                          st_intersection                                                                                                                                                           
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 0103000020E610000001000000090000006EDC4EB1D1B211C085EB51B81E254B40B81E85EB51B811C085EB51B81E254B40B81E85EB51B811C0CA336B1117264B40A330892C3DB711C0CF23DB9304264B40EF7214EEAFB511C06FAD8BD3DB254B40ECBF98EB69B411C0B915BD2BAA254B40455859AC77B311C0AE4FF18471254B407E4C8C7FE2B211C015F17D0C34254B406EDC4EB1D1B211C085EB51B81E254B40
(1 Zeile)

在此处输入图像描述

于 2021-03-01T16:13:14.803 回答