[postgis-users] Optimise this query, point in polygon on quite a large scale

Mark Cave-Ayland mark.cave-ayland at siriusit.co.uk
Tue Jun 28 09:06:10 PDT 2011


On 26/06/11 22:02, Louis Holford wrote:

> So...I have a large list of points (~30,000). I need to count the number
> of points that overlap a polygon (or multiple polyongs e.g. 100's). Each
> polygon represents part of a grid that overlaps the envelope of the list
> of points, so I need to know the count of points per grid cell.
>
> Currently I can generate each grid cell "in memory" and feed them to a
> query using ST_GeomFromText. Now, I know this takes a long time to
> complete and is not optimal.
>
> I would like any opinions as to what the best solution to implementing
> the query would be. I am thinking along the lines of generating the full
> grid as a table with either each cell stored separately or the whole
> grid as a single multipolygon and then performing the ST_Intersects part
> of the query.
>
> And also I know I should generate an index to help the query
> planning/search.

Hi Louis,

Yes - this is a good starting point. In-memory grids cannot use the 
index and so you'll need to materialise the resulting grid somehow 
whether that's just in a temporary table or somewhere more permanent, 
and then build an index on it in order to get worthwhile performance.

It's likely you'll be looking at a combination of a cross join based 
upon the && operator, ST_Intersects() and a GROUP BY over a SUM() 
aggregate in order to generate the totals for each grid square.


HTH,

Mark.

-- 
Mark Cave-Ayland - Senior Technical Architect
PostgreSQL - PostGIS
Sirius Corporation plc - control through freedom
http://www.siriusit.co.uk
t: +44 870 608 0063

Sirius Labs: http://www.siriusit.co.uk/labs



More information about the postgis-users mailing list