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

如何绕开rectify()从jpg+jgw文件对直接获取栅格边界多边形?

从JPG+JGW文件对快速获取栅格边界多边形(绕开rectify())

当前使用terra包处理JPG+JGW文件对时,通过rectify()再转多边形的方式在批量处理时速度极慢,测试已证实rectify()是性能瓶颈。可以通过直接读取地理变换参数计算栅格角点的方式绕开rectify(),快速生成边界多边形:

解决方案代码

library(terra)

# 导入带地理参考的JPG(不执行rectify)
r <- rast("DJI_0371.jpg")

# 提取JGW文件中的地理变换参数
geo_trans <- crs(r, describe = TRUE)$geotransform
x_origin <- geo_trans[1]
y_origin <- geo_trans[2]
x_res <- geo_trans[3]
y_skew <- geo_trans[4]
x_skew <- geo_trans[5]
y_res <- geo_trans[6]

# 获取栅格的行列数
n_cols <- ncol(r)
n_rows <- nrow(r)

# 计算栅格四个角点的坐标(按左上→右上→右下→左下→左上的顺序闭合)
corner_coords <- matrix(
  c(
    x_origin, y_origin,
    x_origin + n_cols * x_res + n_cols * x_skew, y_origin + n_cols * y_skew + n_cols * y_res,
    x_origin + n_cols * x_res + n_rows * y_skew, y_origin + n_rows * y_skew + n_rows * y_res,
    x_origin + n_rows * y_skew, y_origin + n_rows * y_res,
    x_origin, y_origin
  ),
  ncol = 2, byrow = TRUE
)

# 将坐标转换为terra多边形对象
boundary_poly <- vect(corner_coords, type = "polygons", crs = crs(r))

原理说明

JGW文件本质是存储了栅格的地理变换参数(包含原点坐标、分辨率、旋转/倾斜参数),通过这些参数可以直接计算出栅格四个角点的地理坐标,无需对栅格数据进行重采样(rectify()的核心操作),因此能大幅提升批量处理的速度。

性能对比

该方法的执行时间几乎与rast()导入文件的时间一致,远低于原流程(rectify()+as.polygons())的耗时,完全适配批量处理场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:10:22