[postgis-users] Need help with a query to assign attributes to lines the intersect multiple polygons

Birgit Laggner birgit.laggner at vti.bund.de
Tue Apr 26 01:51:06 PDT 2011


Hi Steve,

I thought about your problem and I would solve it with distinct on  - 
like this:

update line set poly_att=sel.poly_att from (select distinct on 
(a.line_id) a.line_id, b.poly_att from line a inner join polygons b on 
a.the_geom && b.the_geom where st_intersects(a.the_geom,b.the_geom) 
order by a.line_id, st_length(st_intersection(a.the_geom, b.the_geom)) 
desc) sel where line.line_id=sel.line_id;

Hope that helps,

Birgit.


Am 25.04.2011 16:24, schrieb Stephen Woodbridge:
> Hi all,
>
> I have a table a line and a table of polygons.
> I would like to come up with a query that allow me to link the lines 
> to the polygon where most of the length of the line falls into that 
> polygon.
>
> The problem is that the lines may overlap or touch more than one 
> polygon. So I can do this in a stored procedure where I iterate 
> through the lines and intersect them with the overlapping polygons and 
> sort them based on the length of the intersection fragments and limit 
> 1 on the results.
>
> It just seems like this should be able to be done using join and 
> sub-query of some kind, but I can't quite figure it out. Ultimately, I 
> want to do an UPDATE line set attr1=b.someattr ...
>
> Thoughts,
>   -Steve
> _______________________________________________
> 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