st_transform投影多边形时连接线未正确转换的问题求助
解决矩形多边形投影后线条未弯曲的问题
问题核心是:你用边界框直接生成的多边形只有4个顶点,st_transform仅转换这4个顶点后用直线连接,但地理坐标系中平行于纬线的边,在投影到EPSG:9311(北美阿尔伯斯等面积投影)后本应是曲线,仅靠4个顶点无法呈现这种弯曲形态。
解决思路是先在地理坐标系下细分多边形的边,生成足够多的顶点,再进行投影转换,具体实现如下:
修改后的可运行代码:
library(sf) library(spData) library(dplyr) library(ggplot2) data(world) proWorld <- st_transform(world, "EPSG:9311") # 生成带细分顶点的矩形:先转sfc,再细分边,最后投影 box <- st_bbox(c(xmin = -110, ymin = 25, ymax = 33, xmax = -90), crs = "EPSG:4326") %>% st_as_sfc() %>% st_segmentize(dfMaxLength = 0.1) %>% # 按0.1度间隔细分边,单位为当前CRS的度 st_transform(crs = st_crs(proWorld)) ggplot() + geom_sf(data = proWorld) + geom_sf(data = box, fill = NA, color = "red") + ylim(c(-2182970, 1099711)) + xlim(c(-1994737, 2770402))
关键细节说明
st_segmentize的dfMaxLength参数:在EPSG:4326下单位是度,设置为0.1意味着每条边会被拆分成多个0.1度间隔的小段,生成足够多的顶点来模拟曲线。你可以根据需求调整这个值,数值越小曲线越平滑,但计算量会相应增加。- 必须在原始地理坐标系下细分边,而非投影后再操作——因为投影后的坐标系单位是米,细分逻辑和地理空间的曲线逻辑不匹配。
内容的提问来源于stack exchange,提问作者Michael L
相关产品推荐
相关产品推荐

