Ich arbeite mit riesigen .kml-Dateien (bis zu 10 GB) und brauche eine effiziente Methode, um sie in R zu lesen. Bisher habe ich sie über QGIS in Shapefiles konvertiert und dann mit readShapePoly und readOGR (letzteres) wieder in R ist übrigens ~ 1000 schneller als die erstere). Ich möchte die QGIS-Zwischenstufe idealerweise streichen, da sie umständlich und langsam ist.
Wie lese ich .kml-Dateien direkt ein?
Ich sehe, dass dies auch mit readOGR möglich ist . Leider kann ich nicht sehen, wie das Beispiel implementiert wird (nach langwieriger Vorbereitung der .kml-Datei:) xx <- readOGR(paste(td, "cities.kml", sep="/"), "cities")
. Es scheint, dass "Städte" hier der Name der räumlichen Objekte ist.
Roger Bivand gibt zu, dass "es nicht offensichtlich ist, wie man diesen Namen entdeckt, da der KML-Treiber in OGR ihn benötigt, um auf die Datei zuzugreifen. Eine Möglichkeit ist:
system(paste("ogrinfo", paste(td, "cities.kml", sep="/")), intern=TRUE)
"
Aber das funktioniert auch bei mir nicht. Hier ist eine .kml-Testdatei zum Anprobieren . readOGR("x.kml", "id")
Generiert in meinem Arbeitsverzeichnis die folgende Fehlermeldung:
Error in ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv) :
Cannot open layer .
Und system(paste("ogrinfo", "x.kml"), intern=TRUE)
generiert:
[1] "Had to open data source read-only." "INFO: Open of `x.kml'"
[3] " using driver `KML' successful." "1: x (3D Polygon)"
, was ich einfach nicht verstehe.
Wäre getKMLcoordinates
{maptools} eine gültige Alternative?
Ich habe es auch versucht:
tkml <- getKMLcoordinates(kmlfile="x.kml", ignoreAltitude=T)
head(tkml[[1]])
tkml <- SpatialPolygons(tkml,
proj4string=CRS("+init=epsg:3857"))
Die Koordinaten werden korrekt generiert, aber mein Versuch, sie wieder in ein Polygonobjekt umzuwandeln, schlug mit der folgenden Meldung fehl:
Error in SpatialPolygons(tkml, proj4string = CRS("+init=epsg:3857")) :
cannot get a slot ("area") from an object of type "double"