Je travaille avec d’énormes fichiers .kml (jusqu’à 10 Gb) et j’ai besoin d’un moyen efficace de les lire en R. Jusqu’à présent, je les ai convertis en fichiers de formes via QGIS, puis en R avec readShapePoly et readOGR (ce dernier Soit dit en passant, est environ 1000 fois plus rapide que l’ancien). J'aimerais idéalement couper le stade intermédiaire de QGIS car il est lourd et lent.
Comment lire les fichiers .kml directement?
Je vois que cela peut également être fait avec readOGR . Malheureusement, je ne vois pas comment implémenter l'exemple travaillé (après une longue préparation du fichier .kml:) xx <- readOGR(paste(td, "cities.kml", sep="/"), "cities")
. Il semble que "villes" soit le nom des objets spatiaux.
Roger Bivand admet que "la manière dont on découvre ce nom n’est pas évidente, car le pilote KML dans OGR en a besoin pour accéder au fichier. Une possibilité est:
system(paste("ogrinfo", paste(td, "cities.kml", sep="/")), intern=TRUE)
"
Mais cela ne fonctionne pas pour moi non plus. Voici un fichier test .kml pour l'essayer. Avec cela dans mon répertoire de travail, readOGR("x.kml", "id")
génère ce message d'erreur:
Error in ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv) :
Cannot open layer .
Et system(paste("ogrinfo", "x.kml"), intern=TRUE)
génère:
[1] "Had to open data source read-only." "INFO: Open of `x.kml'"
[3] " using driver `KML' successful." "1: x (3D Polygon)"
, que je ne comprends tout simplement pas.
Est-ce que getKMLcoordinates
{} maptools être une alternative valable?
J'ai aussi essayé ceci:
tkml <- getKMLcoordinates(kmlfile="x.kml", ignoreAltitude=T)
head(tkml[[1]])
tkml <- SpatialPolygons(tkml,
proj4string=CRS("+init=epsg:3857"))
Les coordonnées sont générées correctement, mais ma tentative de les reconvertir en objet polygone a échoué avec le message suivant:
Error in SpatialPolygons(tkml, proj4string = CRS("+init=epsg:3857")) :
cannot get a slot ("area") from an object of type "double"