首页 > 解决方案 > 如何从 density.lpp 绘制特定段

问题描述

我使用 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

在此处输入图像描述

标签: rgeospatialspatialkernel-densityspatstat

解决方案


这是关于spatstat包裹的问题。

的结果density.lpp是 class 的对象linim。对于任何此类对象,您都可以使用它as.data.frame来提取数据。这会为网络上的每个样本点生成一个数据框。对于每个采样点,数据是xc, yc(最近像素中心的坐标)、x,y(网络上采样点的精确坐标)、seg(分段标识符)、tp(沿分段values的相对位置)和(密度值)。如果按seg列拆分数据框,您将获得网络各个段的数据。

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

如果您直接给我发电子邮件,我可以向您展示如何提取内部信息。


推荐阅读