R语言空间数据处理笔记—矢量-栅格数据交互

1. 裁剪栅格(cropping)

  • 统一投影坐标系
vector = st_transform(vector,projection(raster))
  • 设定矢量数据范围外栅格数据的值为NA
raster_masked= mask(raster,as(vector,'Spatial')

2. 栅格数据提取

vector$feature=raster::extract(raster,as(vector,'Spatial')
vector$buffer_feature=raster::extract(raster,vector,dist=n)#提取点的n米缓冲区内栅格数值
  • 线
line_list=raster::extrac(raster,as(line,'Spatial'),along=T,cellnumbers=T)
#返回的对象是一个包裹在list对象里的矩阵,矩阵共两列,一列为raster对象的cellID,另一列为每个cell的值
line_df=map_dfr(zion_line$elev,as_data_frame,.id='ID') #提取栅格值矩阵
line_coords = xyFromCell(raster, line_df$cell) #根据cellID提取每个栅格的坐标
line_df$dist = c(0, cumsum(geosphere::distGeo(line_coords))) #计算累积点距离
最后形成的结果可以用来绘制沿线高程图。
polygon_raster_values=raster::extract(raster,as(polygon,'Spatial'),df=T)#返回对象为一个数据框,ID列为面对象的ID,数值列为ID所对应的面对象内的栅格值
dplyr::select(polygon_raster_values,ID,levels) %>% 
  gather(key,value,-ID) %>%  group_by(ID,key,value)%>%
  tally() %>% 
  spread(value,n,fill=0)#统计面对象内部不同类型栅格数量

3. 栅格化

首先,建立一个栅格模板

raster_template= raster(extent(vector),resolution,
                 crs=st_crs(vector)$proj4string)

利用栅格模板对sf对象进行栅格化

vector_raster = raster(vector,raster_template,parameter)

raster函数具有很强的灵活性

vector_raster_1= raster(vector,raster_template,field='ID',fun='count'or'sum',etc.)
#field参数选择为每个观测值都各不相同的列,则单个cell的数值如果为1的话,即表示该栅格不空;否则表明该栅格为空,此种类型的地理要素并不存在于此单元格中。
#fun函数为多个汇总函数,包括count\sum\min\max等,对于spatialLine对象,length函数也可以使用

线对象也可以进行栅格化,

line_raster= rasterize (as(line,'Spatial'),raster_template)

raster 函数的问题在于它比较慢,可以用fasterize::fasterize函数取代(不过目前支持面对象的栅格化)。
此外,gdalUtils::gdal_rasterize函数可以处理更多类型的矢量数据,

4 矢量化

  • 点对象
point_vector = rasterToPoints(raster,spatial=T) %>% st_as_sf 
#spatial=T 目的是为了保证转换后的对象是空间对象而非矩阵
  • 线对象
    线对象的矢量化常用于生成等值线。等值线的生成可用的函数主要有raster::rasterToContour,而仅用于等值线可视化的话常用的一些函数主要有basic::contour rasterVis::contourPlot tmap::tm_iso
tm_shape(raster) +tm_raster() +tm_shape(rasterToContour(raster))+tm_iso()
#tmap包的用法似乎比较繁琐
  • 面对象
    常用函数为raster::rasterToPolygons ,栅格值会被存在column 列中。另外一个更为高效的函数是spex:polygonize,且该函数返回对象为sf类型。
    “`

你可能感兴趣的:(R语言,空间数据处理)