[postgis-users] Difficult Problem with Polygons

Nicolas Ribot nicolas.ribot at gmail.com
Mon Oct 29 08:05:58 PDT 2012


Hi,

No. this is because some of your polygons are not valid:
for instance:
select st_isvalid('POLYGON  ((593921 5219610 803,593921 5219610
818,593921 5219620 818,593921 5219620 803,593921 5219610
803))'::geometry);
NOTICE:  Too few points in geometry component at or near point 593921
5219610 803
 st_isvalid
------------
 f
(1 row)

you can control this with st_isvalid, st_isvalidReason and correct
them with st_makeValid.

Use only valid objects before processing them with Postgis functions.

Nicolas

On 29 October 2012 16:03, Ed Linde <edolinde at gmail.com> wrote:
> Thanks Nicolas. Just about the error, is this because the line segments are
> too close
> and postgis 2.0 could not handle this? If so is there a workaround, even if
> it means
> slightly having to "perturb" each point's position to not run into this bug.
> I was really hoping that the intersection of two polygonal shapes in 3D
> would be fairly
> simple in postgis 2.0 :(
>
> Ed
>
>
> On Mon, Oct 29, 2012 at 4:00 PM, Nicolas Ribot <nicolas.ribot at gmail.com>
> wrote:
>>
>> If the points are computed in the right order, you can store them and
>> pass them to st_makeLine and st_makePolygon.
>> If not, you can form a segment between 2 closest points and connect it
>> to the closest points.
>>
>> On 29 October 2012 15:37, Ed Linde <edolinde at gmail.com> wrote:
>> > Hi All,
>> > Thanks for the tips! Just another thing, when I compute the "transition
>> > points" on each edge (shown as red points in my pdf).
>> > I need to join them to make a polygon. Wondering how I can connect them
>> > together so that I start with a point and end on it
>> > to form a closed polygon?
>> >
>> > Cheers,
>> > Ed
>> >
>> >
>> > On Mon, Oct 29, 2012 at 3:03 PM, Stephen Woodbridge
>> > <woodbri at swoodbridge.com> wrote:
>> >>
>> >> 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
>> >>>
>> >>
>> >> _______________________________________________
>> >> 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
>
>
>
> _______________________________________________
> 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