Преобразовать SpatialLinesDataframe с несколькими линейными элементами в KML в R
Я пытаюсь преобразовать пространственный объект (река, извлеченная из OSM) с несколькими строками в KML. Для объекта с одной линией это легко с kmlLine. Однако с несколькими строками следующий подход не работает, и мои попытки адаптировать пример из документации оказались тщетными:
# get OSM data:
library(osmar)
library(maptools)
salzach <- get_osm(relation(408582), full = T)
sp_salzach <- as_sp(salzach, what = "lines")
# convert to KML:
kmlLine(sp_salzach, "salzach.kml", lwd = 3, col = "blue", name = "Salzach")
Warning:
In kmlLine(sp_salzach, "salzach.kml", lwd = 3, col = "blue", name = "Salzach") :
Only the first Lines object with the ID '23633534' is taken from 'obj'
# shell.exec("salzach.kml")
1 ответ
Как говорится в деталях ?kmlLine
, если вы предоставите spatialLinesDataFrame
в качестве первого аргумента, он будет использовать только первый элемент spatialLinesDataFrame
объект. поскольку
sp_salzach@data$id[1]
[1] 23633534
это объект Lines с указанным выше идентификатором, поэтому предупреждение. sp_salzach
содержит 74 строки объектов, а не 1. Если вы хотите применить kmlLines
для каждой из этих строк вам нужно будет сделать что-нибудь. как это:
for( i in seq_along(sp_salzach) ) {
kmlLine(sp_salzach@lines[[i]], kmlfile = paste0("salzach", i, ".kml"),
lwd = 3, col = "blue", name = paste0("Salzach", i))
}
Это создаст 74 .kml
файлы в вашем рабочем каталоге, по одному для каждого объекта Lines в sp_salzach
Хотя я не уверен, что это то, что вы хотите.
РЕДАКТИРОВАТЬ:
Если вы не адаптируете имя в каждой итерации, вы получите все строки в одном файле, по крайней мере, если открыть его с помощью Google Планета Земля, это, кажется, работает, то есть:
for( i in seq_along(sp_salzach) ) {
kmlLine(sp_salzach@lines[[i]], kmlfile = "salzach.kml",
lwd = 3, col = "blue", name = "Salzach")
}