我对 R 有点陌生,尤其是在 R 中使用 GIS,所以我希望我能正确解释这一点。
我想从包 raster 中获取函数 crop (x,y...) 以合并/覆盖(不确定要使用的正确表达式是什么)带有 shapefile 的光栅文件。本质上,shapefile 是瑞典的 5 x 5 公里网格,栅格是瑞典的土地利用栅格。通过使用裁剪函数,我想得到一个结果,对于 shapefile 中的每个 5x5 平方千米,提供从栅格文件中提取的有关每个正方形中土地利用类型的信息。
但是,当我使用crop,然后从我裁剪的“crop(landuse,ekrut)”(见下面的代码)中写入.csv时,我基本上只是将ekrut(shapefile)作为输出csv文件,没有添加列土地利用栅格指示哪个广场具有哪个土地利用类别。
很抱歉,我不能在这里分享实际的 shapefile,如果它会有所作为,可以从这里下载土地利用数据:http: //gpt.vic-metria.nu/data/land/NMD/NMD2018_basskikt_ogeneraliserad_Sverige_v1_0.zip
这是我到目前为止尝试做的事情
library (raster)
library (rgdal)
library (sp)
这是 GIS 文件的坐标系/投影。每个坐标系都有一个 epsg 代码 ( http://spatialreference.org/ )。
sweref.def <- "+init=epsg:3006"
# read in shapefile
ekrut <- readOGR (dsn = "//storage-al.slu.se/student$/nilc0001/Desktop/Nina/Ekrut",
layer = "ekrut_5x5_flat",
p4s = sweref.def)
ekrut
# class : SpatialPolygonsDataFrame
# features : 19192
# extent : 266333, 921700, 6131565, 7675329 (xmin, xmax, ymin, ymax)
# coord. ref. : +init=epsg:3006 +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs
# variables : 7
# names : AREA, PERIMETER, GGD_, GGD_ID, BK, Bk_num, BK_flat
# min values : 2.5e+07, 20000, 2, 0, 10A 0f, 012 77, 10A0f
# max values : 2.5e+07, 20000, 19208, 19230, 9J 9d, 329 48, 9J9d
#read in raster
landuse <- raster ("nmd2018bas_ogeneraliserad_v1_0.tif")
landuse
# class : RasterLayer
# dimensions : 157992, 71273, 11260563816 (nrow, ncol, ncell)
# resolution : 10, 10 (x, y)
# extent : 208450, 921180, 6091140, 7671060 (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs
# data source : //storage- al.slu.se/student$/nilc0001/Desktop/Nina/landuse/nmd2018bas_ogeneraliserad_v1_0.tif
# names : nmd2018bas_ogeneraliserad_v1_0
# values : 0, 128 (min, max)
# attributes :
# ID COUNT Opacity Klass
# from: 0 5204803484 0
# to : 255 0 0
#first few rows of attribute table of landuse
levels (landuse)
# [[1]]
# ID COUNT Opacity Klass
# 1 0 5204803484 0
# 2 1 0 255
# 3 2 382320369 255 Öppen våtmark
# 4 3 258249590 255 Åkermark
# crop and write csv
landuse.ekrut <- crop (landuse, ekrut)
write.csv (landuse.ekrut,"landuse.ek.csv")
就像我说的那样,当我使用裁剪然后从裁剪的内容中写入.csv 时,我基本上只是将 ekrut(shapefile)作为输出 csv 文件,没有添加土地利用栅格的列,指示哪个广场具有哪个土地利用类别。
我想要一个 .csv,对于每个广场(其中有 19 191 个),它可以为我提供有关该广场存在何种土地利用类型的信息。
如果有更好的方法来解决这个问题,请指出。我希望我的解释很清楚!
谢谢。