Tôi đang làm việc với các tệp .kml khổng lồ (tối đa 10 Gb) và cần một cách hiệu quả để đọc chúng vào R. Cho đến bây giờ tôi đã chuyển đổi chúng thành shapefile thông qua QGIS và sau đó quay lại R với readShapePoly và readOGR (sau này , nhân tiện, nhanh hơn ~ 1000 so với trước đây). Tôi lý tưởng muốn cắt bỏ giai đoạn trung gian của QGIS vì nó cồng kềnh và chậm chạp.
Làm thế nào để đọc tập tin .kml trực tiếp?
Tôi thấy điều này cũng có thể được thực hiện với readOGR . Thật không may, tôi không thể thấy cách triển khai ví dụ đã làm việc (sau khi chuẩn bị dài tệp .kml xx <- readOGR(paste(td, "cities.kml", sep="/"), "cities")
:). Dường như "thành phố" ở đây là tên của các vật thể không gian.
Roger Bivand thừa nhận rằng "Cách một người phát hiện ra tên này là không rõ ràng, vì trình điều khiển KML trong OGR cần nó để truy cập tệp. Một khả năng là:
system(paste("ogrinfo", paste(td, "cities.kml", sep="/")), intern=TRUE)
"
Nhưng điều này cũng không làm việc cho tôi. Đây là một tập tin thử nghiệm .kml để thử nó. Với nó trong thư mục làm việc của tôi, readOGR("x.kml", "id")
tạo thông báo lỗi này:
Error in ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv) :
Cannot open layer .
Và system(paste("ogrinfo", "x.kml"), intern=TRUE)
tạo ra:
[1] "Had to open data source read-only." "INFO: Open of `x.kml'"
[3] " using driver `KML' successful." "1: x (3D Polygon)"
, điều mà tôi đơn giản là không hiểu.
Sẽ getKMLcoordinates
{maptools} là một lựa chọn hợp lệ?
Tôi cũng đã thử điều này:
tkml <- getKMLcoordinates(kmlfile="x.kml", ignoreAltitude=T)
head(tkml[[1]])
tkml <- SpatialPolygons(tkml,
proj4string=CRS("+init=epsg:3857"))
Các tọa độ được tạo chính xác, nhưng nỗ lực của tôi để chuyển đổi chúng trở lại thành một đối tượng đa giác không thành công với thông báo sau:
Error in SpatialPolygons(tkml, proj4string = CRS("+init=epsg:3857")) :
cannot get a slot ("area") from an object of type "double"