объект фрейма данных для использования в качестве объекта as.linnet

У меня есть 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, он все равно дает ту же ошибку.

Любая помощь?

1 ответ

Решение

Это происходит из-за того, что данные линейных координат включают повторяющиеся вершины (т. Е. Две последовательные строки координатных данных идентичны).

Есть предупреждающее сообщение о "присоединении вершины к самой себе", что является важным намеком.

Хотя в сообщении говорится, что это было "проигнорировано" (т. Е. Повторяющиеся вершины были удалены), код для обработки меток не справился с этим, выдает второе предупреждение и отказывается.

Я напишу исправление для as.linnet.SpatialLinesдля обработки повторяющихся вершин. Вы все равно получите предупреждение!

PS: исправление дляmaptools::as.linnet.SpatialLines был передан разработчикам maptools и я ожидаю, что он будет включен в следующий выпуск.

Другие вопросы по тегам