R 根据输出按不同长度分割多段线

R 根据输出按不同长度分割多段线,r,sf,polyline,R,Sf,Polyline,我有多条多段线需要分段,最大长度为X英尺,同时也不短于Y英尺。请参见下面的多段线示例 df<-new("SpatialLinesDataFrame", data = structure(list(Count = "87", length = 13443.0406016608, Lat_TC = 2.5), class = "data.frame", row.names = 1L), lines = list(n

我有多条多段线需要分段,最大长度为X英尺,同时也不短于Y英尺。请参见下面的多段线示例

df<-new("SpatialLinesDataFrame", data = structure(list(Count = "87", 
    length = 13443.0406016608, Lat_TC = 2.5), class = "data.frame", row.names = 1L), 
    lines = list(new("Lines", Lines = list(new("Line", coords = structure(c(1279653.38073649, 
    1275804.03323203, 476893.543169454, 489773.677656633), .Dim = c(2L, 
    2L)))), ID = "1")), bbox = structure(c(1275804.03323203, 
    476893.543169454, 1279653.38073649, 489773.677656633), .Dim = c(2L, 
    2L), .Dimnames = list(c("x", "y"), c("min", "max"))), proj4string = new("CRS", 
        projargs = "+proj=tmerc +lat_0=31 +lon_0=-104.333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +datum=NAD83 +units=us-ft +no_defs"))

这将创建两条线段,我想将第二条线段一分为二,因为它大于6000英尺。最终结果将是长度为6000、3721和3721的三条线段。

使用下面的循环求解

datalist= list()
for (i in 1:nrow(split_poly)) {
  
 if(st_drop_geometry(split_poly[i,"length"])<6000) next
if(st_drop_geometry(split_poly[i,"length"])>6000){
  split_poly2=st_as_sf(SegmentSpatialLines(as_Spatial(split_poly[i,]),n.parts=3,merge.last = F))
split_poly2=split_poly2%>%mutate(length=st_length(xx),id=i)
 datalist[[i]] <- xx # add it to your list
  
}
  
}

final_df=do.call(rbind,datalist)
datalist=list()
适用于(i/1:nrow(分割多边形)){
if(st_drop_几何体(分割多边形[i,“长度”)6000){
拆分多边形2=st\U as\U sf(分段空间线(拆分多边形[i,]),n.parts=3,merge.last=F))
split_poly2=split_poly2%>%突变(长度=st_长度(xx),id=i)
数据列表[[i]]
split_poly=st_as_sf(SegmentSpatialLines(x,length=6000,merge.last = T))

datalist= list()
for (i in 1:nrow(split_poly)) {
  
 if(st_drop_geometry(split_poly[i,"length"])<6000) next
if(st_drop_geometry(split_poly[i,"length"])>6000){
  split_poly2=st_as_sf(SegmentSpatialLines(as_Spatial(split_poly[i,]),n.parts=3,merge.last = F))
split_poly2=split_poly2%>%mutate(length=st_length(xx),id=i)
 datalist[[i]] <- xx # add it to your list
  
}
  
}

final_df=do.call(rbind,datalist)