【问题标题】:Create square grids and export them as shapefile or table创建方形网格并将其导出为 shapefile 或表格
【发布时间】:2019-04-03 18:36:55
【问题描述】:

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

首先,我需要导出方形网格,以便将它们导入地球引擎。我对 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 行中的“FRA”替换为“THA”会导致 spTransform 出现错误。

【问题讨论】:

    标签: r geospatial shapefile r-raster rasterizing


    【解决方案1】:

    失败是因为您使用的是 utm zone 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)
    

    【讨论】:

    • 感谢您的回答!你会建议什么方法?上传轮廓,然后在 GEE 中创建方形网格?还是上传大纲、下载图片并在 R 中完成其余的工作?
    • 我不知道你想在 GEE 中完成什么,但不管怎样,这是一个单独的问题
    • 那我开个新的。感谢您的帮助!
    • 附加问题@Robert Hijmans。如果我有一个具有不同投影的 shapefile ("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0") 行 "x
    • 我重新表述我的问题。我认为它失败了,因为如果投影是 longlat,分辨率不是以米为单位。如果我想使用米而不是 utm 投影(为了避免区域问题),该怎么办?
    猜你喜欢
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 2017-04-14
    • 2021-08-15
    • 2014-04-22
    • 2019-06-10
    相关资源
    最近更新 更多