[PostGIS] #5589: ST_3DDistance seems not to work for LINESTRINGs in specified situation.

PostGIS trac at osgeo.org
Thu Oct 26 07:53:11 PDT 2023


#5589: ST_3DDistance seems not to work for LINESTRINGs in specified situation.
----------------------+---------------------------
 Reporter:  Wenjing   |      Owner:  pramsey
     Type:  defect    |     Status:  new
 Priority:  critical  |  Milestone:  PostGIS 3.5.0
Component:  postgis   |    Version:  3.4.x
 Keywords:            |
----------------------+---------------------------
 For the following query involving ST_3DDistance:

 {{{
 SELECT ST_3DDistance(b1, b2)
 FROM ST_GeomFromText('LINESTRING Z (0 0 0, 1 0 0)') As b1,
 ST_GeomFromText('LINESTRING Z (0 0 0, 1 1 1)') As b2;
 --  st_3ddistance
 ---------------
 --
 -- (1 row)
 }}}

 PostGIS returns a null result which is unexpected.

 PostGIS seems not to work for LINESTRINGs (i.e., returning an unexpected
 null result) when
 (1) both LINESTRINGs start from 0,0,0 and
 (2) both LINESTRINGs only involve two points.

 (1) For example, when a LINESTRING does not start from 0,0,0

 {{{
 SELECT ST_3DDistance(b1, b2)
 FROM ST_GeomFromText('LINESTRING Z (0 0 1, 0 0 0)') As b1,
 ST_GeomFromText('LINESTRING Z (0 0 0, 0 0 1)') As b2;
 --  st_3ddistance
 ---------------
 --              0
 -- (1 row)
 }}}

 PostGIS can give the expected result.

 (2) or when a LINESTRING involves more than two points


 {{{
 SELECT ST_3DDistance(b1, b2)
 FROM ST_GeomFromText('LINESTRING Z (0 0 0, 0 1 0, 0 2 0)') As b1,
 ST_GeomFromText('LINESTRING Z (0 0 0, 1 0 0)') As b2;
 --  st_3ddistance
 ---------------
 --              1
 -- (1 row)
 }}}

 PostGIS also works for the case.

 The unexpected behavior for ST_3DDistance also propagates to ST_3DDWithin.

 For example, the following query is expected to have true while PostGIS
 gives false


 {{{
 SELECT ST_3DDWithin(b1, b2, 10000)
 FROM ST_GeomFromText('LINESTRING Z (0 0 0, 1 0 0)') As b1,
 ST_GeomFromText('LINESTRING Z (0 0 0, 1 1 1)') As b2;
 --expected{t},actual{f}
 }}}
 The ST_3DDWithin works correctly if we change the start point or add one
 more point as above.

 {{{
 SELECT ST_3DDWithin(b1, b2, 10000)
 FROM ST_GeomFromText('LINESTRING Z (0 0 1, 1 0 0)') As b1,
 ST_GeomFromText('LINESTRING Z (0 0 0, 1 1 1)') As b2;
 --result{t}
 }}}

 {{{
 SELECT ST_3DDWithin(b1, b2, 10000)
 FROM ST_GeomFromText('LINESTRING Z (0 0 0, 1 0 0, 1 2 1)') As b1,
 ST_GeomFromText('LINESTRING Z (0 0 0, 1 1 1)') As b2;
 --result{t}
 }}}

 version:
 POSTGIS="3.5.0dev 3.4.0rc1-705-g5c3ec8392"
 [EXTENSION]
 PGSQL="170"
 GEOS="3.13.0dev-CAPI-1.18.0"
 PROJ="8.2.1 NETWORK_ENABLED=OFF
 URL_ENDPOINT=https://cdn.proj.org
 USER_WRITABLE_DIRECTORY=/tmp/proj
 DATABASE_PATH=/usr/share/proj/proj.db"
 LIBXML="2.9.13" PostgreSQL 17devel on x86_64-pc-linux-gnu, compiled by gcc
 (Ubuntu 11.4.0-
 1ubuntu1~22.04) 11.4.0, 64-bit
-- 
Ticket URL: <https://trac.osgeo.org/postgis/ticket/5589>
PostGIS <http://trac.osgeo.org/postgis/>
The PostGIS Trac is used for bug, enhancement & task tracking, a user and developer wiki, and a view into the subversion code repository of PostGIS project.


More information about the postgis-tickets mailing list