2012-12-21 56 views
4

我嘗試將具有多行的空間對象(從OSM檢索到的河流)轉換爲KML。對於單行的對象,使用kmlLine很容易。然而,多行下面的方法是不工作,我嘗試從the documentation適應的例子是徒勞的:將具有多行元素的SpatialLinesDataframe轉換爲R中的KML

# 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對象的第一個元素。 由於

[email protected]$id[1] 
[1] 23633534 

這是帶有上述ID的Lines對象,因此是警告。 sp_salzach包含74行對象,而不是1.如果要將kmlLines應用於這些行中的每一行,您需要執行某些操作。像這樣:

for(i in seq_along(sp_salzach)) { 

    kmlLine([email protected][[i]], kmlfile = paste0("salzach", i, ".kml"), 
      lwd = 3, col = "blue", name = paste0("Salzach", i)) 

} 

這將創建工作目錄74個.kml文件,每個品系sp_salzach對象,雖然我不知道這是否是你想要的。

編輯:

如果你沒有在每次迭代適應的名字,你在一個文件中的所有行,至少如果打開谷歌地球似乎工作,即:

for(i in seq_along(sp_salzach)) { 

     kmlLine([email protected][[i]], kmlfile = "salzach.kml", 
       lwd = 3, col = "blue", name = "Salzach") 

} 
+0

謝謝 - 幫助! – Kay