Estou trabalhando com enormes arquivos .kml (até 10 Gb) e preciso de uma maneira eficiente de lê-los em R. Até agora, tenho convertido-os em shapefiles via QGIS e depois voltado ao R com readShapePoly e readOGR (o último , a propósito, é ~ 1000 mais rápido que o anterior). Idealmente, gostaria de cortar o estágio intermediário do QGIS, pois é complicado e lento.
Como ler arquivos .kml diretamente?
I ver este pode também ser feito com readOGR . Infelizmente, não consigo ver como implementar o exemplo trabalhado (após uma longa preparação do arquivo .kml:) xx <- readOGR(paste(td, "cities.kml", sep="/"), "cities")
. Parece que "cidades" aqui é o nome dos objetos espaciais.
Roger Bivand admite que "Como se descobre esse nome não é óbvio, pois o driver KML no OGR precisa dele para acessar o arquivo. Uma possibilidade é:
system(paste("ogrinfo", paste(td, "cities.kml", sep="/")), intern=TRUE)
"
Mas isso também não funciona para mim. Aqui está um arquivo .kml de teste para experimentá-lo. Com ele no meu diretório de trabalho, readOGR("x.kml", "id")
gera esta mensagem de erro:
Error in ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv) :
Cannot open layer .
E system(paste("ogrinfo", "x.kml"), intern=TRUE)
gera:
[1] "Had to open data source read-only." "INFO: Open of `x.kml'"
[3] " using driver `KML' successful." "1: x (3D Polygon)"
, que eu simplesmente não entendo.
Iria getKMLcoordinates
{MapTools} ser uma alternativa válida?
Eu também tentei isso:
tkml <- getKMLcoordinates(kmlfile="x.kml", ignoreAltitude=T)
head(tkml[[1]])
tkml <- SpatialPolygons(tkml,
proj4string=CRS("+init=epsg:3857"))
As coordenadas são geradas corretamente, mas minha tentativa de convertê-las novamente em um objeto de polígono falhou com a seguinte mensagem:
Error in SpatialPolygons(tkml, proj4string = CRS("+init=epsg:3857")) :
cannot get a slot ("area") from an object of type "double"