3

我正在构建一个工作流,用于将多几何 KML 文件读入 R。这是我的工作地图,带有点和路径几何。(可重现的)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 地球的需求,但当然可以。非常感谢您的帮助。


附录:

我现在正在考虑使用 XML 来解析它。数据似乎在标签内结构化。我得:

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

但这似乎没有任何用处。

4

2 回答 2

3

此 R 函数应从从 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 文件的路径。

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

于 2016-12-26T19:54:44.153 回答
0

这个R-sig-geo 线程也提到了。似乎解决这个问题的唯一方法是编写一个自定义函数来将 KML 解析为 XML,并从各自的几何图形构建单独的 spatialPoints 和 spatialPolygons 对象。总的来说,尝试坚持使用单一几何 KML 可能更有效。

于 2013-10-24T15:48:37.290 回答