나는 도로의 큰 (~ 70MB) 모양 파일을 가지고 있으며 이것을 각 셀의 도로 밀도를 가진 래스터로 변환하려고합니다. 이상적으로 필요한 경우 R에서 GDAL 명령 줄 도구와 함께이 작업을 수행하고 싶습니다.
내 초기 접근 방식은 이 스레드에 따라 각 셀의 선분 길이를 직접 계산하는 것이 었습니다 . 이것은 원하는 결과를 낳지 만, 모양 파일이 내 것보다 훨씬 작은 경우에도 상당히 느립니다. 올바른 셀 값이 명백한 매우 간단한 예는 다음과 같습니다.
require(sp)
require(raster)
require(rgeos)
require(RColorBrewer)
# Create some sample lines
l1 <- Lines(Line(cbind(c(0,1),c(.25,0.25))), ID="a")
l2 <- Lines(Line(cbind(c(0.25,0.25),c(0,1))), ID="b")
sl <- SpatialLines(list(l1,l2))
# Function to calculate lengths of lines in given raster cell
lengthInCell <- function(i, r, l) {
r[i] <- 1
rpoly <- rasterToPolygons(r, na.rm=T)
lc <- crop(l, rpoly)
if (!is.null(lc)) {
return(gLength(lc))
} else {
return(0)
}
}
# Make template
rLength <- raster(extent(sl), res=0.5)
# Calculate lengths
lengths <- sapply(1:ncell(rLength), lengthInCell, rLength, sl)
rLength[] <- lengths
# Plot results
spplot(rLength, scales = list(draw=TRUE), xlab="x", ylab="y",
col.regions=colorRampPalette(brewer.pal(9, "YlOrRd")),
sp.layout=list("sp.lines", sl),
par.settings=list(fontsize=list(text=15)))
round(as.matrix(rLength),3)
#### Results
[,1] [,2]
[1,] 0.5 0.0
[2,] 1.0 0.5
좋아 보이지만 확장 할 수 없습니다! 다른 몇 가지 질문 spatstat::density.psp()
에서이 작업에이 기능이 권장되었습니다. 이 함수는 커널 밀도 접근 방식을 사용합니다. 나는 그것을 구현할 수 있고 위의 접근법보다 빠르지 만 매개 변수를 선택하거나 결과를 해석하는 방법이 확실하지 않습니다. 다음은 위의 예입니다 density.psp()
.
require(spatstat)
require(maptools)
# Convert SpatialLines to psp object using maptools library
pspSl <- as.psp(sl)
# Kernel density, sigma chosen more or less arbitrarily
d <- density(pspSl, sigma=0.01, eps=0.5)
# Convert to raster
rKernDensity <- raster(d)
# Values:
round(as.matrix(rKernDensity),3)
#### Results
[,1] [,2]
[1,] 0.100 0.0
[2,] 0.201 0.1
커널 접근 방식이 셀 당 길이가 아닌 밀도를 계산하는 경우가 있다고 생각하여 변환했습니다.
# Convert from density to length per cell for comparison
rKernLength <- rKernDensity * res(rKernDensity)[1] * res(rKernDensity)[2]
round(as.matrix(rKernLength),3)
#### Results
[,1] [,2]
[1,] 0.025 0.000
[2,] 0.050 0.025
그러나 어느 경우에도 커널 접근 방식은 위의 더 직접적인 접근 방식과 거의 일치합니다.
그래서 내 질문은 :
density.psp
함수 의 출력을 어떻게 해석 할 수 있습니까? 단위는 무엇입니까?- 결과가 위의보다 직접적이고 직관적 인 접근 방식과 일치하도록
sigma
매개 변수를 어떻게 선택할 수density.psp
있습니까? - 보너스 : 커널 라인 밀도는 실제로 무엇입니까? 이러한 접근 방식이 포인트에서 어떻게 작동하는지 이해하지만 그것이 어떻게 선으로 확장되는지는 알지 못합니다.