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

如何在R中基于野火栅格创建网格并绘制旅鸫出现点?

解决方案

1. 安装并加载必要的R包

先安装并加载处理空间数据的核心工具包:

install.packages(c("sf", "raster", "ggplot2"))
library(sf)
library(raster)
library(ggplot2)

2. 将旅鸫数据转为sf空间对象

假设你的数据框名为thrush_data,包含经纬度列(例:lon和lat),执行以下代码完成转换:

# 读取数据(替换为你的实际文件路径)
# thrush_data <- read.csv("your_thrush_data.csv")

# 转换为sf对象,指定十进制度经纬度对应的WGS84坐标系(EPSG:4326)
thrush_sf <- st_as_sf(thrush_data, coords = c("lon", "lat"), crs = 4326)

# 若转换报错,先移除含缺失值的行
# thrush_data <- na.omit(thrush_data)

注意:如果你的经纬度列名不是lon/lat,需替换为数据中实际的列名(比如longitude/latitude)。

3. 加载野火栅格并创建匹配网格

3.1 统一坐标系

Hayman野火位于美国科罗拉多州,建议将所有数据转换为UTM投影(EPSG:32613,UTM 13N),避免地理坐标系下的距离偏差:

# 加载野火栅格文件(替换为你的栅格路径)
hayman_raster <- raster("hayman_wildfire.tif")

# 将栅格和点数据转换为UTM投影
hayman_raster_proj <- projectRaster(hayman_raster, crs = "+init=EPSG:32613")
thrush_sf_proj <- st_transform(thrush_sf, crs = 32613)

3.2 创建栅格范围匹配的网格

定义网格单元格大小(单位为米,示例设为1000米即1公里,可按需调整):

# 基于栅格边界生成网格
cell_size <- 1000  # 单元格边长,单位:米
grid <- st_make_grid(
  st_as_sfc(st_bbox(hayman_raster_proj)),
  cellsize = cell_size,
  what = "polygons"
)

# 转换为sf对象,并裁剪到野火栅格的实际范围
grid_sf <- st_sf(geometry = grid) %>%
  st_intersection(st_as_sfc(st_bbox(hayman_raster_proj)))

4. 绘制网格与旅鸫出现点

用ggplot2完成可视化,可区分两次调查的0/1观测值:

ggplot() +
  # 绘制野火栅格底图(可选,展示过火区域)
  geom_raster(
    data = as.data.frame(hayman_raster_proj, xy = TRUE),
    aes(x = x, y = y, fill = layer),
    alpha = 0.6
  ) +
  # 绘制网格
  geom_sf(data = grid_sf, fill = "transparent", color = "gray50", linewidth = 0.3) +
  # 绘制第一次调查的旅鸫点,用颜色区分出现/未出现
  geom_sf(
    data = thrush_sf_proj,
    aes(color = factor(survey1)),  # 替换survey1为你的第一次调查列名
    size = 2
  ) +
  # 绘制第二次调查的旅鸫点,用形状区分出现/未出现(可选)
  geom_sf(
    data = thrush_sf_proj,
    aes(shape = factor(survey2)),  # 替换survey2为你的第二次调查列名
    size = 2,
    color = "black"
  ) +
  # 调整配色与标签
  scale_fill_viridis_c(option = "inferno", name = "过火强度") +
  scale_color_manual(values = c("0" = "white", "1" = "darkred"), name = "第一次调查出现") +
  scale_shape_manual(values = c("0" = 1, "1" = 16), name = "第二次调查出现") +
  theme_bw() +
  labs(title = "Hayman野火区域旅鸫观测点与网格", x = "UTM东向坐标", y = "UTM北向坐标")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:35:23