【问题标题】:Reading KML files into R将 KML 文件读入 R
【发布时间】:2013-10-30 03:07:13
【问题描述】:

我正在构建一个工作流,用于将多几何 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 地球的需求,但当然可以。非常感谢您的帮助。


附录:

我现在正在研究使用 XML 来解析它。数据似乎在标签内结构化。我必须:

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

但这似乎没有任何用处。

【问题讨论】:

  • 不知道答案但可以报告Mac上的错误解释略有不同:Multiple incompatible geometries: 1:2。此外,帮助页面的第二句话说:“它只能处理具有一致几何特征的图层”
  • 感谢 DWin。我也发帖到R-Sig-Geo,以防有人可以提供建议。

标签: r xml-parsing geospatial kml


【解决方案1】:

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

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

【讨论】:

  • 有计划将此功能添加到软件包中吗?即使它不是那么快,它也可以工作并且不会调用大量的 sig 依赖项。很好,谢谢分享!!
  • 谢谢。如果有问题,会分叉并通知你。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 2011-03-09
    • 2016-01-06
    • 2012-12-26
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多