Я работаю с огромными файлами .kml (до 10 Гб) и мне нужен эффективный способ чтения их в R. До сих пор я конвертировал их в шейп-файлы через 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"