我根据带领动物的GPS位置制作了一个参考网格,单元格为50x50m。我想在ArcGIS中进行等效的空间连接,并计算每个单元格中的点数。
我使用SpatialPointsDataFrame对象创建了一个参考网格(数据框已经使用UTM坐标系投影)
RESO <- 50 # grid resolution (m)
BUFF <- 500 # grid extent (m) (buffer around location extremes)
XMIN <- RESO*(round(((min(dat.spdf$Longitude)-BUFF)/RESO),0))
YMIN <- RESO*(round(((min(dat.spdf$Latitude)-BUFF)/RESO),0))
XMAX <- XMIN+RESO*(round(((max(dat.spdf$Longitude)+BUFF-XMIN)/RESO),0))
YMAX <- YMIN+RESO*(round(((max(dat.spdf$Latitude)+BUFF-YMIN)/RESO),0))
NRW <- ((YMAX-YMIN)/RESO)
NCL <- ((XMAX-XMIN)/RESO)
refgrid<-raster(nrows=NRW, ncols=NCL, xmn=XMIN, xmx=XMAX, ymn=YMIN, ymx=YMAX)
refgrid<-as(refgrid,"SpatialPixels")
确保我的网格与SpatialPoints在同一个投影中:
proj4string(refgrid)=proj4string(dat.sp.utm) #makes the grid the same CRS as point
adehabitatMA中的 count.point
函数似乎就是可以实现这一功能的函数
cp<- count.points(dat.spdf, refgrid)
但是我收到了这个错误:
Error in w[[1]] : no [[ method for object without attributes
这不是实现目标的正确途径吗?或者我该如何解决此错误?或者over
函数(sp包)是否更合适?
从SpatialPointsDataFrame(dat.spdf)输出
dput(head(dat.spdf, 20))
structure(list(Latitude = c(5.4118432, 5.4118815, 5.4115713,
5.4111541, 5.4087853, 5.4083702, 5.4082527, 5.4078161, 5.4075528,
5.407321, 5.4070598, 5.4064237, 5.4070621, 5.4070555, 5.4065127,
5.4065134, 5.4064872, 5.4056724, 5.4038751, 5.4024223), Longitude = c(118.0225467,
118.0222841, 118.0211875, 118.0208637, 118.0205413, 118.0206064,
118.0204101, 118.0209272, 118.0213827, 118.0214189, 118.0217748,
118.0223343, 118.0227079, 118.0226916, 118.0220733, 118.02218,
118.0221843, 118.0223316, 118.0198153, 118.0196021), DayNo = c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 2L, 2L)), .Names = c("Latitude", "Longitude", "DayNo"), row.names = c(1L,
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 15L, 16L,
17L, 18L, 19L, 20L, 21L), class = "data.frame")
总结:
summary(dat.spdf)
Object of class SpatialPointsDataFrame
Coordinates:
min max
Longitude 610361.0 613575.5
Latitude 596583.5 599385.2
Is projected: TRUE
proj4string : [+proj=utm +zone=50 +ellps=WGS84]
Number of points: 5078
Data attributes:
Latitude Longitude DayNo
Min. :5.396 Min. :118 Min. : 1.0
1st Qu.:5.404 1st Qu.:118 1st Qu.: 92.0
Median :5.406 Median :118 Median :183.0
Mean :5.407 Mean :118 Mean :182.6
3rd Qu.:5.408 3rd Qu.:118 3rd Qu.:273.0
Max. :5.422 Max. :118 Max. :364.0
答案 0 :(得分:7)
rasterize功能可以为您完成:
library(raster)
r <- raster(xmn=0, ymn=0, xmx=10, ymx=10, res=1)
xy <- spsample(as(extent(r), 'SpatialPolygons'), 100, 'random')
x <- rasterize(xy, r, fun='count')
答案 1 :(得分:4)
这是一种方法,首先列出由点表示的单元格数的频率,然后将这些频率分配给单元格&#39;值,最后提取细胞&#39;坐标和值。
library(raster)
r <- raster(xmn=0, ymn=0, xmx=10, ymx=10, res=1)
r[] <- 0
xy <- spsample(as(extent(r), 'SpatialPolygons'), 100, 'random')
tab <- table(cellFromXY(r, xy))
r[as.numeric(names(tab))] <- tab
现在我们有这样的事情:
plot(r)
points(xy, pch=20)
我们可以提取细胞&#39;与coordinates()
坐标及其值values(r)
或r[]
:
d <- data.frame(coordinates(r), count=r[])
head(d)
## x y count
## 1 0.5 9.5 0
## 2 1.5 9.5 1
## 3 2.5 9.5 1
## 4 3.5 9.5 3
## 5 4.5 9.5 2
## 6 5.5 9.5 3