[postgis-users] simple point-in-polygon problem
Kevin Neufeld
kneufeld at refractions.net
Mon Dec 17 11:19:35 PST 2007
Is this what you are after? (Note, this is untested)
UPDATE polygon SET number_points = foo.count
FROM (
SELECT polygon.name, count(point.gid) AS count
FROM point, polygon
WHERE ST_Contains(polygon.the_geom, point.the_geom)
GROUP BY polygon.name
) AS foo
WHERE polygon.name = foo.name;
-- Kevin
pere roca wrote:
> hi!
> please, I need some help with a query to extract points from polygons and
> update the value (count points) in a field of the polygon table. This counts
> gives me the name of polygon and counts points-in-polygon. Nice.
>
> select polygon.name, count(points.gid) from points, polygon where
> points.the_geom && polygon.the_geom and Contains
> (polygon.the_geom,points.the_geom) group by polygon.name
>
> Now I need to update the number_of_points field of polygon table.
>
> update polygon set number_points=
>
> (
> select count(point.gid) from
> point, polygon
> where point.the_geom && polygon.the_geom and
> Contains (polygon.the_geom,point.the_geom)
> group by polygon.name
> )
>
> from point where point.the_geom && polygon.the_geom and
> Contains(polygon.the_geom, point.the_geom)
>
> It just fills the "number_points" field of the polygons that intersect with
> points, BUT the value assigned is the same for all (that's the total COUNT
> of all points, because all of these points are inside a polygon).
>
> I've checked many more sentences with no success.
> Of course if at the end of the sentence I add "where polygon.name="x", will
> update ALL the values with the number of points that are only inside this
> polygon.
> If I don't have a "link" between the two tables that says like: "where
> polygon.name=point.poly_id"...do I HAVE TO construct a pgsql function to
> loop over all the polygons?
>
> Is Contains the fastest way to work with these kind of problems?
> Thanks a lot,
> Pere
>
More information about the postgis-users
mailing list