spatial - 用作 as.linnet 对象的数据框对象

标签 spatial spatstat

我有一个 data.frame 对象,我可以轻松地将其转换为 spatialpointdataframe 然后将其转换为 spatiallinesdataframe 但当我尝试覆盖到 as.linnet 它不读取标记

         X       Y roadID
1 177321.3 3378163      1
2 177321.4 3378168      1
3 177321.4 3378168      1
4 177321.5 3378177      1
5 177321.5 3378186      1
6 177321.5 3378195      1

然后我将此 data.frame 转换为 SpatialPointsDataFrame

coordinates(roaDF1) <- c("X","Y")
proj4string(roaDF1)=proj4string(trtrtt)

class       : SpatialPointsDataFrame 
features    : 100412 
extent      : 143516.4, 213981, 3353367, 3399153  (xmin, xmax, ymin, ymax)
crs         : +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 
variables   : 1
names       : roadID 
min values  :      1 
max values  :    347 

然后使用SpatialPointsDataFrame转换一个SpatialLinesDataFrame(在网上找到了这段代码)

LineXX <- lapply(split(roaDF1, roaDF1$roadID), function(x) Lines(list(Line(coordinates(x))), x$roadID[1L]))

linesXY <- SpatialLines(LineXX)
data <- data.frame(roadID = unique(roaDF1$roadID))
rownames(data) <- data$roadID
lxy <- SpatialLinesDataFrame(linesXY, data)
proj4string(lxy)=proj4string(trtrtt)

现在lxy看起来像这样

> lxy
class       : SpatialLinesDataFrame 
features    : 347 
extent      : 143516.4, 213981, 3353367, 3399153  (xmin, xmax, ymin, ymax)
crs         : +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 
variables   : 1
names       : roadID 
min values  :      1 
max values  :    347 

最后我想将这个 lxy 与 linnet 对象协调一致

> W3.orig=as.linnet(lxy)
Warning messages:
1: In spatstat::linnet(vertices = V, edges = edges, sparse = TRUE) :
  edge list should not join a vertex to itself; ignored
2: In as.linnet.SpatialLines(lxy) :
  Internal error: could not map data frame to lines

这并不是因为 roaDF1 有 100421 个特征,当我将其变为 20K 时,它仍然给出相同的错误。

有什么帮助吗?

最佳答案

发生这种情况是因为线坐标数据包含重复的顶点(即坐标数据的两个连续行是相同的)。

有一条关于“将顶点连接到自身”的警告消息,这是一个重要的提示。

虽然消息说这是“被忽略”(即重复的顶点被删除),但处理标记的代码无法处理这个问题,它给出了第二次警告并放弃。

我将为 as.linnet.SpatialLines 编写一个修复程序来处理重复的顶点。您仍然会收到警告!

PS:maptools::as.linnet.SpatialLines 的修复已提交给 maptools 的维护者,我希望它会包含在下一个版本中。

关于spatial - 用作 as.linnet 对象的数据框对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61286168/

相关文章:

hibernate - Jackson JSON View 与几何

r - 导致对象消失的函数

r - 计算宽数据框中每对坐标之间的距离

python - python中基于geo查询cloudant数据库的建议

R包spatstat : How to use point process model covariate as factor starting with shape file

R (spatstat) : Built-In Functions Not Evaluating to Desired Limit

R - Spatstat - 使用数据表按 ID 搜索最近邻

r - 通过采用 2x2 空间平均值将 data.frame 从 8x8 缩小到 4x4

R:如何从网格创建平均值的热图并使用 ggplot 绘制它?