我有一个问题是栅格化shapefile以在0.5 * 0.5网格上生成点。 shapefile表示全球珊瑚礁对综合威胁的风险等级(Low-0,Medium-100,High-1000,Very High-1500)的分类。
我从另一个可以正常工作的示例中提取代码,但是当我尝试使用我的数据时,我从绘图函数中得不到任何结果。请参阅下面的shapefile链接和我的代码:
Reefs At Risk: Global Integreated Threats
# Read shapefile into R
library(rgdal)
library(raster)
int.threat.2030 <- readOGR(dsn = "Global_Threats/Integrated_Future",
layer = "rf_int_2030_poly")
## Set up a raster "template" for a 0.5 degree grid
ext <- extent(-110, -50, 0, 35)
gridsize <- 0.5
r <- raster(ext, res=gridsize)
## Rasterize the shapefile
rr <- rasterize(int.threat.2030, r)
## Plot raster
plot(rr)
我可能会出错的任何想法?这是shapefile本身的问题吗?
请,谢谢!
答案 0 :(得分:2)
您假设多边形处于lon / lat坐标,但它们不是:
library(raster)
library(rgdal)
p <- shapefile('Global_Threats/Integrated_Future/rf_int_2030_poly.shp')
p
#class : SpatialPolygonsDataFrame
#features : 63628
#extent : -18663508, 14601492, -3365385, 3410115 (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=cea +lon_0=-160 +lat_ts=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
#variables : 3
#names : ID, THREAT, THREAT_TXT
#min values : 1, 0, Critical
#max values : 63628, 2000, Very High
您可以更改投影
pgeo <- spTransform(p, CRS('+proj=longlat +datum=WGS84'))
然后执行以下操作:
ext <- floor(extent(pgeo))
rr <- raster(ext, res=0.5)
rr <- rasterize(pgeo, rr, field=1)
或保留原始CRS,并执行以下操作:
ext <- extent(p)
r <- raster(ext, res=50000)
r <- rasterize(p, r, field=1)
plot(r)
请注意,您正在将非常小的多边形栅格化为大型栅格单元格。如果多边形覆盖单元的中心(即,假设多边形覆盖多个单元的情况),则将多边形视为“内部”。因此,对于这些数据,您需要使用更高的分辨率(然后可能会聚合结果)。或者,您可以栅格化多边形质心。
但是上述情况都不是真的相关,因为你这样做都是倒退的。多边形显然来自栅格(看起来它们有多块),并且栅格在您指向的数据集中可用!
因此,不要光栅化,请执行:
x <- raster('Global_Threats/Integrated_Future/rf_int_2030')
x
#class : RasterLayer
#dimensions : 25456, 80150, 2040298400 (nrow, ncol, ncell)
#resolution : 500, 500 (x, y)
#extent : -20037508, 20037492, -6363885, 6364115 (xmin, xmax, ymin, ymax)
#coord. ref. : NA
#data source : C:\temp\Global_Threats\Integrated_Future\rf_int_2030
#names : rf_int_2030
#values : 0, 2000 (min, max)
#attributes :
# ID COUNT THREAT_TXT
# 0 80971 Low
# 100 343535 Medium
# 1000 322231 High
# 1500 168518 Very High
# 2000 83598 Critical
这里绘制了巴拉望岛的一部分:
e <- extent(c(-8990636, -8929268, 1182946, 1256938))
plot(x, ext=e)
plot(p, add=TRUE)
如果您需要较低的分辨率,请参阅raster::aggregate
。有关其他坐标参照系,请参阅raster::projectRaster
。