将KML文件读入R

时间:2013-10-21 14:46:08

标签: r xml-parsing geospatial kml

我正在构建一个工作流程,用于将多个几何KML文件读入R.这是我的working map,具有点和路径几何。 (可重现的)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地球中点击kml对象列表中的路径条目,选择'复制',粘贴到文本编辑器并保存为KML。这将在R中打开:

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

但我还没有实现点数据的工作流程,包括点标签和注释。最好的解决方案是阅读原始的KML并否定对Google Earth的需求,但当然无论有什么用。非常感谢您的帮助。


Appendum:

我现在正在使用XML来解析它。数据似乎是在标签内构建的。我必须:

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

但这似乎没有任何用处。

2 个答案:

答案 0 :(得分:3)

This R function应从Google地图导出的KML中提取地标信息(名称,说明和点坐标)。

它适用于我手头的两张地图,并支持名称和描述中的NA值(这解释了为什么内部get_field函数被编码的原因)。

非常欢迎改进。

添加。我添加了一个处理多边形的函数。该代码现在允许您在

中绘制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文件的路径。

警告:不支持多种几何图形(例如带孔的多边形)。

答案 1 :(得分:0)

R-sig-geo thread也指。似乎解决这个问题的唯一方法是编写一个自定义函数来将KML解析为XML,并从相应的几何中构建单独的spatialPoints和spatialPolygons对象。总的来说,尝试坚持单几何KML可能更有效..