You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Since ST_SubDivideExplode splits on vertices it doesn't work on long lines with few vertices. If ST_SubDivideExplode is combined with ST_Segmentize it works better. ST_Segmentize introduces more vertices that ST_SubDivideExplode can split on.
But what I really want is something similar to subdivide but using length instead of max vertices. As described here in the example using a cross lateral join: https://postgis.net/docs/ST_LineSubstring.html
I was able to translate the query to sedona/spark but it's not pretty.
with line as (
select col1 as id, col2 as sublen, ST_GeomFromWKT(col3) as geom
from values (1, 50, 'LINESTRING (0 0, 99 99, 100 101)'), -- Length > sublen
(2, 500, 'LINESTRING (0 0, 0 500)'), -- Length = sublen
(3, 500, 'LINESTRING (0 0, 100 100)') -- Length < sublen
)
, line_seq as (
select *, ST_Length(geom) as len, explode(sequence(0, floor(ST_Length(geom) / sublen))) as segment
from line
)
select id, st_linesubstring(geom, segment * sublen / len, (segment +1) * sublen / len)
from line_seq
-- skip last segment if line length is exact multiple of sublen
where sublen * segment / len != 1.0
It would be nice to have something like https://postgis.net/docs/ST_Segmentize.html to break up large geometries for better partitioning and indexing.
Unfortunately I'm swamped so I won't have time work on this myself in the immediate future.
The text was updated successfully, but these errors were encountered: