我正在构建一个工作流程,用于将多个几何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")
但这似乎没有任何用处。
答案 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可能更有效..