2013-10-21 157 views
3

我在構建將多個幾何KML文件讀入R的工作流。這是我的working map,具有點和路徑幾何。的(可重複)R腳本是:將KML文件讀入R

library(rgdal) 
setwd({SPECIFY A FOLDER}) 
download.file("http://www.scribblemaps.com/maps/kml/shackleton.kml", "file.kml") 
(lyr = ogrListLayers("file.kml")) 
map = readOGR ("file.kml", layer=lyr, verbose = TRUE, drop_unsupported_fields=T, dropNULLGeometries=T) 

其失敗:

Error in ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv) : 
    Cannot open layer 

任何想法如何解決此問題?

我已經設法通過創建一個只包含路徑條目的新KML來獲取路徑數據:在Google Earth中,單擊kml對象列表中的路徑條目,選擇'copy',粘貼到文本編輯器並保存作爲KML。這在R打開與:

(lyr = ogrListLayers("path.kml")) 
pathkml = readOGR ("path.kml", layer=lyr, verbose = TRUE, drop_unsupported_fields=T, dropNULLGeometries=T) 
coordinates(pathkml) 

但我還沒有達到該點的數據,其中包括點標籤和註釋的工作流。最好的解決方案會讀取原始的KML,並取消對Google地球的需求,但當然是任何作品。非常感謝您的協助。


Appendum:

我現在考慮使用XML解析這個。數據似乎在標籤內是結構化的。我必須:

require(XML) 
d = xmlParse("shackleton.kml") 
doc = xpathSApply(d, "//Placemark") 

但這似乎沒有什麼用處。

+0

不知道答案,但可以報告在Mac上的錯誤說明略有不同:'多個不兼容的幾何:1:2'。此外,幫助頁面的第二句說:「它只能處理具有一致幾何特徵的圖層」 –

+0

謝謝DWin。我還發布到[R-Sig-Geo](http://r-sig-geo.2731867.n2.nabble.com/Reading-multiple-layer-geometry-KML-into-R-td7584922.html)如果有人可以建議。 – geotheory

回答

0

這個R-sig-geo thread也指。似乎解決這個問題的唯一方法是編寫一個自定義函數來將KML解析爲XML,並根據各個幾何構建個別的spatialPoints和spatialPolygons對象。平衡可能更有效,只是嘗試和堅持單個幾何KMLs ..

1

This R function應提取從Google地圖導出的KML的地標信息(名稱,描述和點座標)。

它適用於我手頭的兩張地圖,並支持名稱和說明中的NA值(這解釋了爲什麼內部的get_field函數編碼的原因)。

改進非常值得歡迎。

Add。我已經添加了一個函數來處理多邊形。現在,該代碼允許您繪製KML點和多邊形作爲

ggplot(kml_points(map), 
     aes(x = longitude, y = latitude)) + 
    geom_polygon(data = kml_polygons(map), fill = "red", alpha = 0.5) + 
    geom_point() 

其中map保存路徑KML文件。

警告:不支持多個幾何圖形(例如帶孔的多邊形)。