Estoy trabajando con grandes archivos .kml (hasta 10 Gb) y necesito una forma eficiente de leerlos en R. Hasta ahora, los he convertido en archivos de forma a través de QGIS y luego de vuelta a R con readShapePoly y readOGR (este último , por cierto, es ~ 1000 más rápido que el anterior). Idealmente, me gustaría cortar la etapa intermedia de QGIS, ya que es engorrosa y lenta.
¿Cómo leer archivos .kml directamente?
Yo veo esto también se puede hacer con readOGR . Desafortunadamente, no puedo ver cómo implementar el ejemplo trabajado (después de una larga preparación del archivo .kml:) xx <- readOGR(paste(td, "cities.kml", sep="/"), "cities")
. Parece que "ciudades" aquí es el nombre de los objetos espaciales.
Roger Bivand admite que "cómo se descubre este nombre no es obvio, ya que el controlador KML en OGR lo necesita para acceder al archivo. Una posibilidad es:
system(paste("ogrinfo", paste(td, "cities.kml", sep="/")), intern=TRUE)
"
Pero esto tampoco funciona para mí. Aquí hay un archivo de prueba .kml para probarlo. Con él en mi directorio de trabajo, readOGR("x.kml", "id")
genera este mensaje de error:
Error in ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv) :
Cannot open layer .
Y system(paste("ogrinfo", "x.kml"), intern=TRUE)
genera:
[1] "Had to open data source read-only." "INFO: Open of `x.kml'"
[3] " using driver `KML' successful." "1: x (3D Polygon)"
, que simplemente no entiendo.
¿Sería getKMLcoordinates
{maptools} una alternativa válida?
También he intentado esto:
tkml <- getKMLcoordinates(kmlfile="x.kml", ignoreAltitude=T)
head(tkml[[1]])
tkml <- SpatialPolygons(tkml,
proj4string=CRS("+init=epsg:3857"))
Las coordenadas se generan correctamente, pero mi intento de convertirlas nuevamente en un objeto poligonal falló con el siguiente mensaje:
Error in SpatialPolygons(tkml, proj4string = CRS("+init=epsg:3857")) :
cannot get a slot ("area") from an object of type "double"