创建正方形网格并将其导出为shapefile或表格

时间:2019-04-03 18:36:56

标签: r geospatial shapefile r-raster rasterizing

我想使用Google Earth Engine来提取某些国家/地区的数据。我需要正方形网格形式的数据,因此我想为某个国家/地区创建那些正方形网格,将它们添加到shapefile中,然后将shapefile导入到Earth Engine中。我已经找到了一些创建正方形网格(Create a grid inside a shapefile)的代码,但是现在我遇到了两个问题。

首先,我需要导出正方形网格,以便可以将其导入到Earth Engine中。我对shapefile的替代方案非常开放。

第二,后续代码适用于某些国家(例如法国),但不适用于其他国家(例如泰国)。

library(raster)
shp = getData(country = "FRA", level = 0)

shp = spTransform(shp, CRSobj = "+proj=utm +zone=32 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0")
plot(shp)

cs = c(10000, 10000)
grdpts = makegrid(shp, cellsize = cs)

spgrd = SpatialPoints(grdpts, proj4string = CRS(proj4string(shp)))

spgrdWithin = SpatialPixels(spgrd[shp,])
plot(spgrdWithin, add = T)

在第2行中用“ THA”替换“ FRA”会导致 spTransform 错误。

1 个答案:

答案 0 :(得分:0)

失败,因为您正在使用utm区域32。您需要根据国家/地区的经度使用该区域。您可以看到他们here

您可以使用ceiling((longitude+180)/6)

自动查找区域
library(raster)
s <- getData(country = "FRA", level = 0)

获取质心。在这种情况下,您可以

centr <- coordinates(s)

如果有多个多边形,则可以执行以下操作

centr <- apply(coordinates(s), 2, mean)

计算UTM区域。 (请注意,您在法国有32个,这不好)

zone <- ceiling((centr[1] + 180)/6)
zone
#[1] 31

然后像这样使用它

crs <- paste0("+proj=utm +datum=WGS84 +unit=m +zone=", zone)
st <- spTransform(s, crs)

对于泰国,您会得到

s <- getData(country = "THA", level = 0)
centr <- apply(coordinates(s), 2, mean)
zone <- ceiling((centr[1] + 180)/6)
zone
#[1] 47

但是,这不是不是适用于所有国家的方法。 UTM区域的宽度为6度,许多国家跨越多个区域(俄罗斯采用28个区域作为蛋糕)。因此,根据您的目标,您可能需要使用其他坐标参考系统(crs)。

然后,获取正方形多边形的另一种方法是创建一个s范围和选择分辨率的RasterLayer。但是我怀疑这是从GEE中获取数据的最佳方法。我建议改为上传国家/地区概述。

r <- raster(st, res=10000)
r <- rasterize(st, r, 1)
x <- as(r, "SpatialPolygons")

# write to file
shapefile(x, "test.shp")

# view
plot(x)

enter image description here