Sto lavorando con enormi file .kml (fino a 10 Gb) e ho bisogno di un modo efficiente per leggerli in R. Fino ad ora li ho convertiti in file di forma tramite QGIS e poi di nuovo in R con readShapePoly e readOGR (quest'ultimo , a proposito, è ~ 1000 più veloce del primo). Idealmente, vorrei tagliare la fase intermedia di QGIS in quanto ingombrante e lenta.
Come leggere i file .kml direttamente?
Io vedo questo può essere anche essere fatto con readOGR . Sfortunatamente, non riesco a vedere come implementare l'esempio funzionato (dopo una lunga preparazione del file .kml:) xx <- readOGR(paste(td, "cities.kml", sep="/"), "cities")
. Sembra che "città" qui sia il nome degli oggetti spaziali.
Roger Bivand ammette che "Come si scopre questo nome non è ovvio, poiché il driver KML in OGR ne ha bisogno per accedere al file. Una possibilità è:
system(paste("ogrinfo", paste(td, "cities.kml", sep="/")), intern=TRUE)
"
Ma questo non funziona neanche per me. Ecco un file .kml di prova per provarlo. Con esso nella mia directory di lavoro, readOGR("x.kml", "id")
genera questo messaggio di errore:
Error in ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv) :
Cannot open layer .
E 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)"
, che semplicemente non capisco.
Sarebbero getKMLcoordinates
{} MapTools essere una valida alternativa?
Ho anche provato questo:
tkml <- getKMLcoordinates(kmlfile="x.kml", ignoreAltitude=T)
head(tkml[[1]])
tkml <- SpatialPolygons(tkml,
proj4string=CRS("+init=epsg:3857"))
Le coordinate sono generate correttamente, ma il mio tentativo di riconvertirle in un oggetto poligono non è riuscito con il seguente messaggio:
Error in SpatialPolygons(tkml, proj4string = CRS("+init=epsg:3857")) :
cannot get a slot ("area") from an object of type "double"