J'ai 150 millions de points dans une table de points et je voudrais trouver les quelques points situés en dehors d'une géométrie polygonale donnée. Je sais que 99,9% des points sont dans la géométrie du polygone. Je suis intéressé à trouver les quelques points qui se trouvent en dehors du polygone.
Ma meilleure requête actuelle utilisant des tables PostGIS indexées prend environ 30 minutes. Existe-t-il un moyen d'optimiser la requête suivante en sachant que la plupart des points se trouvent dans le polygone (bordure)?
SELECT COUNT(*)
FROM italy_points pt
JOIN borders poly
ON ST_WITHIN (pt.the_geom, poly.geom)
WHERE poly.iso3 = 'ITA';
Le polygone est essentiellement la frontière administrative de l'Italie. Sommets - 405 000. Pièces - 510. L'enveloppe est beaucoup plus grande que le polygone (le polygone couvre 24% de l'enveloppe)
GROUP BY
la clé primaire des points. (PostgreSQL vous permet de référencer commodément toutes les colonnes de la SELECT
clause qui proviennent d'une table où la clé primaire est incluse dans la GROUP BY
clause.)
ST_Intersects
, car ST_Within
elle ne correspondrait pas de manière fiable aux conditions aux limites internes.