[postgis-users] Difficult Problem with Polygons

Ed Linde edolinde at gmail.com
Mon Oct 29 07:56:51 PDT 2012


Hi All,
I was trying to do this intersection between two tables, I have inserted
the selects for the two tables and the error. Also the postgis full version
information.
Is there a way to get around this problem? Is this a bug? The polygons in
both tables contain 3D points. Could this be a problem?

Cheers,
Ed

select a.id, ST_AsText(st_intersection(a.geomtext, b.geomtext)) the_tris
from small_tris a, vfaces b
where st_intersects (a.geomtext, b.geomtext);

ERROR:  Error performing intersection: TopologyException: found non-noded
intersection between LINESTRING (593907 5.2196e+06, 593915 5.21961e+06) and
LINESTRING (593911 5.21961e+06, 593908 5.2196e+06) at 593908.59999999998
5219602 809.89999999999918

********** Error **********

ERROR: Error performing intersection: TopologyException: found non-noded
intersection between LINESTRING (593907 5.2196e+06, 593915 5.21961e+06) and
LINESTRING (593911 5.21961e+06, 593908 5.2196e+06) at 593908.59999999998
5219602 809.89999999999918
SQL state: XX000


 SELECT PostGIS_full_version();

postgis_full_version

--------------------------------------------------------------------------------------------------------------------------------------------
-----------
 POSTGIS="2.0.0alpha7SVN" GEOS="3.3.2-CAPI-1.7.2" PROJ="Rel. 4.7.1, 23
September 2009" GDAL="GDAL 1.9.0, released 2011/12/29" LIBXML="2.7.8"
 USE_STATS
(1 row)


bounds=# select gen_id, ST_AsText(geomtext) from vfaces;
 gen_id |
st_astext
--------+---------------------------------------------------------------------------------------------------------------------------------
      7 | POLYGON Z ((593908 5219600 803,593907 5219600 818,593915 5219610
818,593911 5219610 803,593908 5219600 803))
      7 | POLYGON Z ((593908 5219600 803,593899 5219600 803,593899 5219600
818,593907 5219600 818,593908 5219600 803))
      7 | POLYGON Z ((593908 5219600 803,593911 5219610 803,593903 5219620
803,593899 5219620 803,593899 5219600 803,593908 5219600 803))
      7 | POLYGON Z ((593899 5219620 803,593899 5219620 818,593899 5219600
818,593899 5219600 803,593899 5219620 803))
      7 | POLYGON Z ((593899 5219620 803,593903 5219620 803,593912 5219620
818,593899 5219620 818,593899 5219620 803))
      7 | POLYGON Z ((593912 5219620 818,593903 5219620 803,593911 5219610
803,593915 5219610 818,593912 5219620 818))
      7 | POLYGON Z ((593912 5219620 818,593915 5219610 818,593907 5219600
818,593899 5219600 818,593899 5219620 818,593912 5219620 818))
     16 | POLYGON Z ((593921 5219600 803,593921 5219610 803,593911 5219610
803,593908 5219600 803,593921 5219600 803))
     16 | POLYGON Z ((593921 5219600 803,593921 5219600 818,593921 5219610
818,593921 5219610 803,593921 5219600 803))
     16 | POLYGON Z ((593921 5219600 803,593908 5219600 803,593907 5219600
818,593921 5219600 818,593921 5219600 803))
     16 | POLYGON Z ((593911 5219610 803,593921 5219610 803,593921 5219610
818,593915 5219610 818,593911 5219610 803))
     16 | POLYGON Z ((593911 5219610 803,593915 5219610 818,593907 5219600
818,593908 5219600 803,593911 5219610 803))
     16 | POLYGON Z ((593907 5219600 818,593915 5219610 818,593921 5219610
818,593921 5219600 818,593907 5219600 818))
     18 | POLYGON Z ((593921 5219610 803,593911 5219610 803,593915 5219610
818,593921 5219610 818,593921 5219610 803))
     18 | POLYGON Z ((593921 5219610 803,593921 5219620 803,593903 5219620
803,593911 5219610 803,593921 5219610 803))
     18 | POLYGON Z ((593921 5219610 803,593921 5219610 818,593921 5219620
818,593921 5219620 803,593921 5219610 803))
     18 | POLYGON Z ((593912 5219620 818,593915 5219610 818,593911 5219610
803,593903 5219620 803,593912 5219620 818))
     18 | POLYGON Z ((593912 5219620 818,593921 5219620 818,593921 5219610
818,593915 5219610 818,593912 5219620 818))
     18 | POLYGON Z ((593912 5219620 818,593903 5219620 803,593921 5219620
803,593921 5219620 818,593912 5219620 818))
(19 rows)

bounds=# select id, st_astext(geomtext) from small_tris;
 id |
