[postgis-users] Difficult Problem with Polygons

Ed Linde edolinde at gmail.com
Mon Oct 29 08:51:48 PDT 2012


Hi Nicolas,
It seems like sometimes the points are one and the same and I get
linestrings and not
actual polygons. I pass these points in from a perl script, so is there a
way I can just
give the raw x,y,z coordinates of these points and do a st_convexhull
function on them?
Could you please give me a small example?

I tried something like:
The two coordinates marked in red and marked in orange are the same.

bounds=# insert into vfaces values (1,
bounds(# ST_GeomFromText('POLYGON((593901 5219610 814,593901 5219610 814,593899
5219610 814,593899 5219610 814,593901 5219610 814))') );
INSERT 0 1
bounds=# select st_isvalid(geomtext) from vfaces;
NOTICE:  Too few points in geometry component at or near point 593901
5219610 814
 st_isvalid
------------
 f
(1 row)

Thanks,
Ed



On Mon, Oct 29, 2012 at 4:26 PM, Ed Linde <edolinde at gmail.com> wrote:

> Ok thanks, will look into that function. Because I wonder if the s/w I am
> using is
> actually outputting the vertices of each face in a cyclical fashion or
> just
> arbitrarily.
>
> Cheers,
> Ed
>
>
> On Mon, Oct 29, 2012 at 4:23 PM, Nicolas Ribot <nicolas.ribot at gmail.com>wrote:
>
>> Yes, it looks like some points were not put in the right order before
>> building a polygon, thus these "butterfly" polygons you generated.
>> If the formed polygon are expected to be convex, you could use
>> st_convexhull on the point cloud to generate the polygons.
>>
>> On 29 October 2012 16:09, Ed Linde <edolinde at gmail.com> wrote:
>> > Thanks Nicolas! Will look at the script that generated the polygon
>> text..
>> > must have goofed something up there.
>> >
>> >
>> > On Mon, Oct 29, 2012 at 4:05 PM, Nicolas Ribot <nicolas.ribot at gmail.com
>> >
>> > wrote:
>> >>
>> >> 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
>> >> >
>> >> _______________________________________________
>> >> 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
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20121029/e29a8f83/attachment.html>


More information about the postgis-users mailing list