st_within作为插入的条件

时间:2013-10-21 09:50:08

标签: sql postgresql postgis

我已经建立了自己的跟踪器,作为规范的一部分,我出于安全原因给出了自己,我不希望人们知道我的车在哪里过夜。

所以我有一个排除区域的概念,我的网页地图只显示除了禁区之外的数据,但我也只想在不在禁区内传输时保存数据(可能有不止一个,所以我可以思考子查询

任何人都可以帮忙吗?

有可能,如果不是可取的,这是一个存储过程,任何想法(当涉及子查询因此要求时我没用)

因此我用来获取数据的SQL(回顾性排除区域)

SELECT geom 
FROM public.data 
WHERE layer = %layer_id% and not exists(
     SELECT * 
     FROM public.exclusion_zone 
     WHERE layer = %layer_id% and ST_CONTAINS(the_geom, geom))

1 个答案:

答案 0 :(得分:1)

例如,此代码返回来自public.data的所有几何(例如,点),这些几何不完全来自public.exclusion_zone的几何内部(例如,多边形):

SELECT *
FROM public.data 
WHERE the_geom NOT IN (
    SELECT d.the_geom 
    FROM public.data d, public.exclusion_zone e
    WHERE ST_Within (d.the_geom, e.the_geom)
);

甚至更好(假设使用整数ID的操作比比较几何更快):

SELECT * FROM public.data
WHERE id NOT IN (
    SELECT d.id 
    FROM public.data d, public.exclusion_zone e
    WHERE ST_Within (d.the_geom, e.the_geom)
);

查看更多:ST_Within