R中栅格图层上的点数

问题描述 投票:0回答:1

我的地图上有一定数量的点。我要(1)计算落入栅格图层内的点数,然后(2)将这些点提取到数据框中。

这是我所做的:

# Packages
library(raster)
library(ggplot2)
library(maptools)
library(tidyverse)
library(dplyr)
library(sp)


# Transform tree ring kml to dataframe
zz<-getKMLcoordinates('treering.kml', ignoreAltitude=TRUE)
l<-as.data.frame(zz)
l<-t(l)

tree <-SpatialPointsDataFrame(l, l,
                                  proj4string = CRS(" +proj=longlat +ellps=WGS84 +datum=WGS84 
                                  +no_defs +towgs84=0,0,0"))


# Get world map
data(wrld_simpl)

# Transform World to raster
r <- raster(wrld_simpl, res = 1)
wrld_r <- rasterize(wrld_simpl, r)

# Import permafrost layer to raster
dist1<-raster("PZI.flt")


# Set CRS
dist1 <- projectRaster(from = dist1, crs = CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs 
+towgs84=0,0,0"))

# Change colours

micolor <- rev(rainbow(12, alpha = 0.35))
transp <- rainbow(12, alpha = 0)
micolor[1:3] <- transp[1]


# Plot all
plot(wrld_r, col = "lightgrey")
plot(dist1, add=TRUE, legend = F, col = micolor)
plot(tree, add=T, pch = 20, col='black', cex=0.2)

我想计算和提取位于地图彩色部分的黑点enter image description here

r geospatial kml r-raster
1个回答
1
投票

[First raster::projectRaster]不会“设置”投影,而是在进行转换和重新采样后重新投影栅格。鉴于此的计算要求,使用sp::spTransform重新投影点数据要快得多。一旦数据位于同一投影空间中,就可以使用raster::extract提取光栅值。栅格外或无数据(NA)区域中的值将被分配NA值。您可以使用带有which的简单NA索引来删除这些观察值。

看来您的数据在永久冻土之外可能具有恒定值。一旦确定了该值是什么(例如0),您也可以删除这些点。这是一个可行的示例。首先,我们添加软件包并创建一些与您的数据类似的示例数据。

library(sp)
library(raster)

dist1 <- raster(nrow=20, ncol=20)
  dist1[] <- sample(1:10, ncell(dist1), replace=TRUE)
    dist1[200:400] <- 0

trees <- sampleRandom(dist1, 100, sp=TRUE)

plot(dist1)
  plot(trees,pch=20,col="red",add=TRUE)

现在,我们提取栅格值并查看点对象的尺寸(请注意,我不必在raster::extract函数中使用sp = TRUE参数)。

trees@data <- data.frame(trees@data, dist1 = extract(dist1, trees))
  dim(trees)

现在我们创建一个行索引,指示哪些行包含零,请确保已标识行(使用if语句),然后将其删除。再次查看对象尺寸,我们可以看到从原始点数据中删除了多少点。

( idx <- which(trees$dist1 %in% 0) )
  if(length(idx) > 0) trees <- trees[-idx,]
    dim(trees)
© www.soinside.com 2019 - 2024. All rights reserved.