我正在处理巨大的.kml文件(最大10 Gb),并且需要一种有效的方法将它们读入R。到目前为止,我一直在通过QGIS将它们转换为shapefile,然后使用readShapePoly和readOGR(后者,顺便说一下,比前者快1000左右)。理想情况下,我想取消QGIS的中间阶段,因为它既麻烦又缓慢。
如何直接读取.kml文件?
我看到这也可以使用readOGR完成。不幸的是,我看不到如何实现该示例(经过漫长的.kml文件准备:)xx <- readOGR(paste(td, "cities.kml", sep="/"), "cities")
。这里的“城市”似乎是空间物体的名称。
罗杰·比万德(Roger Bivand)承认:“人们如何发现这个名字并不明显,因为OGR中的KML驱动程序需要它来访问文件。一种可能性是:
system(paste("ogrinfo", paste(td, "cities.kml", sep="/")), intern=TRUE)
”
但这对我也不起作用。这是一个测试的.kml文件,可以尝试使用。在我的工作目录中,readOGR("x.kml", "id")
生成以下错误消息:
Error in ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv) :
Cannot open layer .
并system(paste("ogrinfo", "x.kml"), intern=TRUE)
生成:
[1] "Had to open data source read-only." "INFO: Open of `x.kml'"
[3] " using driver `KML' successful." "1: x (3D Polygon)"
,我根本不理解。
将getKMLcoordinates
{} maptools是一个有效的替代方案?
我也尝试过这个:
tkml <- getKMLcoordinates(kmlfile="x.kml", ignoreAltitude=T)
head(tkml[[1]])
tkml <- SpatialPolygons(tkml,
proj4string=CRS("+init=epsg:3857"))
坐标正确生成,但是我尝试将其转换回多边形对象的尝试失败,并显示以下消息:
Error in SpatialPolygons(tkml, proj4string = CRS("+init=epsg:3857")) :
cannot get a slot ("area") from an object of type "double"