用作as.linnet对象的数据帧对象

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

我有一个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时,它仍然给出相同的错误。

有帮助吗?

spatial spatstat
1个回答
0
投票
这是因为线坐标数据包括重复的顶点(即,坐标数据的两个连续行是相同的)。

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

尽管该消息说这已被'忽略'(即删除了重复的顶点),但是用于处理标记的代码未能处理此问题,它给出了第二个警告并放弃了。

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

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