用作 as.linnet 对象的数据框对象
data frame object to use as as.linnet object
我有一个 data.frame 对象,我可以轻松地将其转换为 spatialpointdataframe 然后将其转换为 spatiallinesdataframe 但随后当我试图覆盖到 as.linnet 它不读 marks
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 时它仍然给出同样的错误。
有什么帮助吗?
发生这种情况是因为线坐标数据包含重复的顶点(即连续两行坐标数据相同)。
有一条关于'joining a vertex to itself'的警告信息,这是一个重要的提示。
虽然消息说这是'ignored'(即删除了重复的顶点),但处理标记的代码未能处理此问题,并给出第二次警告并放弃。
我将为 as.linnet.SpatialLines
编写一个修复程序来处理重复的顶点。您仍然会收到警告!
PS: maptools::as.linnet.SpatialLines
的修复已提交给 maptools
的维护者,我希望它会包含在下一个版本。
我有一个 data.frame 对象,我可以轻松地将其转换为 spatialpointdataframe 然后将其转换为 spatiallinesdataframe 但随后当我试图覆盖到 as.linnet 它不读 marks
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 时它仍然给出同样的错误。
有什么帮助吗?
发生这种情况是因为线坐标数据包含重复的顶点(即连续两行坐标数据相同)。
有一条关于'joining a vertex to itself'的警告信息,这是一个重要的提示。
虽然消息说这是'ignored'(即删除了重复的顶点),但处理标记的代码未能处理此问题,并给出第二次警告并放弃。
我将为 as.linnet.SpatialLines
编写一个修复程序来处理重复的顶点。您仍然会收到警告!
PS: maptools::as.linnet.SpatialLines
的修复已提交给 maptools
的维护者,我希望它会包含在下一个版本。