使用三个Linestring与一个Multilinestring创建多边形报错求助
解决st_polygonize生成多边形时的空几何报错问题
你遇到的NA value(s) in bounding box. Trying to plot empty geometries?报错,核心原因是线要素没有形成可闭合的有效环,或者存在拓扑问题,结合你的场景,按以下步骤排查修复:
先处理线要素的拓扑与格式问题
首先检查所有线的几何有效性,修复无效要素,同时把Multilinestring拆成单个Linestring,确保参与运算的都是单条线:# 检查几何有效性 valid_status <- st_is_valid(your_line_data) # 修复无效几何 fixed_lines <- st_make_valid(your_line_data) # 拆分Multilinestring为Linestring split_multi_lines <- st_cast(your_multilinestring_data, "LINESTRING") # 合并所有线到同一图层 all_lines <- rbind(fixed_lines, split_multi_lines)裁剪过长的南北边界线
南北边界线超出等深线范围的部分会破坏闭合环的形成,先裁剪到两条等深线的横向范围内:# 获取两条等深线的横向(x轴)范围 depth_x_extent <- st_bbox(your_depth_lines)[c("xmin", "xmax")] # 构建裁剪用的矩形范围 clip_bounds <- st_as_sfc(st_bbox(c( xmin = depth_x_extent[1], xmax = depth_x_extent[2], ymin = st_bbox(your_ns_lines)["ymin"], ymax = st_bbox(your_ns_lines)["ymax"] ))) # 裁剪南北边界线 clipped_ns_lines <- st_intersection(your_ns_lines, clip_bounds)确保线形成闭合环后再多边形化
合并裁剪后的南北线与两条等深线,若端点未精确重合,用st_snap吸附端点,再执行多边形化:# 合并所有需要的边界线 final_boundary_lines <- rbind(clipped_ns_lines, your_depth_lines) # 吸附线端点,阈值根据数据精度调整(比如0.001) snapped_lines <- st_snap(final_boundary_lines, final_boundary_lines, tolerance = 0.001) # 生成多边形 result_polygons <- st_polygonize(snapped_lines) # 过滤空几何 result_polygons <- result_polygons[!st_is_empty(result_polygons)]验证并输出结果
检查生成的多边形有效性,确认无误后再绘图:# 检查多边形几何有效性 st_is_valid(result_polygons) # 绘图查看结果 plot(result_polygons)
内容的提问来源于stack exchange,提问作者E Norton
相关产品推荐
相关产品推荐

