【发布时间】:2018-03-12 05:39:46
【问题描述】:
我有一个小光栅。它是来自 Digital Globe 底图的单个图块(缩放 = 16);它是标准的 256 x 256 像素。在 QGIS 中,我创建了一个多边形 shapefile 并添加了大约 50 个特征。栅格和 shapefile 在同一个 CRS 中。在 QGIS 中,它们可以很好地对齐,如下图所示。
但是,当我在 R 中同时打开光栅和 shapefile 时,两者不再对齐。同样,两者都在同一个 CRS 中。可重现代码如下,shapefile 和光栅可以从 GitHub 文件夹here 下载。我正在使用 raster 包中的 brick() 来保持 RGB 波段分开。
#load
library(raster)
img <- brick("26261.png")
proj4string(img) <- CRS("+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs")
trainData <- shapefile("26261_train.shp")
#shape plots fine alone
plot(trainData, axes = TRUE)
#raster plots fine alone
plot(img,1)
#two do not match
plot(trainData, add = TRUE)
#summary
img
trainData
问题似乎是由于两个文件具有不同的范围,如摘要所示:
> img
class : RasterBrick
dimensions : 256, 256, 65536, 4 (nrow, ncol, ncell, nlayers)
resolution : 1, 1 (x, y)
extent : 0, 256, 0, 256 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs
data source : /.../26261.png
names : X26261.1, X26261.2, X26261.3, X26261.4
min values : 0, 0, 0, 0
max values : 255, 255, 255, 255
> trainData
class : SpatialPolygonsDataFrame
features : 49
extent : 4.38, 244.9, -232.72, -6.48 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs
variables : 3
names : id, cat1, cat2
min values : NA, 1, 0
max values : NA, 7, 2
但是,当我在 QGIS 中检查两个文件的范围时,它们重叠。下图是 QGIS 中的栅格。 shapefile 和栅格的 y 范围都在 [-256, 0] 范围内。
brick() 函数似乎将 x 和 y 范围都设置为正值,尽管我已经查看了包/函数文档并且不明白为什么会这样。如何让这两个文件在 R 中对齐?
我尝试将栅格导出为 GeoTIFF,但这也不起作用。我还尝试使用其他一些 R 包(如 rgdal)读取 shapefile。如果在 QGIS 中导出 shapefile,以栅格为中心并选择“地图视图范围”,我可以让它“工作”,但这不是最佳解决方案,并且(a)我需要使用地图图块并且不想手动缩放到每个图块,并且(b)这并不能解释我所犯的错误。我什至不完全确定我的问题是从 QGIS 导出还是导入到 R,尽管我很确定我的错误出在 brick() 中。
注意:有一个类似的问题here,但尽管有问题的标题,但错误在于坐标参考系。
【问题讨论】:
-
不知道这是否与您的问题有关,但一件很明显的事情是您的栅格没有正确地理参考。您拥有的坐标只是反映了图块的行数和列数(1 到 256),分辨率设置为 1m,通过查看您的图像,这是不正确的。