Pracuję z dużymi plikami .kml (do 10 Gb) i potrzebuję wydajnego sposobu na ich odczytanie do R. Do tej pory przekształcałem je w pliki shapefile za pomocą QGIS, a następnie z powrotem w R z readShapePoly i readOGR (ten ostatni , nawiasem mówiąc, jest ~ 1000 szybszy niż poprzedni). Idealnie chciałbym wyciąć etap pośredni QGIS, ponieważ jest on uciążliwy i powolny.
Jak odczytywać bezpośrednio pliki .kml?
I zobaczyć można również dokonać z readOGR . Niestety nie widzę sposobu wdrożenia działającego przykładu (po długim przygotowaniu pliku .kml:) xx <- readOGR(paste(td, "cities.kml", sep="/"), "cities")
. Wydaje się, że „miasta” to tutaj nazwy obiektów przestrzennych.
Roger Bivand przyznaje, że „odkrycie tej nazwy nie jest oczywiste, ponieważ sterownik KML w OGR potrzebuje go do uzyskania dostępu do pliku. Jedną z możliwości jest:
system(paste("ogrinfo", paste(td, "cities.kml", sep="/")), intern=TRUE)
„
Ale to też nie działa dla mnie. Oto testowy plik .kml do wypróbowania. Z tym w moim katalogu roboczym readOGR("x.kml", "id")
generuje ten komunikat o błędzie:
Error in ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv) :
Cannot open layer .
I system(paste("ogrinfo", "x.kml"), intern=TRUE)
generuje:
[1] "Had to open data source read-only." "INFO: Open of `x.kml'"
[3] " using driver `KML' successful." "1: x (3D Polygon)"
, którego po prostu nie rozumiem.
Czy getKMLcoordinates
{maptools} byłoby prawidłową alternatywą?
Próbowałem także:
tkml <- getKMLcoordinates(kmlfile="x.kml", ignoreAltitude=T)
head(tkml[[1]])
tkml <- SpatialPolygons(tkml,
proj4string=CRS("+init=epsg:3857"))
Współrzędne są generowane poprawnie, ale moja próba przekształcenia ich z powrotem w obiekt wieloboku nie powiodła się z następującym komunikatem:
Error in SpatialPolygons(tkml, proj4string = CRS("+init=epsg:3857")) :
cannot get a slot ("area") from an object of type "double"