gpt4 book ai didi

r - 在 R 中将具有多个线元素的 SpatialLinesDataframe 转换为 KML

转载 作者:行者123 更新时间:2023-12-04 12:08:25 25 4
gpt4 key购买 nike

我尝试将具有多行的空间对象(从 OSM 检索到的河流)转换为 KML。对于具有单行的对象,使用 kmlLine 很容易。但是,对于多行,以下方法不起作用,我尝试改编 the documentation 中的示例徒劳无功:

# 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")

最佳答案

正如 ?kmlLine 的详细信息中所说的那样, 如果您提供 spatialLinesDataFrame作为第一个参数,它将只使用 spatialLinesDataFrame 的第一个元素目的。
自从

 sp_salzach@data$id[1]
[1] 23633534

这是具有上述 ID 的 Lines 对象,因此是警告。 sp_salzach包含 74 个 Lines 对象,而不是 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 earth 打开它似乎可以工作,即:
for( i in seq_along(sp_salzach) ) {

kmlLine(sp_salzach@lines[[i]], kmlfile = "salzach.kml",
lwd = 3, col = "blue", name = "Salzach")

}

关于r - 在 R 中将具有多个线元素的 SpatialLinesDataframe 转换为 KML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13997936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com