[postgis-users] Trouble with ST_ShortestLine: the returned line DOES NOT start in g1 and end in g2
Jorge Gustavo Rocha
jgr at di.uminho.pt
Wed Feb 9 11:31:58 PST 2022
Hi,
Help needed :-) I'm having trouble with lines returned by
ST_ShortestLine function.
The computed lines *should* start and end on the geometries [1], but it
is not happening.
In fact, the computed geometry sometimes crosses the original geometries
or does not touch the geometries at all.
EXAMPLE 1: (of a computed geometry between a point and a line, that does
not touches the line)
with
p as (
select st_geometryfromtext('SRID=3763;POINT (-29802.23305474065
138518.7938969792)') as geom
),
l as (
select st_geometryfromtext('SRID=3763;LINESTRING (-29796.696826656284
138522.76848210802, -29804.3911369969 138519.3504205817)') as geom
),
short as (
select ST_ShortestLine(l.geom, p.geom) as geom
from l, p
)
select short.geom,
ST_Disjoint(short.geom, l.geom),
ST_Intersects(short.geom, l.geom),
ST_Touches(short.geom, l.geom),
ST_Crosses(short.geom, l.geom)
from short, l;
|geom
|st_disjoint|st_intersects|st_touches|st_crosses|
|-----------------------------------------------------------------------------------------|-----------|-------------|----------|----------|
|LINESTRING (-29802.795222153436 138520.05937757515, -29802.23305474065
138518.7938969792)|true |false |false |false |
EXAMPLE 2: (of a computed geometry between a point and a line. The
computed line crosses the original line.)
l as (
select st_geometryfromtext('SRID=3763;LINESTRING (-29790.144327955728
138508.0183209069, -29798.28270998299 138504.40298837385)') as geom
),
short as (
select ST_ShortestLine(l.geom, p.geom) as geom
from l, p
)
select short.geom,
ST_Disjoint(short.geom, l.geom),
ST_Intersects(short.geom, l.geom),
ST_Touches(short.geom, l.geom),
ST_Crosses(short.geom, l.geom)
from short, l;
|geom
|st_disjoint|st_intersects|st_touches|st_crosses|
|-----------------------------------------------------------------------------------------|-----------|-------------|----------|----------|
|LINESTRING (-29795.33635541747 138505.7118543719, -29794.774188004685
138504.44637377595)|false |true |false |true |
In both cases, I was expecting that the computed line touch the original
line.
Am I understanding the ST_ShortestLine incorrectly or should I report a
possible error? Can this be an (math approximation) error?
I'm using Postgis 3.3 dev, GEOS 3.11
POSTGIS="3.3.0dev 3.1.0rc1-1150-g05d3150c9" [EXTENSION] PGSQL="140"
GEOS="3.11.0dev-CAPI-1.16.0" PROJ="8.2.0" LIBXML="2.9.12"
LIBPROTOBUF="1.3.3" WAGYU="0.5.0 (Internal)"
Thanks in advance,
Jorge Gustavo
[1] https://postgis.net/docs/ST_ShortestLine.html
--
Jorge Gustavo Rocha
Departamento de Informática
Universidade do Minho
4710-057 Braga
Gabinete 3.29 (Piso 3)
Tel: +351 253604480
Fax: +351 253604471
Móvel: +351 910333888
skype: nabocudnosor
More information about the postgis-users
mailing list