[postgis-users] simple point-in-polygon problem
pere roca
peroc79 at gmail.com
Tue Dec 18 08:08:11 PST 2007
Kevin,Pedro
this is not what I'm looking for...
The problem is that....
> 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?
Maybe sounds stupid, but isn't the spatial constraint (point-contained in
polygon) a "link" itself? why can't I update row by row depending on the
number of points each polygon has? I think the solution has to be a function
or php programming...
Cheers,
Pere
Kevin Neufeld wrote:
>
> 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
>>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
--
View this message in context: http://www.nabble.com/simple-point-in-polygon-problem-tp14373929p14399846.html
Sent from the PostGIS - User mailing list archive at Nabble.com.
More information about the postgis-users
mailing list