[postgis-users] ST_Split precision issue?
Nicol Hermann
postgis at geoworld.de
Fri Apr 30 09:08:39 PDT 2021
Anybody any ideas, hints?
Thank you very much
Nicol
Am Sonntag, den 25.04.2021, 16:36 +0200 schrieb Nicol Hermann:
> Hello List,
>
> I am trying to split a linestring at an intersection to another line
> into it's two segments.
> This works as expected with "dummy" coordinates, but fails with
> "real-
> world" coordinates.
>
> This:
>
> SELECT ST_AsText( ST_Split (ST_GeomFromText('LINESTRING(0 0,2 2)'),
> ST_GeomFromText('POINT(1 1)') ) ) as lsegments;
>
> gives me the expected output:
>
> lsegments
> -------------------------------------------------------------
> GEOMETRYCOLLECTION(LINESTRING(0 0,1 1),LINESTRING(1 1,2 2))
> (1 Zeile)
>
>
> When I am trying this with real world coordinates I am always getting
> the un-splitted original linesting back.
> Sample:
>
> SELECT ST_AsText(ST_intersection(aline, bline)) AS
> wktcut
>
>
> FROM (SELECT
> ST_GeomFromText('LINESTRING(8.39567520433486
> 49.4224277276901,8.39591232763397 49.4198517063953)') As aline,
> ST_GeomFromText('LINESTRING(8.39481293779266
> 49.4206708596104,8.39717339245195 49.4208001995917)') As bline ) As
> foo;
>
> returns
> POINT(8.39583178549713 49.4207266868819)
>
> If I am using this in the split command
>
> SELECT ST_AsText( ST_Split
> (ST_GeomFromText('LINESTRING(8.39567520433486
> 49.4224277276901,8.39591232763397 49.4198517063953)'),
> ST_GeomFromText('POINT(8.39583178549713 49.4207266868819)') ) ) as
> lsegments;
>
> the result is
> lsegments
> -------------------------------------------------------------------
> ---
> GEOMETRYCOLLECTION(LINESTRING(8.39567520433486
> 49.4224277276901,8.39591232763397 49.4198517063953))
> (1 Zeile)
>
> which es equal to the input.
>
> Is this a precision issue between differen postgis functions and how
> can I solve this?
>
> If I'am adding ST_Snap it returns a linestring which only represents
> one of the 2 segments I would expect.
>
> See:
>
> SELECT
> ST_AsText(
> ST_Split (
> ST_Snap (
> ST_GeomFromText('LINESTRING(8.39567520433486
> 49.4224277276901,8.39591232763397 49.4198517063953)'),
> ST_GeomFromText('POINT(8.39583178549713 49.4207266868819)'), 1 ),
> ST_GeomFromText('POINT(8.39583178549713 49.4207266868819)') )
> );
> ) )
> as lsegments;
>
> response is:
>
> lsegemts
> -------------------------------------------------------------------
> ---
> GEOMETRYCOLLECTION(LINESTRING(8.39567520433486
> 49.4224277276901,8.39583178549713 49.4207266868819))
>
>
> Any hints, or do I have a misconception how ST_Split should work?
>
> Thanks
> Nicol
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/postgis-users
More information about the postgis-users
mailing list