【问题标题】:Convert SpatialLinesDataframe with multiple line elements to KML in R将具有多个线元素的 SpatialLinesDataframe 转换为 R 中的 KML
【发布时间】:2012-12-21 22:21:17
【问题描述】:

我尝试将具有多行的空间对象(从 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")

【问题讨论】:

    标签: r openstreetmap kml maptools osmar


    【解决方案1】:

    正如?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 文件,每个文件对应sp_salzach 中的每个 Lines 对象,尽管我不确定这是否是您想要的。

    编辑:

    如果您不在每次迭代中调整名称,您会将所有行放在一个文件中,至少如果用 google earth 打开它似乎可以工作,即:

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

    【讨论】:

      猜你喜欢
      • 2014-08-08
      • 2022-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      相关资源
      最近更新 更多