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]

Reply via email to