如何在R中提取加拿大大西洋沿岸sf对象的海岸线坐标?
提取加拿大大西洋沿岸海岸线坐标的方法
当然可以用rnaturalearth结合sf包实现,下面给你两种实用方案:
方案1:直接获取海岸线数据并裁剪
ne_coastlines函数专门返回全球海岸线的线要素数据,比从国家多边形转换更精准(避免包含内陆湖岸线),步骤如下:
library(rnaturalearth) library(rnaturalearthdata) library(sf) # 处理空间数据的核心包,你用st_crop时应该已经加载过 # 获取1:110比例尺的全球海岸线 global_coast <- ne_coastlines(scale = 110) # 裁剪到你指定的大西洋沿岸区域 atlantic_coast <- st_crop(global_coast, xmin = -70, xmax = -50, ymin = 41, ymax = 61) # 提取坐标矩阵,转成数据框方便后续绘图 coast_coords <- as.data.frame(st_coordinates(atlantic_coast)) # 结果里的L1列对应不同的海岸线段(比如岛屿、半岛的独立岸线)
方案2:从已有的国家多边形数据提取
如果你想基于已经生成的canada_atlantic_only来提取,只需要把多边形对象转成线要素,再提取坐标:
# 将裁剪后的加拿大多边形转成线要素(提取边界) atlantic_coast_lines <- st_cast(canada_atlantic_only, "LINESTRING") # 提取坐标 coast_coords_from_poly <- as.data.frame(st_coordinates(atlantic_coast_lines))
注意事项
- 两种方案的区别:方案1的
ne_coastlines只包含海洋海岸线,方案2从国家多边形转换会包含内陆湖泊的岸线,如果你只需要近海的海岸线,优先选方案1。 - 提取的坐标数据里,X是经度,Y是纬度,L1列可以用来区分不同的独立岸线段(比如纽芬兰岛和新斯科舍半岛的岸线会是不同的L1值),方便你后续绘制近岸/远岸线条时分组处理。
内容的提问来源于stack exchange,提问作者Abed
相关产品推荐
相关产品推荐

