# [postgis-users] Problem with 3D polygon intersection test

Ed Linde edolinde at gmail.com
Tue Oct 30 01:44:21 PDT 2012

```Hi All,
Is there a simpler test I can do? I am quite sure that I am probably not
using the right
function in my SQL, or not doing the intersection test correctly. Is there
any simpler
way to test this 3D intersection? Am waiting on the postgis gurus to come
along and
give me some ideas, coz I am at my wits ends on this one! :) The polygons
look good
to me when I visualize them, but don't get how all triangles are found as
intersecting?
Anyway will wait.

Cheers,
Ed

On Tue, Oct 30, 2012 at 9:00 AM, Ed Linde <edolinde at gmail.com> wrote:

> Hi All,
> I am having some troubles getting the *ST_Intersect* function to work
> with 3D polygons.
> I have a table to hold triangles as polygons in *"small_tris"*
> Another table for holding the polygonal faces of a 3D voronoi diagram in *
> "vfaces"*
> So now I am trying to do an intersection between the triangles and the
> voronoi faces
> to get the triangles that intersect with the faces. And it seems that
> *ALL* triangles
> are intersecting. I have attached a PDF where I have plotted the triangles
> and the
> voronoi cells. so the box around in red and blue with a major face going
> through is
> the voronoi diagram. The Voronoi partition in 3D is shown at the bottom
> too for clarity
> Is the select assuming something? So the polygons are flat and the
> intersections
> should just be lines or points. I am under some pressure to get this to
> work, so if
>
> Cheers,
> Ed
>
> *-- TABLE SCHEMAS*
> bounds=# \d vfaces;
>       Table "public.vfaces"
>   Column  |   Type   | Modifiers
> ----------+----------+-----------
>  gen_id   | integer  |
>  geomtext | geometry |
>
> bounds=# \d small_tris;
>     Table "public.small_tris"
>   Column  |   Type   | Modifiers
> ----------+----------+-----------
>  id       | integer  | not null
>  v0       | integer  |
>  v1       | integer  |
>  v2       | integer  |
>  geomtext | geometry |
> Indexes:
>     "small_tris_pkey" PRIMARY KEY, btree (id)
>     "small_idx" gist (geomtext)
>
>
> *
> -- TABLE CONTENT*
> bounds=# select id, st_astext( geomtext ) from small_tris;
>  id |                       st_astext
> ----+-------------------------------------------------------
>   0 | POLYGON Z ((10 10 805,20 10 809,10 20 814,10 10 805))
>   1 | POLYGON Z ((10 20 814,20 10 809,20 20 819,10 20 814))
>   2 | POLYGON Z ((20 20 819,30 10 809,30 20 812,20 20 819))
>   3 | POLYGON Z ((30 10 809,20 20 819,20 10 809,30 10 809))
>   4 | POLYGON Z ((30 20 812,30 10 809,40 10 826,30 20 812))
>   5 | POLYGON Z ((20 20 819,30 20 812,20 30 827,20 20 819))
>   6 | POLYGON Z ((10 20 814,20 20 819,20 30 827,10 20 814))
>   7 | POLYGON Z ((10 40 805,10 30 814,20 30 827,10 40 805))
>   8 | POLYGON Z ((10 50 804,10 40 805,20 40 807,10 50 804))
>   9 | POLYGON Z ((20 30 827,20 40 807,10 40 805,20 30 827))
>  10 | POLYGON Z ((30 30 817,20 40 807,20 30 827,30 30 817))
>  11 | POLYGON Z ((30 40 816,20 50 809,20 40 807,30 40 816))
>  12 | POLYGON Z ((20 40 807,20 50 809,10 50 804,20 40 807))
>  13 | POLYGON Z ((10 30 814,10 20 814,20 30 827,10 30 814))
>  14 | POLYGON Z ((30 30 817,20 30 827,30 20 812,30 30 817))
>  15 | POLYGON Z ((30 20 812,40 20 823,30 30 817,30 20 812))
>  16 | POLYGON Z ((40 20 823,30 20 812,40 10 826,40 20 823))
>  17 | POLYGON Z ((40 20 823,40 10 826,50 10 803,40 20 823))
>  18 | POLYGON Z ((30 30 817,40 20 823,40 30 814,30 30 817))
>  19 | POLYGON Z ((40 20 823,50 20 808,40 30 814,40 20 823))
>  20 | POLYGON Z ((50 20 808,40 20 823,50 10 803,50 20 808))
>  21 | POLYGON Z ((40 30 814,50 20 808,50 30 816,40 30 814))
>  22 | POLYGON Z ((30 30 817,40 30 814,40 40 800,30 30 817))
>  23 | POLYGON Z ((30 40 816,40 40 800,30 50 813,30 40 816))
>  24 | POLYGON Z ((30 40 816,30 30 817,40 40 800,30 40 816))
>  25 | POLYGON Z ((30 50 813,40 40 800,40 50 817,30 50 813))
>  26 | POLYGON Z ((30 40 816,30 50 813,20 50 809,30 40 816))
>  27 | POLYGON Z ((50 40 821,40 50 817,40 40 800,50 40 821))
>  28 | POLYGON Z ((50 50 809,40 50 817,50 40 821,50 50 809))
>  29 | POLYGON Z ((50 40 821,40 40 800,50 30 816,50 40 821))
>  30 | POLYGON Z ((40 30 814,50 30 816,40 40 800,40 30 814))
>  31 | POLYGON Z ((30 30 817,30 40 816,20 40 807,30 30 817))
> (32 rows)
>
>  select st_astext(geomtext) from vfaces;
>
> st_astext
>
> -----------------------------------------------------------------------------------------------
>  POLYGON Z ((51 17.8 799,9 38.8 799,9 51 819.33333333333,19.4 51 828,51
> 35.2 828,51 17.8 799))
>  POLYGON Z ((51 17.8 799,9 38.8 799,9 51 799,51 51 799,51 17.8 799))
>  POLYGON Z ((51 35.2 828,19.4 51 828,51 51 828,51 35.2 828))
>  POLYGON Z ((9 9 799,9 38.8 799,51 17.8 799,51 9 799,9 9 799))
>  POLYGON Z ((51 17.8 799,9 38.8 799,9 51 819.33333333333,19.4 51 828,51
> 35.2 828,51 17.8 799))
>  POLYGON Z ((9 9 828,9 51 828,19.4 51 828,51 35.2 828,51 9 828,9 9 828))
> (6 rows)
>
> *select distinct a.id
> from small_tris a, vfaces b
> where st_intersects (a.geomtext, b.geomtext)
> order by a.id;*
>  id
> ----
>   0
>   1
>   2
>   3
>   4
>   5
>   6
>   7
>   8
>   9
>  10
>  11
>  12
>  13
>  14
>  15
>  16
>  17
>  18
>  19
>  20
>  21
>  22
>  23
>  24
>  25
>  26
>  27
>  28
>  29
>  30
>  31
> (32 rows)
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20121030/f351db6d/attachment.html>
```