【发布时间】:2018-05-09 09:13:55
【问题描述】:
我有TIF 格式的土地覆盖图,大概用于计算德国的区域加权年平均温度。我从这里 (direct download link of land coverage map for Europe) 下载了这个土地覆盖地图数据。特别是,我打算提取城市、农业区的土地/土壤覆盖数据,反之亦然。在我的第一步中,我使用raster 包导入了这些土地覆盖数据。下面是我的 R 脚本:
library(raster)
library(R.utils)
library(maptools)
url = "https://cidportal.jrc.ec.europa.eu/ftp/jrc-opendata/LUISA/PrimaryOutput/Europe/REF-2014/JRC_LUISA_Input_Corine_land_cover_2006_r_ref_2014.zip"
download.file(url, basename(url))
gunzip(basename(url))
rname <- list.files(getwd(), "tif$")
land_cover = raster::brick("~/LUISA_CLC_land_coverage/clc06_r.tif")
到目前为止,我可以在 R 中的RasterBrick 对象中导入原始土地覆盖图。请注意,原始地图覆盖了整个欧洲,所以我
必须裁剪我只感兴趣的区域。为此,我使用maptools 和raster 包来裁剪地图。下面是 R 脚本:
data(wrld_simpl)
germany <- wrld_simpl[wrld_simpl@data$NAME == "Germany",]
germany <- spTransform(germany, CRSobj = land_cover@crs)
germany_land <- crop(land_cover, germany)
但是,我假设RasterBrick 对象中的这张裁剪后的土地覆盖图最好位于网格shapefile 中,具有非常高的分辨率,但它是如何实现的?任何的想法?
提出这个问题的要点是我需要检索城市、农业区的所有土地/土壤覆盖数据,并将这些信息与相应的德国 NUTS-s 级别 shapefile (download link of Germany level 3 shapefile) 匹配。
我真的不知道如何利用这张土地覆盖地图中的数据来计算面积加权的年平均温度。或许,一种可能的方法是检索城市的土地/土壤覆盖率、农业区数据,然后从德国 NUTS-3 级别的 shapefile 中找到匹配项。
这里是如何获取德国的 NUTS-3 shapefile(R 脚本如何在 R 中获取德国的 NUTS-3 地区的 shapefile):
library(maptools)
library(rgdal)
library(R.utils)
url = "http://ec.europa.eu/eurostat/cache/GISCO/distribution/v2/nuts/download/ref-nuts-2013-03m.shp.zip"
download.file(url, basename(url))
gunzip(basename(url))
getwd()
setwd("~/ref-nuts-2013-03m.shp/")
list.files(pattern = 'NUTS_RG_03M_2013.*.shp$')
eu <- readOGR(dsn = getwd(), layer ="NUTS_RG_03M_2013_4326_LEVL_2")
Germany_NUTS3 <- eu[eu@data$CNTR_CODE == "DE",]
所以使用这个 Gernamny 的 NUTS-3 shapefile Germany_NUTS3,我想提取城市、农业区的所有土地/土壤覆盖数据,反之亦然。
如果从RasterBrick 的土地覆盖图中提取数据,我如何在 R 中实现这一点?那可行吗?任何有效的解决方法来完成这项工作?任何的想法?
【问题讨论】:
-
什么样的信息?土地覆盖数据只是一个为每个像素分配一个类的栅格 - 所以从我的脑海中,您可以提取 shapefile 中每个要素的像素并计算每个类的百分比
-
最终,这将取决于您的目标是什么……我只是假设您有 NUTS 区域和土地覆盖栅格,这将是一种将信息汇总到每个区域的自然方式。因此,假设其中一个区域被 1000 个像素覆盖,如果其中 100 个被标记为“裸土”,您可以争辩说该区域的 10% 被裸土覆盖(当然,这个结论将取决于您的质量土地覆盖数据,像素越多,结论越稳健)
-
在光栅中,每个像素都有一个不同的类......因此您可以提取每个多边形的所有像素(查看
raster包的extract函数)。这可以让您了解每个多边形内土地覆盖类别的分布。此外,您可以通过像素计数等方法来估计面积,这与光栅的分辨率直接相关……但这正在变成理论讨论,而 SO 并不是真正适合这样做的地方。我建议你阅读一些文献和谷歌搜索(例如从土地覆盖分类估计土地覆盖面积)
标签: r geospatial raster data-manipulation