I tried something like the following without removing the same points ad it seems to work:
SELECT st_astext(ST_ConvexHull(ST_GeomFromText('MULTIPOINT(593901 5219610 814,593901 5219610 814,593899 5219610 814,593899 5219610 814,593901 5219610 814)'))); "LINESTRING Z (593901 5219610 814,593899 5219610 814)" Ed On Mon, Oct 29, 2012 at 5:23 PM, Nicolas Ribot <nicolas.ri...@gmail.com>wrote: > You should filter out the consecutive points. If there are more than 2 > points, you can then call st_convexHull() on the point set: > > with points as ( > select 'POINT (0 0)'::geometry as geom > UNION > select 'POINT (1 0)'::geometry as geom > UNION > select 'POINT (1 1)'::geometry as geom > ) select st_convexHull(st_collect(geom)) > from points; > > If the points are aligned, convexHull will be a linestring, that you > can discard or further process according to your needs. > > Nicolas > > On 29 October 2012 16:51, Ed Linde <edoli...@gmail.com> wrote: > > 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 <edoli...@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.ri...@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 <edoli...@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.ri...@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 <edoli...@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.ri...@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 <edoli...@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 > >>> >> >> > <wood...@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.ri...@gmail.com > >>> >> >> >>> <mailto:nicolas.ri...@gmail.com>> wrote: > >>> >> >> >>> > >>> >> >> >>> Could you draw a figure ? > >>> >> >> >>> > >>> >> >> >>> Nicolas > >>> >> >> >>> > >>> >> >> >>> On 29 October 2012 11:03, Ed Linde <edoli...@gmail.com > >>> >> >> >>> <mailto:edoli...@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 > >>> >> >> >>> <mwto...@gmail.com > >>> >> >> >>> <mailto:mwto...@gmail.com>> wrote: > >>> >> >> >>> >> > >>> >> >> >>> >> On 29 October 2012 21:33, Ed Linde < > edoli...@gmail.com > >>> >> >> >>> <mailto:edoli...@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@postgis.refractions.net > >>> >> >> >>> <mailto:postgis-users@postgis.refractions.net> > >>> >> >> >>> > >>> >> >> >>> >> > >>> >> >> >>> > http://postgis.refractions.net/mailman/listinfo/postgis-users > >>> >> >> >>> > > >>> >> >> >>> > > >>> >> >> >>> > > >>> >> >> >>> > _______________________________________________ > >>> >> >> >>> > postgis-users mailing list > >>> >> >> >>> > postgis-users@postgis.refractions.net > >>> >> >> >>> <mailto:postgis-users@postgis.refractions.net> > >>> >> >> >>> > >>> >> >> >>> > > >>> >> >> >>> > http://postgis.refractions.net/mailman/listinfo/postgis-users > >>> >> >> >>> > > >>> >> >> >>> _______________________________________________ > >>> >> >> >>> postgis-users mailing list > >>> >> >> >>> postgis-users@postgis.refractions.net > >>> >> >> >>> <mailto:postgis-users@postgis.refractions.net> > >>> >> >> >>> > >>> >> >> >>> > >>> >> >> >>> > http://postgis.refractions.net/mailman/listinfo/postgis-users > >>> >> >> >>> > >>> >> >> >>> > >>> >> >> >>> > >>> >> >> >>> > >>> >> >> >>> _______________________________________________ > >>> >> >> >>> postgis-users mailing list > >>> >> >> >>> postgis-users@postgis.refractions.net > >>> >> >> >>> > http://postgis.refractions.net/mailman/listinfo/postgis-users > >>> >> >> >>> > >>> >> >> >> > >>> >> >> >> _______________________________________________ > >>> >> >> >> postgis-users mailing list > >>> >> >> >> postgis-users@postgis.refractions.net > >>> >> >> >> http://postgis.refractions.net/mailman/listinfo/postgis-users > >>> >> >> > > >>> >> >> > > >>> >> >> > > >>> >> >> > _______________________________________________ > >>> >> >> > postgis-users mailing list > >>> >> >> > postgis-users@postgis.refractions.net > >>> >> >> > http://postgis.refractions.net/mailman/listinfo/postgis-users > >>> >> >> > > >>> >> >> _______________________________________________ > >>> >> >> postgis-users mailing list > >>> >> >> postgis-users@postgis.refractions.net > >>> >> >> http://postgis.refractions.net/mailman/listinfo/postgis-users > >>> >> > > >>> >> > > >>> >> > > >>> >> > _______________________________________________ > >>> >> > postgis-users mailing list > >>> >> > postgis-users@postgis.refractions.net > >>> >> > http://postgis.refractions.net/mailman/listinfo/postgis-users > >>> >> > > >>> >> _______________________________________________ > >>> >> postgis-users mailing list > >>> >> postgis-users@postgis.refractions.net > >>> >> http://postgis.refractions.net/mailman/listinfo/postgis-users > >>> > > >>> > > >>> > > >>> > _______________________________________________ > >>> > postgis-users mailing list > >>> > postgis-users@postgis.refractions.net > >>> > http://postgis.refractions.net/mailman/listinfo/postgis-users > >>> > > >>> _______________________________________________ > >>> postgis-users mailing list > >>> postgis-users@postgis.refractions.net > >>> http://postgis.refractions.net/mailman/listinfo/postgis-users > >> > >> > > > > > > _______________________________________________ > > postgis-users mailing list > > postgis-users@postgis.refractions.net > > http://postgis.refractions.net/mailman/listinfo/postgis-users > > > _______________________________________________ > postgis-users mailing list > postgis-users@postgis.refractions.net > http://postgis.refractions.net/mailman/listinfo/postgis-users >
_______________________________________________ postgis-users mailing list postgis-users@postgis.refractions.net http://postgis.refractions.net/mailman/listinfo/postgis-users