You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言dismo包中设置海洋物种分布映射的范围——解决仅陆地生成采样点的问题

解决海洋入侵牡蛎物种分布映射的采样范围问题

我帮你梳理下解决这两个核心问题的具体步骤,都是基于你当前用的dismo和raster包来实现的:

1. 让随机采样点只落在海洋区域

你当前的采样点落在陆地上,核心原因是mask参数默认指向了包含陆地的栅格,我们需要先手动构建海洋专属的掩码:

  • 第一步:生成研究区域的海洋栅格掩码

    # 加载所需包(如果没加载的话)
    library(dismo)
    library(raster)
    library(maptools)
    
    # 定义你的研究范围(和绘图参数保持一致)
    study_extent <- extent(0, 30, 50, 70)
    
    # 创建和原mask分辨率一致的空白栅格
    base_raster <- raster(study_extent, res = res(mask))
    
    # 将陆地矢量数据栅格化,陆地标记为1,海洋为NA
    land_raster <- rasterize(wrld_simpl, base_raster, field = 1)
    
    # 反选得到海洋掩码:海洋区域保留值,陆地设为NA
    marine_mask <- mask(base_raster, land_raster, inverse = TRUE)
    
  • 第二步:用海洋掩码生成随机采样点
    把randomPoints的mask换成上面的marine_mask,这样采样点就只会落在海洋区域了:

    background <- randomPoints(mask = marine_mask,
                              n = nrow(obs.data),
                              ext = study_extent,
                              extf = 1.25)
    

2. 采样排除当前地理范围的区域(即研究区以外的所有区域)

如果需要在当前绘制区域之外生成采样点,我们可以先创建排除研究区的全局掩码,还可以结合海洋限制:

  • 第一步:构建排除研究区的海洋掩码

    # 创建和原mask分辨率一致的全球栅格
    global_raster <- raster(res = res(mask))
    
    # 将研究范围转为多边形,用于后续掩码操作
    study_poly <- as(study_extent, "SpatialPolygons")
    crs(study_poly) <- crs(global_raster)
    
    # 先生成全球海洋掩码
    global_land <- rasterize(wrld_simpl, global_raster, field = 1)
    global_marine <- mask(global_raster, global_land, inverse = TRUE)
    
    # 排除研究区域,得到研究区外的海洋掩码
    exclude_study_marine_mask <- mask(global_marine, study_poly, inverse = TRUE)
    
  • 第二步:生成研究区外的随机采样点

    background_exclude <- randomPoints(mask = exclude_study_marine_mask,
                                      n = nrow(obs.data))
    

验证绘图示例

你可以用下面的代码验证采样结果:

# 验证海洋采样点
plot(wrld_simpl, xlim = c(0, 30), ylim = c(50, 70), axes = TRUE, col = "grey95", 
     main = "Presence and Marine Pseudo-absence Points")
points(background, col = "grey30", pch = 1, cex = 0.75)

# 验证研究区外的采样点(扩大绘图范围)
plot(wrld_simpl, xlim = c(-10, 40), ylim = c(40, 80), axes = TRUE, col = "grey95", 
     main = "Pseudo-absence Points (Excluding Study Area)")
points(background_exclude, col = "blue", pch = 1, cex = 0.75)

内容的提问来源于stack exchange,提问作者amerray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 10:57:37