R 根据输出按不同长度分割多段线
我有多条多段线需要分段,最大长度为X英尺,同时也不短于Y英尺。请参见下面的多段线示例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
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)