如何进行通用查询以从 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);
我的 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);