SPATIAL STATISTIK

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
Vanessa

SPATIAL STATISTIK

Beitrag von Vanessa »

Hallo zusammen,

ich hab ein grosses shapefile mit sehr vielen Polygonen (17769 Polygone, 104.4 Mb), welche ich in ein Raster umwandeln will. Jede Gridzelle des Rasters kann entweder von keinem, einem oder mehreren Polygonen belegt sein. Ich möchte die prozentuale Deckung jeder Gridzelle mit Polygonen ausgegeben haben bei der Umwandlung ins Raster, so wie das die Funktion rasterize rasterize (x, y, getCover=TRUE) macht wenn man getCover=TRUE setzt. Das Problem ist nur, dass die Funktion rasterize nur die Polygone beachtet, welche über dem Mittelpunkt der entsprechenden Rasterzelle liegen, alle anderen werden ignoriert. Dadurch verliere ich mehr als die Hälfte meines Datensatzes. Deshalb habe ich folgendes versucht:

(r = raster, ln = shapefile with polygons)

Code: Alles auswählen

rp <- rasterToPolygons(r)

covers <- unique(ln@data$PERCENTAGE)

for(cover in covers){
  psub <- subset(ln, PERCENTAGE==cover)
  pu <- gUnaryUnion(psub)
  gi <- gIntersection(rp, pu, byid = T)
  ind <- as.numeric(do.call(rbind, strsplit(names(gi), " "))[,1])
  r[] <- NA
  r[ind] <- sapply(gi@polygons, function(x) slot(x, 'area'))  # a bit faster than gArea(gi, byid = T)
  writeRaster(r, paste0("cover/", cover, "area.tif"))
}
Der Code funktioniert auch für kleinere Datensätze, aber nicht für meinen Gesamtdatensatz.
Erklärung zum Code: in meinem Shapefile gibt es jede Menge Polygone die je einer von vier Deckungsklassen einer invasiven Pflanzenart angehören. Die Deckung ist in der Spalte PERCENTAGE gespeichert. Zu Beginn der Schleife teile ich das Shapefile nach den Deckungsklassen (covers) in vier Teile.
Am Ende der Schleife bekomme ich dann vier Rasterlayer die je eine der Deckungsklassen enthalten, wobei die Deckungsklasse im Namen des entsprechenden Rasters gespeichert ist. Jede Zelle des Rasters hat gespeichert wie viel von ihrer Fläche anteilig mit Polygonen bedeckt ist. Mit diesen beiden Informationen kann ich anschliessenden alle Raster stacken und die Gesamtdeckung jeder Zelle anteilig für die Deckungsklassen berechnen. Leider bricht R die Session immer ab. Daher meine Frage: hat jemand eine Idee wie ich entweder die rasterize Funktion dazu bringen kann alle Polygone zu beachten oder wie mein Problem mit den grossen Daten löse? Parallelisierung auf 8 Kernen dauert auch ewig....

Vielen, vielen lieben Dank!
Zuletzt geändert von jogo am Di Dez 06, 2016 8:47 pm, insgesamt 1-mal geändert.
Grund: Formatierung des Codes
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: SPATIAL STATISTIK

Beitrag von jogo »

Hallo Vanessa,

willkommen im Forum!
Gibt es denn irgendwelche Fehlermeldungen?

Bezüglich der Erschöpfung des RAMs wurde hier schon mal etwas geschrieben: viewtopic.php?f=7&t=23&hilit=allocation&start=10#p185

Gruß, Jörg
Vanessa

Re: SPATIAL STATISTIK

Beitrag von Vanessa »

Ja R meldet folgendes:
50: In writeBin(v, x@file@con, size = x@file@dsize) : problem writing to connection

Bei meiner Internet-Recherche habe ich folgenden Lösungsansatz gefunden:
# Most likely indicates that your disk is full.
# This could be the disk of your working directory, or anywhere else you are writing a file.
# If you are not specifying a filename, you can check tempfile() to find the general location where temporary
# files are stored (the actual folder changes between sessions). You can change this via rasterOptions().
# You can also avoid writing temporary files by providing a filename= argument to the raster functions.
(http://stackoverflow.com/questions/3800 ... orrelation )

ABER: R terminiert die Session auch wenn ich einen anderen Speicherort mit erheblich mehr freiem Speicher angebe (meine 2 TB Festplatte die nicht mal zu 1/4 voll ist).
Zuletzt geändert von jogo am Mi Dez 07, 2016 4:22 pm, insgesamt 1-mal geändert.
Grund: Link ergänzt
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: SPATIAL STATISTIK

Beitrag von EDi »

Der Fehler scheint ja von writeRaster zu kommen.

Kannst du mal schauen wie sich dein Festplattenspeicher währendessen verhällt? Un ob auch genug Platz da ist.
Vielleicht checkst du auch wie groß das raster das geschrieben wird ist? Vielleichts brauchst du da nicht so groß?
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Antworten