我有一个Postgis数据库,在geom::geometry列中包含多边形。我有一个“点”型坐标列表。我想提取所有user_coordinates行,它们的坐标在特定的多边形中找到。
我在stackoverflow上搜索了好几天。我试过各种各样的查询(ST_Contains,ST_Within),大多数都告诉我一个函数存在,不存在。我认为它被我给出的点所抛弃,并且想知道点列应该采用什么格式或类型。
这里有一个查询,我试图给予你一个想法,我在...
select u.user_id
from electorial_boundries as e
INNER JOIN user_coordinates as u on
ST_Contains(e.geom,ST_GeomFromText('SRID=4326;POINT(u.user_coor)))
where e.org_id = 595
/按要求添加
期待什么:
列出user_coordinates中的所有行,其中user_coordinates.user_coor中的坐标显示在electorial_boundries.geom中的选定面中
下面是表的sql……(对不起,我不熟悉如何最好地使用fiddle)
CREATE TABLE public.user_coordinates
(
id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
user_id integer NOT NULL,
user_coor point NOT NULL,
CONSTRAINT user_coordinates_pkey PRIMARY KEY (id)
)
CREATE TABLE public.electorial_boundries
(
id integer NOT NULL DEFAULT nextval('electorial_boundries_id_seq'::regclass),
data_id bigint,
geom geometry(MultiPolygon,4326),
district_name character(120) COLLATE pg_catalog."default",
CONSTRAINT electorial_boundries_pkey PRIMARY KEY (id)
)
错误是我得到“函数(ST_Contains或ST_Within)不存在”。但似乎它只是与我试图给予的点相冲突,因为实际坐标代替u.user_coor会产生一些结果,尽管不限于多边形中的用户。
1条答案
按热度按时间yjghlzjz1#
列
user_coor
的类型为point
,这是一个本地postgres类型,不能直接用于PostGIS函数。错误消息可能会告诉您
function ST_Contains(geometry, point) does not exist
,这突出显示了错误的“点”类型,因为该函数仅适用于两个几何图形。如果可以的话,应该将列定义更改为
geometry(point,4326)
类型。但是,您可以将
point
强制转换为geometry