umartin commented on issue #1755: URL: https://github.com/apache/sedona/issues/1755#issuecomment-2595091854
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 ``` ``` 1,"LINESTRING (0 0, 35.35533905932738 35.35533905932738)" 1,"LINESTRING (35.35533905932738 35.35533905932738, 70.71067811865476 70.71067811865476)" 1,"LINESTRING (70.71067811865476 70.71067811865476, 99 99, 100 101)" 2,"LINESTRING (0 0, 0 500)" 3,"LINESTRING (0 0, 100 100)" ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
