ฉันทำงานกับไฟล์. kml ขนาดใหญ่ (มากถึง 10 Gb) และต้องการวิธีที่มีประสิทธิภาพในการอ่านไฟล์ให้เป็นไฟล์ R จนกระทั่งตอนนี้ฉันได้แปลงไฟล์เหล่านี้ให้เป็นไฟล์รูปร่างผ่าน QGIS แล้วกลับไปเป็น R ด้วย readShapePoly และ readOGR โดยวิธีการคือ 1,000 เร็วกว่าเดิม) ฉันชอบที่จะลดขั้นตอนการเป็นตัวกลาง QGIS เนื่องจากยุ่งยากและช้าลง
จะอ่านไฟล์. kml โดยตรงได้อย่างไร
ฉันเห็นนี้ยังสามารถทำได้ด้วย readOGR น่าเสียดายที่ผมไม่สามารถดูวิธีการใช้ตัวอย่างที่ทำงาน (หลังจากการเตรียมความยาวของไฟล์ .kml: xx <- readOGR(paste(td, "cities.kml", sep="/"), "cities")
) ดูเหมือนว่า "เมือง" ที่นี่เป็นชื่อของวัตถุเชิงพื้นที่
Roger Bivand ยอมรับว่า "วิธีค้นพบชื่อนี้ไม่ชัดเจนเนื่องจากไดรเวอร์ 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"