[英]How to assign correct projection and extent to a raster using terra r package?
我正在尝试使用以下代码使用terra
r 包读取一个 tif 文件
hh <- rast("imagery_HH.tif")
#> Warning message:
#> [rast] unknown extent
hh
#> class : SpatRaster
#> dimensions : 8371, 8946, 1 (nrow, ncol, nlyr)
#> resolution : 1, 1 (x, y)
#> extent : 0, 8946, 0, 8371 (xmin, xmax, ymin, ymax)
#> coord. ref. :
#> source : imagery_HH.tif
#> name : imagery_HH
使用函数terra::describe("imagery_HH.tif")
,我得到了以下信息:
[4] "Size is 8946, 8371"
[5] "GCP Projection = "
[6] "GEOGCRS[\"WGS 84\","
[7] " DATUM[\"World Geodetic System 1984\","
[8] " ELLIPSOID[\"WGS 84\",6378137,298.257223563,"
[9] " LENGTHUNIT[\"metre\",1]]],"
[10] " PRIMEM[\"Greenwich\",0,"
[11] " ANGLEUNIT[\"degree\",0.0174532925199433]],"
[12] " CS[ellipsoidal,2],"
[13] " AXIS[\"geodetic latitude (Lat)\",north,"
[14] " ORDER[1],"
[15] " ANGLEUNIT[\"degree\",0.0174532925199433]],"
[16] " AXIS[\"geodetic longitude (Lon)\",east,"
[17] " ORDER[2],"
[18] " ANGLEUNIT[\"degree\",0.0174532925199433]],"
[19] " USAGE["
[20] " SCOPE[\"Horizontal component of 3D system.\"],"
[21] " AREA[\"World.\"],"
[22] " BBOX[-90,-180,90,180]],"
[23] " ID[\"EPSG\",4326]]"
[24] "Data axis to CRS axis mapping: 2,1"
如果我们仔细观察,我们会发现缺少坐标参考,分辨率显示 1 x 1,但范围不正确。 但是如果我们在 QGIS 中打开 tif 文件,它会显示以下具有 EPSG crs 的属性:4326
现在如何使用terra
R 包读取具有适当坐标系、分辨率和范围的 tif 文件。
下面表明这不是常规栅格。 它显示 GCP(特定栅格单元的坐标),如果需要这些,您可能没有矩形范围或恒定分辨率。 (我没有检查过它们是否是,但你可以)。
读取此类文件需要不同于读取常规光栅文件的方法。 第一次看到这样的文件,目前“terra”还不支持; 我会把它放在待办事项清单上。
terra::describe("imagery_HH.tif")[31:40]
[1] "Data axis to CRS axis mapping: 2,1"
[2] "GCP[ 0]: Id=1, Info="
[3] " (0,0) -> (78.591314,29.400624,0)"
[4] "GCP[ 1]: Id=2, Info="
[5] " (357.84,0) -> (78.52592634,29.41112936,0)"
[6] "GCP[ 2]: Id=3, Info="
[7] " (715.68,0) -> (78.4607346,29.4215638,0)"
[8] "GCP[ 3]: Id=4, Info="
[9] " (1073.52,0) -> (78.39539736,29.43198708,0)"
[10] "GCP[ 4]: Id=5, Info="
(依此类推,直到第 1383 行)。
正如@bretauv 所指出的,投影正在正确加载。 我不确定为什么terra::rast
没有正确读取范围,但如果有任何安慰的话,它不会被raster::raster
读取,所以这不仅仅是一个terra
问题。 在任何情况下,如果您知道范围,则可以手动设置范围,在本例中您知道。
hh <- terra::rast("imagery_HH.tif")
terra::set.ext(
x = hh,
value = c(76.6811227745188262,
78.59105666365414556,
27.9827663027027924,
29.6529629093873979)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.