51 votos

Seleccionar entidades que NO se cruzan en PostGIS

Usando PostGIS, solo quiero seleccionar puntos que caen fuera de los polígonos. En última instancia, esto es lo contrario de ST_Intersects, por lo que puedo ver.

Ejemplo: tengo una capa de taxlot y una capa de punto de dirección. Supongo que debería usar ST_Intersects , pero ¿cómo le digo que haga la selección inversa? Pensé que tal vez agregar una declaración NOT delante del código a continuación, pero eso no funcionó.

 CREATE table t_intersect AS
SELECT 
  hp.gid, 
  hp.st_address, 
  hp.city, 
  hp.st_num,
  hp.the_geom
FROM 
  public.parcel as par,
  public.housepoints as hp
WHERE 
  ST_Intersects(hp.the_geom,par.the_geom);

15voto

Paul Puntos 555

Quizás estés buscando ST_Disjoint

ST_Disjoint: devuelve VERDADERO si las geometrías no "espacialmente se cruzan "- si no comparten ningún espacio juntos.

12voto

tobes Puntos 19

En caso de que no haya una función especializada:

 CREATE table t_intersect AS
SELECT 
  hp.gid, 
  hp.st_address, 
  hp.city, 
  hp.st_num,
  hp.the_geom
FROM
  public.housepoints as hp
WHERE
  hp.gid NOT IN 
  (
    SELECT 
      h.gid
    FROM 
      public.parcel as p,
      public.housepoints as h
    WHERE 
      ST_Intersects(h.the_geom,p.the_geom)
  ) AS foo

8voto

Oyster 1525 Puntos 1

Aquí usamos NOT EXISTS y CREATE TABLE AS SELECT (CTAS)

 CREATE table t_intersect
AS
  SELECT 
    hp.gid,
    hp.st_address,
    hp.city, hp.st_num,
    hp.the_geom
  FROM public.housepoints AS hp
  WHERE NOT EXISTS (
    SELECT 1
    FROM public.parcel AS par 
    WHERE ST_Intersects(hp.the_geom,par.the_geom)
  );

4voto

Adam Ernst Puntos 6939

¿Qué tal ST_Disjoint? - Devuelve VERDADERO si las geometrías no se "intersecan espacialmente", si no comparten ningún espacio.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X