如何从density.lpp绘制特定段

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

我使用density.lpp进行内核密度估计。我想在其中选择特定的细分,然后通过所选细分来绘制估算值。例如,我有一条道路,它是两个路段的组合。每个段的长度不同,所以我不知道每个段被除以多少。

这里是顶点和路段ID的位置。https://www.dropbox.com/s/fmuul0b6lus279c/R.csv?dl=0

这是我用来在网络上创建空间线数据帧和随机点并获得密度估计的代码。

是否有办法知道每个段除以多少?或者,如果要绘制所选段的位置与估算值,该怎么办?使用dimyx = 100可以创建199个估计点,但我不知道其中有多少个属于Swid = 1或Swid = 2。

我使用的一种方法是,使用gDistance可以很好地解决此问题,因为这些段连接到一个方向,但是,当有4种连接方式时,某些lambda值连接到另一个不属于该段的段。我提供图片并圈出2个点,当我使用gDistance时,这些点连接到其他线段。有任何想法吗?

R=read.csv("R.csv",header=T,sep=",")
R2.1=dplyr::select(R, X01,Y01,Swid)

coordinates(R2.1) = c("X01", "Y01")
proj4string(R2.1)=CRS("+proj=utm +zone=17 +datum=NAD83 +units=m +no_defs +ellps=GRS80 +towgs84=0,0,0")
plot(R2.1,main="nodes on the road")


## 
LineXX <- lapply(split(R2.1, R2.1$Swid), function(x) Lines(list(Line(coordinates(x))), x$Swid[1L]))

## 
linesXY <- SpatialLines(LineXX)
data <- data.frame(Swid = unique(R2.1$Swid))
rownames(data) <- data$Swid
lxy <- SpatialLinesDataFrame(linesXY, data)
proj4string(lxy)=proj4string(trtrtt.original)

W.1=as.linnet.SpatialLines(lxy)

Rand1=runiflpp(250, W.1) 
Rand1XY=coords(Rand1)[,1:2]

W2=owin(xrange=c(142751.98, 214311.26), yrange=c(3353111, 3399329))

Trpp=ppp(x=Rand1XY$x, y=Rand1XY$y, window=W2)    ### planar point object
L.orig=lpp(Trpp,W.1) # discrete 
plot(L.orig,main="Original with accidents")


S1=bw.scott(L.orig)[1]  # in case to change bandwitdh
Try274=density(L.orig,S1,distance="path",continuous=TRUE,dimyx=100)  
L=as.linnet(L.orig)
length(Try274[!is.na(Try274$v)])
[1] 199

enter image description here

r geospatial spatial kernel-density spatstat
1个回答
0
投票

这是关于spatstat包装的问题。

density.lpp的结果是类linim的对象。对于任何此类对象,可以使用as.data.frame提取数据。这将为网络上的每个采样点生成一个带有一行的数据帧。对于每个采样点,数据分别为xc, yc(最近像素中心的坐标),x,y(网络上采样点的精确坐标),seg(段的标识符),tp(沿段的相对位置)和values(浓度值)。如果将数据帧除以seg列,则将获得网络单个网段的数据。

但是,似乎您可能需要有关density.lpp内部工作的信息。为了在计算阶段达到足够的精度,density.lpp将每个网络段细分为许多短段(使用复杂的规则集)。当最终结果离散化为linim对象并返回时,此信息丢失。属性"dx"报告在计算阶段中使用的短段的长度,仅此而已。

如果您直接给我发送电子邮件,我可以告诉您如何提取内部信息。

© www.soinside.com 2019 - 2024. All rights reserved.