st_astext
----+-------------------------------------------------------------------------------------------
  0 | POLYGON Z ((593890 5219590 840,593900 5219590 827,593890 5219600
817,593890 5219590 840))
  1 | POLYGON Z ((593890 5219600 817,593900 5219590 827,593900 5219600
815,593890 5219600 817))
  2 | POLYGON Z ((593900 5219600 815,593910 5219590 824,593910 5219600
815,593900 5219600 815))
  3 | POLYGON Z ((593910 5219590 824,593900 5219600 815,593900 5219590
827,593910 5219590 824))
  4 | POLYGON Z ((593910 5219600 815,593910 5219590 824,593920 5219590
842,593910 5219600 815))
  5 | POLYGON Z ((593900 5219600 815,593910 5219600 815,593900 5219610
815,593900 5219600 815))
  6 | POLYGON Z ((593890 5219600 817,593900 5219600 815,593900 5219610
815,593890 5219600 817))
  7 | POLYGON Z ((593890 5219620 812,593890 5219610 825,593900 5219610
815,593890 5219620 812))
  8 | POLYGON Z ((593890 5219630 827,593890 5219620 812,593900 5219620
841,593890 5219630 827))
  9 | POLYGON Z ((593900 5219610 815,593900 5219620 841,593890 5219620
812,593900 5219610 815))
 10 | POLYGON Z ((593910 5219610 819,593900 5219620 841,593900 5219610
815,593910 5219610 819))
 11 | POLYGON Z ((593910 5219620 848,593900 5219630 838,593900 5219620
841,593910 5219620 848))
 12 | POLYGON Z ((593900 5219620 841,593900 5219630 838,593890 5219630
827,593900 5219620 841))
 13 | POLYGON Z ((593890 5219610 825,593890 5219600 817,593900 5219610
815,593890 5219610 825))
 14 | POLYGON Z ((593910 5219610 819,593900 5219610 815,593910 5219600
815,593910 5219610 819))
 15 | POLYGON Z ((593910 5219600 815,593920 5219600 817,593910 5219610
819,593910 5219600 815))
 16 | POLYGON Z ((593920 5219600 817,593910 5219600 815,593920 5219590
842,593920 5219600 817))
 17 | POLYGON Z ((593920 5219600 817,593920 5219590 842,593930 5219590
803,593920 5219600 817))
 18 | POLYGON Z ((593910 5219610 819,593920 5219600 817,593920 5219610
804,593910 5219610 819))
 19 | POLYGON Z ((593920 5219600 817,593930 5219600 845,593920 5219610
804,593920 5219600 817))
 20 | POLYGON Z ((593930 5219600 845,593920 5219600 817,593930 5219590
803,593930 5219600 845))
 21 | POLYGON Z ((593920 5219610 804,593930 5219600 845,593930 5219610
819,593920 5219610 804))
 22 | POLYGON Z ((593910 5219610 819,593920 5219610 804,593920 5219620
804,593910 5219610 819))
 23 | POLYGON Z ((593910 5219620 848,593920 5219620 804,593910 5219630
801,593910 5219620 848))
 24 | POLYGON Z ((593910 5219620 848,593910 5219610 819,593920 5219620
804,593910 5219620 848))
 25 | POLYGON Z ((593910 5219630 801,593920 5219620 804,593920 5219630
808,593910 5219630 801))
 26 | POLYGON Z ((593910 5219620 848,593910 5219630 801,593900 5219630
838,593910 5219620 848))
 27 | POLYGON Z ((593930 5219620 844,593920 5219630 808,593920 5219620
804,593930 5219620 844))
 28 | POLYGON Z ((593930 5219630 834,593920 5219630 808,593930 5219620
844,593930 5219630 834))
 29 | POLYGON Z ((593930 5219620 844,593920 5219620 804,593930 5219610
819,593930 5219620 844))
 30 | POLYGON Z ((593920 5219610 804,593930 5219610 819,593920 5219620
804,593920 5219610 804))
 31 | POLYGON Z ((593910 5219610 819,593910 5219620 848,593900 5219620
841,593910 5219610 819))
(32 rows)


On Mon, Oct 29, 2012 at 3:37 PM, 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 <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<postgis-users at postgis.refractions.net>
>>>     <mailto:postgis-users at postgis.**refractions.net<postgis-users at postgis.refractions.net>
>>> >
>>>
>>>      >> http://postgis.refractions.**net/mailman/listinfo/postgis-**
>>> users <http://postgis.refractions.net/mailman/listinfo/postgis-users>
>>>      >
>>>      >
>>>      >
>>>      > ______________________________**_________________
>>>      > postgis-users mailing list
>>>      > postgis-users at postgis.**refractions.net<postgis-users at postgis.refractions.net>
>>>     <mailto:postgis-users at postgis.**refractions.net<postgis-users at postgis.refractions.net>
>>> >
>>>
>>>      > http://postgis.refractions.**net/mailman/listinfo/postgis-**users<http://postgis.refractions.net/mailman/listinfo/postgis-users>
>>>      >
>>>     ______________________________**_________________
>>>     postgis-users mailing list
>>>     postgis-users at postgis.**refractions.net<postgis-users at postgis.refractions.net>
>>>     <mailto:postgis-users at postgis.**refractions.net<postgis-users at postgis.refractions.net>
>>> >
>>>
>>>     http://postgis.refractions.**net/mailman/listinfo/postgis-**users<http://postgis.refractions.net/mailman/listinfo/postgis-users>
>>>
>>>
>>>
>>>
>>> ______________________________**_________________
>>> postgis-users mailing list
>>> postgis-users at postgis.**refractions.net<postgis-users at postgis.refractions.net>
>>> http://postgis.refractions.**net/mailman/listinfo/postgis-**users<http://postgis.refractions.net/mailman/listinfo/postgis-users>
>>>
>>>
>> ______________________________**_________________
>> postgis-users mailing list
>> postgis-users at postgis.**refractions.net<postgis-users at postgis.refractions.net>
>> http://postgis.refractions.**net/mailman/listinfo/postgis-**users<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/c7faac82/attachment.html>


More information about the postgis-users mailing list