我有几个多边形&我喜欢从这些多边形中的几个栅格图层中提取平均值。 当我将它们添加到ArcMap时,我意识到两种数据类型的投影不匹配。我可以使用项目工具(数据管理工具箱>投影和转换工具集>光栅)解决ArcGIS中显示的问题。所以我尝试通过以下方式将数据加载到R中来标准化投影(部分代码):
栅格:
for (i in 1:length(rasterlist1))
{ndvi_raster_stack1[i]<-raster(rasterlist1[i])
raster::NAvalue(ndvi_raster_stack1[[i]])<--999
projection(ndvi_raster_stack1[[i]])<-"+proj=utm +ellps=WGS84 +datum=WGS84 +units=m"}
> ndvi_raster_stack1[[1]]
class : RasterLayer
dimensions : 226, 150, 33900 (nrow, ncol, ncell)
resolution : 0.57504, 0.5753628 (x, y)
extent : -28.728, 57.528, -55.08, 74.952 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +ellps=WGS84 +datum=WGS84 +units=m +towgs84=0,0,0
values : Z:\master\lusmeg_sw_kernel_data\ndvi0910\Y2008_P47.tif
min value : -91
max value : 550.8125
多边形:
for (i in 1:length(poplist))
{pop_kernels[i]<-readShapeSpatial(poplist[i],repair=TRUE,proj4string=CRS("+proj=utm +ellps=WGS84 +datum=WGS84 +units=m"))
pop_kernels[[i]]<-unionSpatialPolygons(pop_kernels[[i]],ID=c(rep(1,times=length(pop_kernels[[i]])-1),0),threshold=NULL,avoidGEOS=FALSE)}
> str(pop_kernels[[1]])
Formal class 'SpatialPolygons' [package "sp"] with 4 slots
..@ polygons :List of 2
.. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
.. .. .. ..@ Polygons :List of 2
.. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
.. .. .. .. .. .. ..@ labpt : num [1:2] 2404422 893343
.. .. .. .. .. .. ..@ area : num 1.15e+12
.. .. .. .. .. .. ..@ hole : logi FALSE
.. .. .. .. .. .. ..@ ringDir: int 1
.. .. .. .. .. .. ..@ coords : num [1:1625, 1:2] 2551236 2533236 2533236 2523236 2523236 ...
.. .. .. .. .. .. .. ..- attr(*, "dimnames")=List of 2
.. .. .. .. .. .. .. .. ..$ : NULL
.. .. .. .. .. .. .. .. ..$ : chr [1:2] "x" "y"
.. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
.. .. .. .. .. .. ..@ labpt : num [1:2] 2468549 865776
.. .. .. .. .. .. ..@ area : num 6.31e+11
.. .. .. .. .. .. ..@ hole : logi TRUE
.. .. .. .. .. .. ..@ ringDir: int -1
.. .. .. .. .. .. ..@ coords : num [1:1385, 1:2] 2551236 2551236 2563236 2563236 2569236 ...
.. .. .. .. .. .. .. ..- attr(*, "dimnames")=List of 2
.. .. .. .. .. .. .. .. ..$ : NULL
.. .. .. .. .. .. .. .. ..$ : chr [1:2] "x" "y"
.. .. .. ..@ plotOrder: int [1:2] 1 2
.. .. .. ..@ labpt : num [1:2] 2404422 893343
.. .. .. ..@ ID : chr "0"
.. .. .. ..@ area : num 1.15e+12
.. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
.. .. .. ..@ Polygons :List of 1
.. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
.. .. .. .. .. .. ..@ labpt : num [1:2] 2468549 865776
.. .. .. .. .. .. ..@ area : num 6.31e+11
.. .. .. .. .. .. ..@ hole : logi FALSE
.. .. .. .. .. .. ..@ ringDir: int 1
.. .. .. .. .. .. ..@ coords : num [1:1385, 1:2] 2551236 2541236 2541236 2529236 2529236 ...
.. .. .. .. .. .. .. ..- attr(*, "dimnames")=List of 2
.. .. .. .. .. .. .. .. ..$ : NULL
.. .. .. .. .. .. .. .. ..$ : chr [1:2] "x" "y"
.. .. .. ..@ plotOrder: int 1
.. .. .. ..@ labpt : num [1:2] 2468549 865776
.. .. .. ..@ ID : chr "1"
.. .. .. ..@ area : num 6.31e+11
..@ plotOrder : int [1:2] 1 2
..@ bbox : num [1:2, 1:2] 1819236 207017 3013236 1577017
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:2] "x" "y"
.. .. ..$ : chr [1:2] "min" "max"
..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots
.. .. ..@ projargs: chr " +proj=utm +ellps=WGS84 +datum=WGS84 +units=m +towgs84=0,0,0"
我可以单独绘制多边形和栅格,但是当我尝试在栅格上绘制其中一个多边形时,不会显示多边形:
plot(ndvi_raster_stack1[[1]],xlab="Longitude",ylab="Latitude")
plot(pop_kernels[[1]],col="black",add=TRUE)
似乎他们仍然没有“重叠”。我认为这也是由不同的边界框表示的:
> bbox(ndvi_raster_stack1[[1]])
min max
s1 -28.728 57.528
s2 -55.080 74.952
> bbox(pop_kernels[[1]])
min max
x 1819236 3013236
y 207017 1577017
因为我想在多边形中提取栅格值,所以我必须确保以正确的方式引用它们。 有人知道问题可能是什么吗?
答案 0 :(得分:7)
您的多边形shapefile的坐标系不是lat-long - 数字非常大,在某些系统中可能是米。分配proj4string不会将数据重新投影到lat-long,它只是设置它认为是什么坐标的标签。在这种情况下,它错了!
你需要确保你的多边形为它们中的数字得到正确的proj4string - 可能有一个[shapefile] .prj文件以及告诉你的.shp和.dbf。将proj4string设置为。
然后,您可以使用sp或rgdal中的spTransform将多边形投影到lat-long WGS84坐标。
最好将多边形转换为栅格坐标,因为搞乱栅格坐标可能意味着重新投影整个网格,这很麻烦...