[postgis-users] Difficult Problem with Polygons

Stephen Woodbridge woodbri at swoodbridge.com
Mon Oct 29 07:03:02 PDT 2012


Hi Ed,

Well if clarifies one thing at least, you can ignore Mike's st_Relate 
because 5 is not adjacent to a linear edge, it is only adjacent to a 
vertex, so st_touches should work fine.

so you are looking for:

1. a specific triangle by id
2. that intersects triangle VC
3. and the triangles adjacent to triangle by id
4. and those that are contained in VC
5. sorted by distance to P1 limit 1

so something like:

select id, the_geom
   from (select id, the_geom as adjacent
           from triangles
          where st_touches(the_geom,
                           (select the_geom
                              from triangles a,
                                   (select the_geom as vc
                                      from vc_table
                                     where id='p1') b
                             where a.id=4)) c
  order by st_distance(c.the_geom, (select the_geom
                                      from points
                                     where id='p1')) asc limit 1;

Untested, but should give you a model to work with.

-Steve W


On 10/29/2012 6:57 AM, Ed Linde wrote:
> Attached is a figure. Where the dotted line is the boundary of the
> voronoi cell whose
> generator is point P1. So triangle "4" intersects with the voronoi
> boundary, but we are
> interested in the adjacent triangles of triangle 4, which are closer to
> point P1.
> For example, triangle 5.
>
> Hope this helps.
> Cheers,
> Ed
>
> On Mon, Oct 29, 2012 at 11:50 AM, Nicolas Ribot <nicolas.ribot at gmail.com
> <mailto:nicolas.ribot at gmail.com>> wrote:
>
>     Could you draw a figure ?
>
>     Nicolas
>
>     On 29 October 2012 11:03, Ed Linde <edolinde at gmail.com
>     <mailto:edolinde at gmail.com>> wrote:
>      > Hi All,
>      > Thanks for the suggestions.
>      > For 1) I will look into how ST_touches works and see if it can
>     pick up all
>      > the adjacent polygons to
>      > the one I have. And also look into Mike's suggestion on
>     ST_relate...though I
>      > must admit it looks
>      > more complex.
>      > For 2) I will try to clarify it a bit more... its harder to do
>     without a
>      > figure :) but here goes.
>      >
>      > Lets say we have a point Q which is the generator of a voronoi
>     cell. Now I
>      > compute the
>      > intersection between the voronoi cell boundaries and my
>     triangulation (Set
>      > of polygons)
>      > using ST_intersect. Once I have these triangles.. I say pick one
>     triangle T
>      > that is
>      > intersecting the voronoi cell boundary of Q.
>      > For all the triangles adjacent to T, I need to know which
>     triangles are
>      > INSIDE the voronoi
>      > boundary (closer to Q) and which adjacent triangles are just
>     OUTSIDE the
>      > voronoi
>      > boundary (farther from Q). I am basically testing for a certain
>     property by
>      > "shrinking" the
>      > voronoi cell (closer to Q) and another property when "expanding"
>     the voronoi
>      > cell (away from Q).
>      > Just need to make this division of triangles. Haven't thought of
>     a nice way
>      > to do this in postgis 2.0
>      > So any suggestions would greatly help.
>      >
>      > Thanks,
>      > Ed
>      >
>      > On Mon, Oct 29, 2012 at 10:15 AM, Mike Toews <mwtoews at gmail.com
>     <mailto:mwtoews at gmail.com>> wrote:
>      >>
>      >> On 29 October 2012 21:33, Ed Linde <edolinde at gmail.com
>     <mailto:edolinde at gmail.com>> wrote:
>      >> > Hi All,
>      >> > I need help with 2 hard problems. I store triangles in a table as
>      >> > POLYGON.
>      >> >
>      >> > 1. I want to know for a given triangle, which triangles share
>     an edge
>      >> > (adjacent) with this triangle.
>      >>
>      >> Sounds like you have a finite element mesh with nodes and elements.
>      >> You can use ST_Relate with pattern 'FF2F11212' to pick out elements
>      >> that share the same edge. This DE-9-IM is sort-of a custom
>     ST_Touches,
>      >> but only takes linear boundary overlaps. So if you have a table
>      >> "elements", and you want to find ones that touch ID 567:
>      >>
>      >> SELECT elements.*
>      >> FROM elements, elements as e
>      >> WHERE e.id <http://e.id> = 567 AND
>      >>     ST_Relate(elements.geom, e.geom, 'FF2F11212');
>      >>
>      >> I'm not certain about your second question.
>      >>
>      >> -Mike
>      >> _______________________________________________
>      >> postgis-users mailing list
>      >> postgis-users at postgis.refractions.net
>     <mailto:postgis-users at postgis.refractions.net>
>      >> http://postgis.refractions.net/mailman/listinfo/postgis-users
>      >
>      >
>      >
>      > _______________________________________________
>      > postgis-users mailing list
>      > postgis-users at postgis.refractions.net
>     <mailto:postgis-users at postgis.refractions.net>
>      > http://postgis.refractions.net/mailman/listinfo/postgis-users
>      >
>     _______________________________________________
>     postgis-users mailing list
>     postgis-users at postgis.refractions.net
>     <mailto: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