Cela me semble être une question si simple (et c'est probablement le cas), mais je n'arrive pas à trouver un exemple qui me donne la réponse. À l’aide de PostGIS, je souhaite simplement sélectionner des points situés hors des polygones. En fin de compte, c'est l'inverse de ST_Intersects, autant que je puisse le voir.
Exemple: j'ai une couche taxlot et une couche de points d'adresses. Je suppose que je devrais utiliser ST_Intersects, mais comment puis-je lui demander de faire la sélection inverse? Je pensais peut-être ajouter une instruction NOT devant le code ci-dessous, mais cela n'a pas fonctionné.
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);
postgis
geoprocessing
sql
intersection
RyanDalton
la source
la source
Réponses:
La raison pour laquelle cela ne fonctionne pas avec "pas d'intersection" est que vous ne comparez les géométries que par paires; il y aura le même problème avec disjoint. Chaque point de séparation divisera certaines parcelles même s'il en coupe une.
La suggestion de Underdark n'a pas ce problème. Il existe également une autre astuce qui permettra probablement une utilisation plus efficace des index:
L'idée est de les joindre avec st_intersects et d'obtenir les lignes où l'ID de parcelle n'est pas présent.
Les index nécessaires ici sont un index spatial et un index sur gid dans les parcelles (en supposant que l'id de la table parcels est également appelé gid).
la source
Vous cherchez peut-être ST_Disjoint
la source
S'il n'y a pas de fonction spécialisée:
la source
Ici nous utilisons
NOT EXISTS
etCREATE TABLE AS SELECT
(CTAS)la source
Que diriez-vous de ST_Disjoint? - Retourne VRAI si les géométries ne "se croisent pas spatialement" - si elles ne partagent aucun espace.
la source
Dans certains cas, il est très utile d’utiliser LATERAL JOIN, cela peut être très rapide.
la source
Il suffit de ne pas utiliser NOT avant ST_Intersects:
Cela donne toutes les adresses qui ne sont pas dans le voisinage n ° 62:
Notez l'ordre des colonnes geom - les polygones en premier, les points en second, qui sont inversés par rapport à l'usage habituel de ST_Intersects.
Rapide et simple! Je me demandais comment faire cela correctement depuis un moment!
la source
Ce n'est peut-être pas la solution la plus rapide ... Mais d'habitude, je ne fais que tricher en joignant toutes les fonctionnalités de l'autre table.
Sympa et accrocheur si la table not_in_here n'est pas si complexe.
la source