R中计算多边形Shapefile周长报错,已实现面积计算,求解决方法
修正多边形周长计算的方案
你的错误是因为几何数据采用经纬度坐标系(longlat),lwgeom::st_perimeter不支持直接计算这类坐标系下多边形的周长,按照错误提示的思路,我们需要先将多边形转换为线串(LINESTRING),再用st_length计算周长。
修正后的代码(保持链式风格)
data <- arc.select(data.path) %>% arc.data2sf() %>% mutate( District = sub("^0+", "", SLDUST20), # 去除District列的前导0 Shape_Area = st_area(.), # 计算面积 # 转换多边形为线串后计算周长 Shape_Length = st_length(st_cast(., "LINESTRING")) )
针对多多边形(MULTIPOLYGON)的兼容写法
如果你的Shapefile是多多边形类型,需要添加warn = FALSE来忽略类型转换的警告,同时确保所有子多边形的边界都被计算:
data <- arc.select(data.path) %>% arc.data2sf() %>% mutate( District = sub("^0+", "", SLDUST20), Shape_Area = st_area(.), Shape_Length = st_length(st_cast(., "LINESTRING", warn = FALSE)) )
关键说明
st_cast(., "LINESTRING"):将多边形的边界提取为线串,这一步是让st_length能识别并计算其长度(即多边形周长)。st_length在经纬度坐标系下会自动使用椭球距离计算,返回结果以米为单位,和st_area的单位保持一致,结果更精准。
内容的提问来源于stack exchange,提问作者bsilver52
相关产品推荐
相关产品推荐

