Я працюю з величезними .kml файлами (до 10 Gb) і мені потрібен ефективний спосіб їх читання в R. До цих пір я перетворював їх у shapefiles через QGIS, а потім повертався в R з readShapePoly і readOGR (останній , до речі, на ~ 1000 швидше, ніж колишній). В ідеалі я хотів би припинити етап посередництва QGIS, оскільки це громіздко і повільно.
Як читати .kml файли безпосередньо?
Я бачу, це можна зробити і з readOGR . На жаль, я не бачу, як реалізувати відпрацьований приклад (після тривалої підготовки файлу .kml:) xx <- readOGR(paste(td, "cities.kml", sep="/"), "cities")
. Здається, що "міста" тут - назва просторових об'єктів.
Роджер Біванд визнає, що "як виявити це ім'я не очевидно, оскільки драйвер KML в OGR потребує його для доступу до файлу. Одна з можливостей:
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"