如何进行通用查询以从 Postgis 几何类型获取点

How to make a generic query to get a point from a Postgis geometry type

我的 PostgreSQL 数据库中的一个表中有一个几何字段,扩展名为 Postgis,该字段的值是以下可能性,POINT,LINESTRING 和 POLYGON。我想知道是否可以设置一个查询,以便无论点格式如何,我都可以检索包含在几何中的 POINT 以用于 WHERE 子句,这样我就可以检索一个元组,该元组的点与搜索到的元组接近.

DDL:

CREATE TABLE public.contribution (
    id serial4 NOT NULL,
    occurrence timestamp(6) NULL,
    risk_damage bool NOT NULL DEFAULT false,
    victims bool NOT NULL DEFAULT false,
    published varchar(1) NOT NULL DEFAULT 'P'::character varying,
    "desc" varchar(500) NULL,
    "local" geometry NOT NULL,
    id_category int4 NOT NULL,
    id_collaborator int4 NULL,
    id_manager int4 NULL,
    created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT contribution_pkey PRIMARY KEY (id)
);

“本地”列支持 POINT、POLYGON 和 LINESTRING,我想查询给定坐标的 X 和 Y 值 returns 具有相关坐标的元组,例如:

Select * from contribution where 10.0000 < local.x < 12000 and 20.0000 < local.y < 22.0000

在这种情况下,我需要知道“局部”几何的任何点是否在上述范围内,这就是我需要的。

不要在 X 和 Y 上使用范围,而是将其转换为多边形并检查此框是否与存储的几何图形相交:

Select * 
from contribution 
where st_intersects(local,
  ST_SetSRID(
   ST_MakeBox2D(
    ST_Point(10, 20),
    ST_Point(12 ,22)),4326);

如果您对 11;21 附近的距离 1 感兴趣,您可以使用 st_dwithin 代替:

Select * 
from contribution 
where st_dwithin(local,
  ST_SetSRID(
   ST_Point(12, 22),
  ,4326),
  1);