Ich habe 150 Millionen Punkte in einer Punktetabelle und möchte die wenigen Punkte finden, die außerhalb einer bestimmten Polygongeometrie liegen. Ich weiß, dass 99,9% der Punkte innerhalb der Polygongeometrie liegen. Ich bin daran interessiert, die wenigen Punkte zu finden, die außerhalb des Polygons liegen.
Meine derzeit beste Abfrage mit indizierten PostGIS-Tabellen dauert etwa 30 Minuten. Gibt es eine Möglichkeit, die folgende Abfrage zu optimieren, wenn Sie wissen, dass sich die meisten Punkte innerhalb des Polygons (Rahmens) befinden?
SELECT COUNT(*)
FROM italy_points pt
JOIN borders poly
ON ST_WITHIN (pt.the_geom, poly.geom)
WHERE poly.iso3 = 'ITA';
Das Polygon ist im Grunde die Admin 0-Grenze Italiens. Eckpunkte - 405.000. Teile - 510. Der Umschlag ist viel größer als das Polygon (das Polygon bedeckt 24% des Umschlags)
GROUP BYden Primärschlüssel der Punkte. (Mit PostgreSQL können Sie bequem auf alle Spalten in der SELECTKlausel verweisen , die aus einer Tabelle stammen, in der der Primärschlüssel in der GROUP BYKlausel enthalten ist.)
ST_Intersects, da ST_Withinsie nicht zuverlässig mit internen Randbedingungen übereinstimmt.