[postgis-users] area resulting from ST_Within
Paragon Corporation
lr at pcorp.us
Sun Sep 21 21:07:17 PDT 2008
Surya,
Sorry about that. I realize now I misspoke.
If your watersheds are 1 per record, then the answer should be as simple as
SELECT ws.name,dt.name ,
sum(ST_area(ST_intersection(ws.the_geom,dt.the_geom)))/st_area(ws.the_geom)
As pct
FROM watersheds as ws INNER JOIN districts as dt
ON ST_intersects(ws.the_geom,dt.the_geom)
GROUP BY ws.name , dt.name , ST_area(ws.the_geom)
ORDER BY dt.name
If they are multiple water shed records with same name and you need to add
them up, then answer is a bit more complicated and probably slower but more
generic solution would be
SELECT ws.name,dt.name ,
sum(ST_area(ST_intersection(ws.the_geom,dt.the_geom)))/wa.thearea As pct
FROM watersheds as ws INNER JOIN (SELECT ST_Sum(st_area(the_geom)) As
thearea, name FROM watersheds GROUP BY name) As wa ON wa.name = ws.name
INNER JOIN districts as dt ON ST_intersects(ws.the_geom,dt.the_geom)
GROUP BY ws.name , wa.name, dt.name , wa.thearea
ORDER BY dt.name
Hope that helps,
Regina
________________________________
From: postgis-users-bounces at postgis.refractions.net
[mailto:postgis-users-bounces at postgis.refractions.net] On Behalf Of surya
Sent: Sunday, September 21, 2008 11:35 PM
To: PostGIS Users Discussion
Subject: Re: [postgis-users] area resulting from ST_Within
Dear PC,
After summing up percentage of all districts in one watershed, it does not
add up to 100%. Moreover, after multiplication with 100, the total
percentage of all districts in one watershed is far below 100%.
In the first watershed, I have 9 different districts. The first district
calculated with the term:
sum(ST_area(ST_intersection(ws.the_geom,dt.the_geom))) gives 25 sq. km,
meanwhile the watershed area itself is 646 sq. km. Therefore, the percentage
of this district should be (25/646)* 100 = 3.9 %.
Using the proposed term tocalculate percentage:
(sum(ST_area(ST_intersection(ws.the_geom,dt.the_geom)))/sum(st_area(ws.the_g
eom)))*100 gives only 0.18 % instead. I do not know what is wrong.
best regards,
surya
----- Original Message -----
From: Paragon Corporation <mailto:lr at pcorp.us>
To: 'PostGIS Users Discussion'
<mailto:postgis-users at postgis.refractions.net>
Sent: Monday, September 22, 2008 4:44 AM
Subject: RE: [postgis-users] area resulting from ST_Within
Try
SELECT ws.name <http://ws.name/> ,dt.name <http://dt.name/> ,
sum(ST_area(ST_intersection(ws.the_geom,dt.the_geom)))/sum(st_area(ws.the_ge
om)) As pct
FROM watersheds as ws, districts as dt
WHERE ST_intersects(ws.the_geom,dt.the_geom)
GROUP BY ws.name <http://ws.name/> ,dt.name <http://dt.name/>
ORDER BY dt.name <http://dt.name/>
________________________________
From: postgis-users-bounces at postgis.refractions.net
[mailto:postgis-users-bounces at postgis.refractions.net] On Behalf Of surya
Sent: Sunday, September 21, 2008 12:42 PM
To: PostGIS Users Discussion
Subject: Re: [postgis-users] area resulting from ST_Within
Dear Fred,
Thank you very much. It works correctly !!. I try to further convert
the area of each district in a watershed as percentage to the watershed
area in question. Please give me more help.
best regards,
surya
----- Original Message -----
From: Fred Lehodey <mailto:lehodey at gmail.com>
To: PostGIS Users Discussion
<mailto:postgis-users at postgis.refractions.net>
Sent: Sunday, September 21, 2008 4:35 PM
Subject: Re: [postgis-users] area resulting from ST_Within
Hi Surya,
you can try something like that:
SELECT ws.name,dt.name,
sum(ST_area(ST_intersection(ws.the_geom,dt.the_geom)))
FROM watersheds as ws, districts as dt
WHERE ST_intersects(ws.the_geom,dt.the_geom)
GROUP BY ws.name,dt.name
ORDER BY dt.name
Fred.
On Sun, Sep 21, 2008 at 3:37 AM, surya
<storma-ipb at indo.net.id> wrote:
Dear List,
I have two tables, one table contains 5 polygons
depicting 5 watersheds or river basin boundaries. Another table contain
district bondaries. Using ST-contain function below, I have obtained
districts belong to a certain watershed . My qestion is how to calculate
area of each district contained in a certain watershed using sum(area)(),
taking into consideration that one district might be splitted in two or more
different watershed
SELECT watersheds.name <http://watersheds.name/> ,
districts.name <http://districts.name/>
FROM watersheds, districts
WHERE ST_contains (watersheds.the_geom,
districts.the_geom)
GROUP BY watersheds.name <http://watersheds.name/> ,
districts.name <http://districts.name/> ;
best regards,
surya
_______________________________________________
postgis-users mailing list
postgis-users at postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users
________________________________
_______________________________________________
postgis-users mailing list
postgis-users at postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users
________________________________
_______________________________________________
postgis-users mailing list
postgis-users at postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users
More information about the postgis-users
mailing list